1

在我的自動化測試中,我想要使用@DataProvider來執行一些數據庫更新,以保證我將要測試的數據的狀態,以及2.)返回將在這樣的環境中工作的測試數據。在TestNG @DataProvider中進行的數據庫更新無法回滾

我在找的是在@DataProvider正文中更新成功,然後在我的測試中所做的更新成功,所有斷言都通過,然後回滾測試更新。但是,@DataProvider更新不會回滾,並在測試完成後留下。

有沒有方法可以回滾@DataProvider內部所做的數據庫更新?

回答

0

您的問題是呈三角How to delete data only after all tests, based on inputs from data provider, are run?

它的答案是適用於你。


UPDATE

在你的情況@DataProvider是一個壞的選擇。在TestNG中,您只能使用@DataProvider提供的結果工作,並且它們在套件之前運行。你有幾種方法來解決你的問題。

  • 創建一個將DB事務與相關的@DataProvider結果連接的偵聽器。它必須執行ITestListener。在每個測試結束事件中,您的監聽器將回滾所需的事務。
  • 第二個選項,就像是第一位的,但你的@DataProvider不做任何處理數據庫,它只是提供了一些投入,這應該由@BeforeMehtod@AfterMethod分別進行處理,更新和rollbacked。在這種情況下,所有的上下文都可以存儲在特定的測試類中。
  • 此外,您可以使用上述原理創建新的註釋,提供和管理您的商店實體。
+0

確實如此,但該解決方案存在一些問題。 1.)插入一些數據並更新一些數據。更新後的數據不能簡單地刪除,必須恢復到之前的狀態。 2.)我不希望我的團隊必須記住爲@DataProvider中的每個更新編寫「撤消」代碼。回滾事務要簡單得多。 有沒有辦法在@DataProvider中事務回滾更新? –

+0

請參閱更新的答案 – RocketRaccoon