testng.xml文件
<test name="Regression 1">
<parameter name="group" value="regression"></parameter>
<groups>
<run>
<include name = "regression"/>
</run>
</groups>
<packages>
<package name="com.turvo.tests.regressiontests.regression1.*">
</package>
</packages>
</test>
<test name="Regression 2">
<parameter name="group" value="regression"></parameter>
<groups>
<run>
<include name = "regression"/>
</run>
</groups>
<packages>
<package name="com.turvo.tests.regressiontests.regression2.*">
</package>
</packages>
</test>
我想参数化testng.xml,这样我只能运行回归1测试或回归2测试,或者如果需要,可以通过从命令行传递变量。有没有办法实现这个目标?
答案 0 :(得分:0)
基本上有两种方法可以达到这个目的。
使用Maven surefire插件
要通过Maven surefire插件实现此目的,请将您的surefire插件配置为如下所示。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>${suiteXmlFile}</suiteXmlFile>
</suiteXmlFiles>
<properties>
<property>
<name>testnames</name>
<value>${tests}</value>
</property>
</configuration>
</plugin>
在pom.xml的<properties>
部分中,添加以下属性
<properties>
<suiteXmlFile>src/test/resources/suite.xml</suiteXmlFile>
<tests>48341304_Test1</tests>
</properties>
让我们说您的套件xml如下所示
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="48341304_Suite" parallel="false" verbose="2">
<test name="48341304_Test1" verbose="2">
<classes>
<class name="com.rationaleemotions.stackoverflow.qn48341304.TestClassOne"/>
</classes>
</test>
<test name="48341304_Test2" verbose="2">
<classes>
<class name="com.rationaleemotions.stackoverflow.qn48341304.TestClassTwo"/>
</classes>
</test>
</suite>
您现在可以通过maven命令行选择要执行的<test>
:mvn test -Dtests=48341304_Test2
<强>买者强>
唯一的问题是,你必须为JVM参数-Dtests
强制提供一些值(这就是我为标签<tests>
定义默认值的原因之一在<properties>
部分。
使用如下所示的beanshell表达式
以下是套件xml文件的外观:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="48341304_Suite" parallel="false" verbose="2">
<test name="48341304_Test1" verbose="2">
<method-selectors>
<method-selector>
<script language="beanshell">
<![CDATA[
whatTest = System.getProperty("testToRun");
print(whatTest)
if (whatTest == null || whatTest.trim().isEmpty()) return true;
whatTest.contains(testngMethod.getXmlTest().getName());
]]>
</script>
</method-selector>
</method-selectors>
<classes>
<class name="com.rationaleemotions.stackoverflow.qn48341304.TestClassOne"/>
</classes>
</test>
<test name="48341304_Test2" verbose="2">
<classes>
<class name="com.rationaleemotions.stackoverflow.qn48341304.TestClassTwo"/>
</classes>
</test>
</suite>
现在您甚至可以通过自己喜欢的IDE运行此套件xml文件,此套件xml文件现在与构建工具无关(它可以与Maven(或)Gradle(或)Ant一起使用)。为了选择需要运行的<test>
标记,请通过JVM参数-DtestToRun
以下是IntelliJ
的运行配置的快照