【问题标题】:Adding system property in testng XML?在 testng XML 中添加系统属性?
【发布时间】:2015-01-19 14:37:44
【问题描述】:

我们正在尝试直接在 testng xml 文件中添加系统属性,因为我们希望在 Jenkins 作业中自动运行不同的测试套件,而不需要为每个测试集使用不同的 xml 文件。有没有办法将系统属性直接传递给文件并解析它?

例如,我们目前有:

<test name="Regression">
        <groups>
            <run>
                <include name="Test" />
            </run>
        </groups>

并且希望能够拥有:

<test name="Regression">
    <groups>
        <run>
            <include name=$TestParameter />
        </run>
    </groups>

非常感谢!

【问题讨论】:

    标签: java xml jenkins testng system-properties


    【解决方案1】:

    在 TestNG 中,没有解释器可以将您的“变量”转换为系统属性中的值。您必须自己添加该功能。看看http://testng.org/doc/documentation-main.html#running-testng-programmatically。 这是一个符合您建议的示例:

    XmlSuite suite = new XmlSuite();
    suite.setName("TmpSuite");
    
    XmlTest test = new XmlTest(suite);
    test.setName("TmpTest");
    List<XmlClass> classes = new ArrayList<XmlClass>();
    classes.add(new XmlClass(System.getProperty("TestParameter")));
    test.setXmlClasses(classes) ;
    
    List<XmlSuite> suites = new ArrayList<XmlSuite>();
    suites.add(suite);
    TestNG tng = new TestNG();
    tng.setXmlSuites(suites);
    tng.run(); 
    

    当然还有其他方法可以做到这一点。一种更简单的方法可能是运行一个预测试脚本,该脚本只是在测试开始之前替换 XML 文件中的内容。例如,使用 groovy 脚本执行此操作:

    def file = new File('relativepath/file')
    def xml = file.text
    //println xml
    file.text = xml.replace('$TestParameter',System.getProperty('TestParameter'))
    

    记住在定义 $TestParameter 时不要使用 ",因为 groovy 会将其解释为尝试使用具有该名称的局部变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      相关资源
      最近更新 更多