如何从调用程序中覆盖TestNG参数

时间:2017-08-28 17:27:58

标签: java maven testng maven-surefire-plugin

我正在使用带有Maven Surefire 2.18的TestNG 6.0。我试图在我的testng.xml文件中使用参数的默认值,并在我的Maven pom.xml中覆盖它,该文件引用testng.xml文件作为其默认值。以下是我的代码示例:

class TestClass {
    @Parameters({ "parm1" })
    @BeforeClass
    void setup(String parm1) {
        System.out.println("parm1 = " + parm1);
    }
}

这是我的testng.xml文件:

<suite name="suite1">
    <parameter name="parm1" value="Default Value">
    <test name="myTest">
        <classes>
            <class name="TestClass"/>
        </classes>
    </test>
</suite>

这是我的pom.xml文件中的surefire插件条目:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <suiteXmlFiles>
            <suiteXmlFile>testng.xml</suiteXmlFile>
        </suiteXmlFiles>
        <systemPropertyVariables>
            <parm1>Override Value</parm1>
        </systemPropertyVariables>
    </configuration>
</plugin>

1 个答案:

答案 0 :(得分:1)

我弄清楚这里发生了什么。事实证明,testng.xml在使用时占据了至高无上的地位。它有点倒退恕我直言,但那是怎么回事。

为了解决这个问题,我将该字段设为可选,并在我的java代码中指定了默认值...

class TestClass {
    @Parameters({ "parm1" })
    @BeforeClass
    void setup(@Optional("Default Value") String parm1) {
        System.out.println("parm1 = " + parm1);
    }
}

...同时从testng.xml文件中删除参数。

<suite name="suite1">
    <test name="myTest">
        <classes>
            <class name="TestClass"/>
        </classes>
    </test>
</suite>

这释放了TestNG引擎以在系统属性中查找参数值,其中参数已添加到问题中显示的pom.xml中。