在我的自动化测试中,我想使用 @DataProvider 来 1.) 执行一些数据库更新,以保证我要测试的数据的状态,以及 2.) 返回将在此类环境中工作的测试数据。
我发现@DataProvider主体中的更新成功,然后我的测试中所做的更新成功,所有断言通过,然后回滚测试更新。但是,@DataProvider 更新不会回滚,而是在测试完成后保留。
有没有办法回滚@DataProvider主体内部进行的数据库更新?
最佳答案
您的问题类似于How to delete data only after all tests, based on inputs from data provider, are run?
它的答案适用于您。
<小时/>更新
就您而言,@DataProvider
是一个糟糕的选择。在 TestNG 中,您只能使用 @DataProvider
提供的结果,并且它们在套件之前运行。您有多种方法可以解决您的问题。
- 创建一个监听器,将数据库事务与相关的
@DataProvider
结果连接起来。它必须实现ITestListener
。在每个测试完成事件上,您的监听器将回滚所需的事务。 - 第二个选项与第一个选项类似,但您的
@DataProvider
对数据库不执行任何操作,它只是提供一些输入,这些输入应由@BeforeMehtod
和@AfterMethod
处理,分别更新和回滚。在这种情况下,您的所有上下文都可以存储在特定的测试类中。 - 您还可以使用上述原则创建一个新注释,以提供和管理您的业务实体。
关于java - 在 TestNG @DataProvider 中进行的数据库更新不会回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45291371/