我的目标是在下面的组合上并行运行测试用例,并为每个组合生成一个范围报告,总共8个组合
在网上搜索后想出了这个。this
testng. xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="tests">
<test name="Windows_Chrome" parallel="classes" thread-count="3">
<parameter name="os" value="windows" />
<parameter name="browser" value="chrome" />
<classes>
<class name="com.mag.SeleniumGrid.Test_001" />
<class name="com.mag.SeleniumGrid.Test_002" />
<class name="com.mag.SeleniumGrid.Test_00N" />
<!--Each class create RemoteWebDriver instance based on parameters-->
</classes>
</test>
<!-- ..... all 8 combinations -->
<test name="Linux_Chrome" parallel="classes" thread-count="3">
<parameter name="os" value="linux" />
<parameter name="browser" value="chrome" />
<classes>
<class name="com.mag.SeleniumGrid.Test_001" />
<class name="com.mag.SeleniumGrid.Test_002" />
<class name="com.mag.SeleniumGrid.Test_00N" />
</classes>
</test>
</suite>
不能说我使用过这种方法,所以很抱歉,但我使用maven运行测试并发现它工作得很好。您可以通过执行以下操作将测试添加到组中:
@Test(groups = {"WindowsChrome", "LinuxChrome"})
public class Test123 {
您可以使用maven运行测试,例如:
mvn test -Dgroups=WindowsChrome
如果你想在管道中运行它,那么我会签出代码并为每个环境克隆它。在管道中,您可以添加每个环境将使用的. env文件,其中包含“OS_TYPE”和“BROWSER_TYPE”等变量。现在你可以做:
stage('Windows Chrome Tests') {
steps {
bat "mvn test -f WindowsChrome/pom.xml -Dgroups=WindowsChrome"
}
}
stage('Linux Chrome Tests') {
steps {
bat "mvn test -f LinuxChrome/pom.xml -Dgroups=LinuxChrome"
}
}
为了让日志与并行测试有任何意义,您需要使用带有记录器的ThreadLocal,它将为每个线程创建一个唯一的实例。确保您在完成后删除此操作,否则使用相同线程的以下测试将继续使用相同的实例。我会将OS/浏览器放在日志文件名中。