我正在使用maven和testng作为我的自动化框架。就像它现在实现的那样,我必须使用testng.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="40" name="Suite" parallel="tests">
<test name="Test">
<parameter name="browser" value="chrome"/>
<parameter name="version" value="latest"/>
<parameter name="os" value="windows 10"/>
<classes>
<class name="com.package.tests.TestApp"/>
</classes>
</test>
<test name="Test">
<parameter name="browser" value="chrome"/>
<parameter name="version" value="latest"/>
<parameter name="os" value="windows 10"/>
<classes>
<class name="com.package.tests.TestApp"/>
</classes>
</test>
</suite>
我正在使用@BeforeMethod上方的那些参数来指定应在哪些浏览器中运行测试。
有没有办法通过命令行传递类名? 我尝试了$ {var}和BeanShell,到目前为止没有运气。 谢谢。
答案 0 :(得分:2)
您可以通过利用IAlterSuiteListener来实现此目的。
您需要确保使用最新发布的TestNG版本(目前为6.12)。
然后构建一个实现org.testng.IAlterSuiteListener
的侦听器,在其中你基本上可以做任何你想做的事情。你可以做的一些事情是:
<test>
标记<suite>
标记
<class>
代码中动态添加/删除<test>
代码(猜测是您正在寻找的内容)threadCount
或parallel
模式等,这是一个简化的样本
public static class Listener implements IAlterSuiteListener {
@Override
public void alter(List<XmlSuite> suites) {
XmlSuite suite = suites.get(0);
//Pass the value as comma separated via JVM argument -Dclasses=com.foo.bar,com.bar.foo
String classNames = System.getProperty("classes", "");
String[] classes = classNames.split(",");
if (classes.length != 0) {
XmlTest test = new XmlTest(suite);
test.setName("another_test");
List<XmlClass> xmlClasses = new ArrayList<>();
for (String className : classNames.split(",")) {
XmlClass xmlClass = new XmlClass(className.trim());
xmlClasses.add(xmlClass);
}
test.setClasses(xmlClasses);
suite.setTests(Collections.singletonList(test));
}
}
}
有关详细信息,请参阅我的博文here