testng是乙個很強大的單元測試工具。和junit3、4版本相比,testng都多了乙個很好的功能「測試依賴」。比如我可以寫乙個測試方法如下:
@test(dependsonmethods="testmethod2")
public void testmethod1()
這樣就表示在執行testmethod1測試之前,先去檢查一下testmethod2這個方法,如果testmethod2這個方法測試通過了,才會執行testmethod1,否則直接將testmethod1的執行結果標記為「skipped」。在大型專案的測試中,特別是涉及到一些不純粹是單元測試的測試時,這個特性非常有用。dependsonmethods的屬性可以引用其他類中的測試方法,如可以寫成@test(dependsonmethods="com.test.test1.testmethod2")。
但這樣,我如果要單獨執行某個測試類的話,麻煩就來了(這種單獨執行某個測試類的方法在單元測試中基本不存在,但在一些自動化的整合測試、功能測試中因為執行時間的問題就很常見了)。我寫了在com.test.test1這個類的某個測試方法裡寫了@test(dependsonmethods="com.test.test2.testmethod2"),在執行test1時,會直接提示出錯找不到testmethod2方法,只有把test1和test2作為乙個suite來統一執行的時候才可以正常執行。
testng還有對group的依賴管理,也同樣有這個問題。
為了解決這個問題,得到乙個適合做整合測試、功能測試的testng版本,研究了一些testng的源**,發現修改兩個地方可以解決這個問題:
1. org.testng.internal.methodhelper的findmethodsnamed方法。這個方法是用來根據名字查詢測試方法的,不存在會丟擲異常。將丟擲異常的部分注釋掉即可,如下。
if (!foundatleastamethod)
這個方法只有在檢查測試依賴項時才會被呼叫,可以放心修改,不會影響其他功能。
2. org.testng.internal.invoker類的checkdependencies方法,這裡頭有一段為檢查依賴中是否有不存在group,將其注釋掉即可。
// any missing group?
// if (testmethod.getmissinggroup() != null)
這樣修改了之後,當某個測試方法的依賴中有不存在的method或者group時,就不會skip這個method,而是直接執行這個method了。開源的東西果然還是方便啊。
testng依賴測試
測試方法b的執行,依賴測試方法a,就叫做依賴測試。分為硬依賴測試和軟依賴測試。測試方法a先執行,若a執行成功,則b再執行。若a執行失敗,則b不執行。如何使用?test dependsonmethods alwaysrun true 測試方法a先執行,無論a是否執行成功,a執行後b都會執行。如何使用?...
十一 TestNG依賴測試
測試的時候有可能要用到其他測試結果 是否成功 來執行這個測試。就需要用到測試和測試之間傳遞引數 testng叫做 依賴測試。testng依賴測試特點 1 testng允許指定依賴關係,如果依賴關係失敗了,則跳過後面的所有方法.2 如果使用依賴測試則會在執行該方法時先執行依賴的方法,後執行本方法。在 ...
TestNg 7 依賴測試
我本個測試方法執行的時候,依賴於其他的方法。用到關鍵字dependsonmethods 依賴於那個方法 也有依賴於哪個組 dependsongroups 看以下的一段 package com.course.testng import org.testng.annotations.test publi...