在 TestNG @DataProvider 中进行的数据库更新不回滚
Database updates made in TestNG @DataProvider not rolling back
在我的自动化测试中,我想使用 @DataProvider 来 1.) 执行一些数据库更新,以保证我将要测试的数据的状态,以及 2.) return 将在这样的环境中工作的测试数据。
我发现更新在@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
处理,已更新并分别回滚。在那种情况下,您的所有上下文都可以存储在特定的测试 class. 中
- 您还可以使用上述原则创建一个新注释,提供和管理您的业务实体。
在我的自动化测试中,我想使用 @DataProvider 来 1.) 执行一些数据库更新,以保证我将要测试的数据的状态,以及 2.) return 将在这样的环境中工作的测试数据。
我发现更新在@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
处理,已更新并分别回滚。在那种情况下,您的所有上下文都可以存储在特定的测试 class. 中
- 您还可以使用上述原则创建一个新注释,提供和管理您的业务实体。