如何在Maven命令行中覆盖测试套件参数

gkl3eglg  于 2023-04-21  发布在  Maven
关注(0)|答案(2)|浏览(201)

想询问如何正确覆盖或替换TestSuiteXML文件中声明参数的值。
POM.xml:

<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <systemProperties>
                    <property>
                        <name>mode.debug</name>
                        <value>false</value>
                    </property>                 
                    <property>
                        <name>browser</name>
                        <value>chrome</value>
                    </property>
                </systemProperties>
            </configuration>
        </plugin>
    </plugins>

项目1中的POM.xml:

<plugin>
        <groupId>org.testng</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.0.0-M5</version>
        <dependencies>
            <dependency>
                <groupId>org.apache.maven.surefire</groupId>
                <artifactId>surefire-testng</artifactId>
                <version>3.0.0-M5</version>
            </dependency>
        </dependencies>
        <configuration>
            <suiteXmlFiles>
                <suiteXmlFile>testng.xml</suiteXmlFile>
            </suiteXmlFiles>
        </configuration>
    </plugin>

测试套件位于“src\main\java\plans\Test\TestSuite.xml”中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestSuite">
    <parameter name="browsername" value="chrome" />
    <parameter name="headless" value="false" />
    <parameter name="reportBase64toThumbnail" value="false" />
    <parameter name="logCharPerLine" value="110" />
    <parameter name="reportImageQuality" value="med" />
    <parameter name="implicitlyWaitTime" value="1" />
    <parameter name="pageLoadTimeout" value="300" />
    <parameter name="switchUser" value="false" />
    <parameter name="displayXPath" value="false" />
    <parameter name="OverrideApp" value="APP NAME" />
    <parameter name="USER_NAME" value="USER 1" />
    <parameter name="baseurl" value="https://test.com..." />
    <parameter name="envname" value="TEST_ENV" />
    <test name="TEST_NAME">
        <classes>
            <class name="modules.test.scripts.SAMPLE_SCRIPT" />
        </classes>
    </test>
</suite>

当前要运行的步骤:

mvn --projects commons,project1 --also-make clean install -U -DskipTests
cd project1
mvn clean test -fae -Dsurefire.suiteXmlFiles="src\main\java\plans\Test\TestSuite.xml"

在我们现有的工具中,如果我们在不同的环境中执行相同的TestSuiteXML,我们只提供覆盖名称和值。

baseurl = https://test2.com
envname= TEST2_ENV

在探索Maven和TestNG时,我已经尝试在命令行中添加-Dbaseurl=”https://test2.com“,但baseurl没有被替换或覆盖。
想为这种方法寻求进一步的建议。:)
更新:在检查了maven的调试日志之后,baseurl在“设置系统属性”中被替换,而不是在测试套件的参数值中。

kr98yfug

kr98yfug1#

添加-DParameterName=Value确实有效,但为了在代码中实际反映它,我调整了getParameter函数,以便在获取Parameter值之前首先检查System.getProperty。
通过这种方式,它可以通过在TestSuite中的Parameter值之前首先检查SystemProperties来覆盖该值。

public static String getParameter(String strParam) {
    String tempValue = System.getProperty(strParam);
    if (checkIfNull(tempValue))
        tempValue = getXMLParameter(strParam);
    return tempValue;
}

但如果有更好的解决方案,请不要犹豫回答。

k3fezbri

k3fezbri2#

您可以将它们设置为环境变量并使用System.getenv(key)读取。将默认值保留在文件中,如果System.getenv(key)返回值,则覆盖(yaml/property)。创建一个Reader类,它在初始化时读取文件,初始化应用程序范围的变量,然后覆盖env变量的值。

相关问题