想询问如何正确覆盖或替换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在“设置系统属性”中被替换,而不是在测试套件的参数值中。
2条答案
按热度按时间kr98yfug1#
添加-DParameterName=Value确实有效,但为了在代码中实际反映它,我调整了getParameter函数,以便在获取Parameter值之前首先检查System.getProperty。
通过这种方式,它可以通过在TestSuite中的Parameter值之前首先检查SystemProperties来覆盖该值。
但如果有更好的解决方案,请不要犹豫回答。
k3fezbri2#
您可以将它们设置为环境变量并使用
System.getenv(key)
读取。将默认值保留在文件中,如果System.getenv(key)
返回值,则覆盖(yaml/property)。创建一个Reader类,它在初始化时读取文件,初始化应用程序范围的变量,然后覆盖env变量的值。