在 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.
  • 您还可以使用上述原则创建一个新注释,提供和管理您的业务实体。