将变量传递给testng.xml

时间:2017-10-11 23:12:59

标签: maven testng

我正在使用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,到目前为止没有运气。 谢谢。

1 个答案:

答案 0 :(得分:2)

您可以通过利用IAlterSuiteListener来实现此目的。

您需要确保使用最新发布的TestNG版本(目前为6.12)。

然后构建一个实现org.testng.IAlterSuiteListener的侦听器,在其中你基本上可以做任何你想做的事情。你可以做的一些事情是:

  1. <test>标记
  2. 中动态添加/删除<suite>标记
  3. <class>代码中动态添加/删除<test>代码(猜测是您正在寻找的内容)
  4. 更改套件的属性,例如threadCountparallel模式等,
  5. 这是一个简化的样本

    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