有没有办法将 POM parameters/attributes 传递给 TestNG XML 文件?
Is there a way to pass POM parameters/attributes to TestNG XML file?
我有一个 Maven 项目。有没有办法从 TestNg Xml 文件中读取 pom 文件的属性,例如我想从 pom 文件中读取应用程序的版本,然后将它从 TestNG xml 传递给我的测试使用@Parameter 注释的文件。
到目前为止,我已尝试将 pom 属性作为值直接传递到 TestNG xml 文件中,但它不会从 pom 中获取值。相反,它打印 pom 属性。
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name ="Implementing Parametrization">
<test name ="Testing Functionality">
<parameter name = "browser" value = "${project.version}" />
<parameter name = "username" value = "test@gmail.com" />
<parameter name = "password" value = "abc@xyz123" />
<classes>
<class
name="it.org.seleniumtests.Parametrization.GenericHomePage"/>
</classes>
</test>
</suite>
打印测试中的值后:
预期结果:1.2.0 和实际结果:${project.version}
我知道我可以按照我在此处解释的 JVM 参数来做到这一点:https://rationaleemotions.wordpress.com/2017/09/29/dynamic-parameterization-in-testng/ 但这不是我想要实现的。我已经在 pom 文件中有了我需要的值。我想在我的 TestNG xml 文件中获取它,以便我可以将它作为参数传递给我的测试。
注意:利用这种方法将剥夺您直接从 IDE(无需从 IDE)
中调用 Maven 相关目标
是的,您可以如下所示执行此操作:
阅读更多here and also this Whosebug 答案。
您需要利用 Maven 资源插件并对其启用过滤,以便 Maven 开始用实际值替换变量。
将以下内容添加到您的 <build>
标签
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
这是您的 surefire 插件条目的样子(请注意,我们不是指来自 src/test/resources
的 testng 套件 xml 文件,因为它包含带有占位符的套件文件,但我们需要包含由 maven 替换的实际值的套件文件,该文件在文件夹中可用,如 ${project.build.testOutputDirectory}
的值所示
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M1</version>
<executions>
<execution>
<phase>test</phase>
</execution>
</executions>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>${project.build.testOutputDirectory}/testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
这是 testng 套件 xml 文件
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Implementing Parametrization">
<test name="Testing Functionality">
<parameter name="version" value="${project.version}"/>
<classes>
<class
name="com.rationaleemotions.IgetInputFromMavenResources"/>
</classes>
</test>
</suite>
这是测试class
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class IgetInputFromMavenResources {
@Test
@Parameters("version")
public void testMethod(String projectVersion) {
System.err.println("Project version " + projectVersion);
}
}
这是执行输出
09:27 $ mvn clean resources:testResources test
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< com.rationaleemotions:playground >------------------
[INFO] Building playground 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ playground ---
[INFO] Deleting /Users/krmahadevan/githome/PlayGround/playground/target
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-cli) @ playground ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ playground ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/krmahadevan/githome/PlayGround/playground/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ playground ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/krmahadevan/githome/PlayGround/playground/target/classes
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ playground ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ playground ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 8 source files to /Users/krmahadevan/githome/PlayGround/playground/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:3.0.0-M1:test (default-test) @ playground ---
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TestSuite
Project version 1.0-SNAPSHOT
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.324 s - in TestSuite
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.441 s
[INFO] Finished at: 2019-08-02T09:28:15+05:30
[INFO] ------------------------------------------------------------------------
PS:你叫出来的博客是我的:)
我有一个 Maven 项目。有没有办法从 TestNg Xml 文件中读取 pom 文件的属性,例如我想从 pom 文件中读取应用程序的版本,然后将它从 TestNG xml 传递给我的测试使用@Parameter 注释的文件。
到目前为止,我已尝试将 pom 属性作为值直接传递到 TestNG xml 文件中,但它不会从 pom 中获取值。相反,它打印 pom 属性。
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name ="Implementing Parametrization">
<test name ="Testing Functionality">
<parameter name = "browser" value = "${project.version}" />
<parameter name = "username" value = "test@gmail.com" />
<parameter name = "password" value = "abc@xyz123" />
<classes>
<class
name="it.org.seleniumtests.Parametrization.GenericHomePage"/>
</classes>
</test>
</suite>
打印测试中的值后: 预期结果:1.2.0 和实际结果:${project.version}
我知道我可以按照我在此处解释的 JVM 参数来做到这一点:https://rationaleemotions.wordpress.com/2017/09/29/dynamic-parameterization-in-testng/ 但这不是我想要实现的。我已经在 pom 文件中有了我需要的值。我想在我的 TestNG xml 文件中获取它,以便我可以将它作为参数传递给我的测试。
注意:利用这种方法将剥夺您直接从 IDE(无需从 IDE)
中调用 Maven 相关目标是的,您可以如下所示执行此操作:
阅读更多here and also this Whosebug 答案。
您需要利用 Maven 资源插件并对其启用过滤,以便 Maven 开始用实际值替换变量。
将以下内容添加到您的 <build>
标签
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
这是您的 surefire 插件条目的样子(请注意,我们不是指来自 src/test/resources
的 testng 套件 xml 文件,因为它包含带有占位符的套件文件,但我们需要包含由 maven 替换的实际值的套件文件,该文件在文件夹中可用,如 ${project.build.testOutputDirectory}
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M1</version>
<executions>
<execution>
<phase>test</phase>
</execution>
</executions>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>${project.build.testOutputDirectory}/testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
这是 testng 套件 xml 文件
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Implementing Parametrization">
<test name="Testing Functionality">
<parameter name="version" value="${project.version}"/>
<classes>
<class
name="com.rationaleemotions.IgetInputFromMavenResources"/>
</classes>
</test>
</suite>
这是测试class
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class IgetInputFromMavenResources {
@Test
@Parameters("version")
public void testMethod(String projectVersion) {
System.err.println("Project version " + projectVersion);
}
}
这是执行输出
09:27 $ mvn clean resources:testResources test
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< com.rationaleemotions:playground >------------------
[INFO] Building playground 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ playground ---
[INFO] Deleting /Users/krmahadevan/githome/PlayGround/playground/target
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-cli) @ playground ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ playground ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/krmahadevan/githome/PlayGround/playground/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ playground ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/krmahadevan/githome/PlayGround/playground/target/classes
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ playground ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ playground ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 8 source files to /Users/krmahadevan/githome/PlayGround/playground/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:3.0.0-M1:test (default-test) @ playground ---
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TestSuite
Project version 1.0-SNAPSHOT
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.324 s - in TestSuite
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.441 s
[INFO] Finished at: 2019-08-02T09:28:15+05:30
[INFO] ------------------------------------------------------------------------
PS:你叫出来的博客是我的:)