【问题标题】:Passing variables into testng.xml将变量传递到 testng.xml
【发布时间】:2018-03-23 18:15:00
【问题描述】:

我正在为我的自动化框架使用 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,到目前为止还没有运气。 谢谢。

【问题讨论】:

    标签: maven testng


    【解决方案1】:

    您可以通过利用 IAlterSuiteListener 来做到这一点。

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

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

    1. &lt;suite&gt; 标签内动态添加/删除&lt;test&gt; 标签
    2. 在您的 &lt;test&gt; 标记中动态添加/删除 &lt;class&gt; 标记(我猜这就是您要查找的内容)
    3. 更改套件的属性,例如threadCountparallel 模式等,

    这是一个简化的示例

    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

    【讨论】:

      猜你喜欢
      • 2020-03-13
      • 2018-06-02
      • 2014-01-22
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多