如何从调用程序覆盖 TestNG 参数
How to override TestNG parameters from the calling program
我正在使用 TestNG 6.0 和 Maven Surefire 2.18。我正在尝试为我的 testng.xml 文件中的参数使用默认值,并在我的 Maven pom.xml 中覆盖它,它引用 testng.xml 文件的默认值。这是我的代码示例:
class TestClass {
@Parameters({ "parm1" })
@BeforeClass
void setup(String parm1) {
System.out.println("parm1 = " + parm1);
}
}
这是我的 testng.xml 文件:
<suite name="suite1">
<parameter name="parm1" value="Default Value">
<test name="myTest">
<classes>
<class name="TestClass"/>
</classes>
</test>
</suite>
这是我的 pom.xml 文件中的 surefire 插件条目:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
<systemPropertyVariables>
<parm1>Override Value</parm1>
</systemPropertyVariables>
</configuration>
</plugin>
我明白这是怎么回事了。事实证明,testng.xml 在使用时具有至高无上的地位。恕我直言,这有点倒退,但事实就是如此。
为了解决这个问题,我将该字段设为可选,并在我的 java 代码中指定了默认值...
class TestClass {
@Parameters({ "parm1" })
@BeforeClass
void setup(@Optional("Default Value") String parm1) {
System.out.println("parm1 = " + parm1);
}
}
...同时从 testng.xml 文件中删除参数。
<suite name="suite1">
<test name="myTest">
<classes>
<class name="TestClass"/>
</classes>
</test>
</suite>
这释放了 TestNG 引擎以在系统属性中查找参数值,其中参数已添加到问题中显示的 pom.xml 中。
我正在使用 TestNG 6.0 和 Maven Surefire 2.18。我正在尝试为我的 testng.xml 文件中的参数使用默认值,并在我的 Maven pom.xml 中覆盖它,它引用 testng.xml 文件的默认值。这是我的代码示例:
class TestClass {
@Parameters({ "parm1" })
@BeforeClass
void setup(String parm1) {
System.out.println("parm1 = " + parm1);
}
}
这是我的 testng.xml 文件:
<suite name="suite1">
<parameter name="parm1" value="Default Value">
<test name="myTest">
<classes>
<class name="TestClass"/>
</classes>
</test>
</suite>
这是我的 pom.xml 文件中的 surefire 插件条目:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
<systemPropertyVariables>
<parm1>Override Value</parm1>
</systemPropertyVariables>
</configuration>
</plugin>
我明白这是怎么回事了。事实证明,testng.xml 在使用时具有至高无上的地位。恕我直言,这有点倒退,但事实就是如此。
为了解决这个问题,我将该字段设为可选,并在我的 java 代码中指定了默认值...
class TestClass {
@Parameters({ "parm1" })
@BeforeClass
void setup(@Optional("Default Value") String parm1) {
System.out.println("parm1 = " + parm1);
}
}
...同时从 testng.xml 文件中删除参数。
<suite name="suite1">
<test name="myTest">
<classes>
<class name="TestClass"/>
</classes>
</test>
</suite>
这释放了 TestNG 引擎以在系统属性中查找参数值,其中参数已添加到问题中显示的 pom.xml 中。