在測驗作業場景中,經常會遇到下面的問題:
- 1、執行自動化測驗用例的時候,只想指定某個測驗類,或者某個方法,又或者某一類用例等,怎么辦?
- 2、想要和 Jenkins 一起進行持續集成,可是用例又不可能在 IDE 里面執行,怎么辦?
這個時候就需要 Maven 登場了,利用 Maven 的Maven-Surefire-Plugin插件可以幫助我們完成上述的目標!它可以通過命令列的形式來管理我們要執行的用例, - Maven 3.x +
- JDK 1.7 +
對于我們測驗來說,常接觸的幾個用例管理框架都支持(這里指 Java 技術堆疊) - Using TestNG
- Using JUnit 5 Platform
- Using JUnit
常用到的 Junit5 相關依賴:
Maven-Surefire-Plugin:
指定編譯 JDK 版本:
現有如下結構的測驗類,在此基礎上進行演示:
使用 mvn test 命令可以一次性執行所有的用例,執行完之后可以看到控制臺中的結果:
執行完之后我們打開 target,所有 maven 執行完的結果都會在 target 目錄下的 surefire-reports 下:
其中: - xml:可用于 Jenkins 決議,檔案與測驗類對應,里面的內容代表了測驗用例的執行情況,
- txt:測驗結果的命令列輸出,
使用 mvn -Dtest=${TestClass} 命令可以指定運行測驗類,例如
我這里要運行 MavenDemo1Test 下的用例,就可以使用 mvn -Dtest=MavenDemo1Test test:
import org.junit.jupiter.api.Test; ¨K31K
執行測驗:
$ mvn -Dtest=MavenDemo1Test test
測驗結果:
我們還可以以 逗號 分隔指定多個測驗類執行,例如這里我想執行 MavenDemo1Test 和 MavenDemo2Test:
mvn -Dtest=MavenDemo1Test,MavenDemo2Test test
測驗結果:
我們可以使用通配符來匹配要執行的測驗類,例如這里我利用通配符同時指定測驗類 MavenDemo1Test 和 MavenDemo2Test:
$ mvn -Dtest=MavenDemoTest test
測驗結果:
當然,上述的測驗方式組合起來也是可以的,例如這里利用通配符執行 MavenDemo1Test 和 MavenDemo2Test,再精確指定執行 MavenPackageDemoTest:
$ mvn -Dtest=MavenDemoTest,MavenPackageDemoTest test
測驗結果:
除了可以指定執行測驗類,還可以指定測驗方法,測驗類 和 測驗方法 之間用 # 隔開即可例如這個我想要指定執行 MavenDemo1Test 中的 test2 方法:
$ mvn -Dtest=MavenDemo1Test#test2 test
測驗結果:
方法依然可以使用通配符,例如這里要執行 MavenPackageDemoTest 中的方法 MavenPackageTest,可以匹配以 Test 結尾:
$ mvn -Dtest=MavenPackageDemoTest#*Test test
測驗結果:
mvn 也可以指定某個測驗類下面的多個方法,使用+號分隔方法,例如指定 MavenDemo1Test 下的方法 test1() 和 test2(),
$ mvn -Dtest=MavenDemo1Test#test1+test2 test
mvn 還提供了失敗重試,設定失敗重試的次數,當用例執行時直到用例成功或者失敗次數達到上限,命令如下:
mvn -Dsurefire.rerunFailingTestsCount=2 test
可是遺憾的是,此功能只支持 Junit4,官網給出的說明如下:
在 Junit5 中,我們其實是可以利用 @RunWith(JUnitPlatform.class) 運行測驗套件的,具體內容可參考文章:[Junit5簡介、構成、新特性及基本使用-常用注解、套件執行] ,
然而當我們使用mvn來執行套件時,
套件:
mvn 命令:
mvn -Dtest=TestSuite test
會出現如下報錯:
據說是因為 surefire 插件的版本問題,當切換到 2.19 版本的時候,套件執行成功了,可是 mvn test 命令又失敗了,這顯然不是我們想要的結果,于是乎開始了 Google 之路,,,
最終找到了一個相對合理的解釋!抱歉,又要失望了,Google 到別人的解釋如下(已翻譯完成~):
簡單的說就是 surefire 插件暫時還不支持在 Junit5 下執行繼承至 Junit4 的 @RunWith,所以還是需要有心人出來解決這個問題才行了~~
例如這里我默認只想執行 MavenPackageDemoTest ,而另外兩個 MavenDemo 開頭的測驗類我都不想執行,這個時候可以在 pom 中做如下配置,在 surefire 插件下添加 configuration:
執行 mvn test ,查看結果:
從結果中可以看到僅僅執行了我們默認指定的 MavenPackageDemoTest 中的 case,其余以 MavenDemo 開頭的測驗類均未被執行,
這里介紹了 maven-surefire-plugin 插件在測驗執行中的一些常見用法,還有很多其他的用法,例如: - 使用很復雜的格式匹配
- 控制在不同級別上的多執行緒和多行程執行
后續將慢慢研究補充,有興趣也可直接參考官網學習, -
喜歡軟體測驗的小伙伴們,如果我的博客對你有幫助、如果你喜歡我的博客內容,請 “點贊” “評論” “收藏” 一鍵三連哦,更多技術文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/473456.html
標籤:其他
