在testng XML中添加系统属性?

时间:2015-01-19 14:37:44

标签: java xml jenkins testng system-properties

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

例如,我们目前有:

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

并希望能够拥有:

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

非常感谢!

1 个答案:

答案 0 :(得分:1)

在TestNG中,没有可以翻译您的变量的解释器&#39;从系统属性中获取值。您必须自己添加该功能。看看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'))

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

相关问题