[英]how to execute testng tests in parallel using maven surefire plugin
[英]How to execute a method once before maven surefire runs tests
我有一個測試套件,需要預先執行一些設置代碼,以確保我們的數據庫中的某些數據是正確的。
我們正在使用maven surefire插件並行運行測試。 ${tests.wildcard}
由配置文件指定。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<forkCount>4</forkCount>
<reuseForks>false</reuseForks>
<includes>
<include>${tests.wildcard}</include>
</includes>
</configuration>
</plugin>
我希望能夠在surefire並行運行我的測試之前,每個整個maven執行一次只運行一次方法。 我怎樣才能做到這一點?
您可以有一個特殊的測試用例來執行您的驗證碼(如果是這樣的話,則會失敗)。
然后,該測試用例將由特定的Maven Surefire執行(不包括其他測試)執行,並附加到在test
階段之前發生的Maven階段(如process-test-classes
):因此,每個Maven運行之前和之前有效地調用一次任何其他測試。
然后,正常test
階段將執行任何其他所需測試,不包括特殊初始化測試。
這種配置的一個例子是:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19</version>
<configuration>
<excludes>
<exclude>**/InitTest.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>test-init</id>
<phase>process-test-classes</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<test>InitTest</test>
</configuration>
</execution>
</executions>
</plugin>
請注意,任何Surefire執行的全局配置都將排除特殊的init測試。 然后執行另一個執行(在test
階段之前)並且僅運行init測試(使用<test>
元素,該元素優先於任何其他包含/排除)。
因此,您將擁有以下流程:
更新
請注意,您可以通過覆蓋默認的surefire測試執行(具有default-test
執行ID)來運行特殊測試(並排除其他測試),然后為其余部分添加另一個surefire執行,從而實現相同的,並且可能以更加語義正確的方式實現。 (如上所述作為全局配置,這次作為特定執行配置)。
通過這種方法,一切都將附加到test
階段,這就是為什么它在語義上更正確,盡管在pom中更加冗長。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.