[英]Passing data from Jenkins parameterized build to testng.xml at runtime
我有一个使用Java,Maven和TestNG的浏览器自动化框架。 我正在使用testng.xml文件通过以下方式将不同的参数传递给测试:
<parameter name="firstName" value="John"/>
我希望能够向非技术人员公开数据输入,并建议通过使用参数化的詹金斯工作来做到这一点。
所有测试数据都是字符串。
我可以看到如何在Jenkins中创建参数化项目以及如何在项目中创建String参数。
我不清楚在运行时传递数据的最佳方法。
我知道可以使用Ant脚本,但是我已经在使用Maven,并且不想引入另一种相互冲突的技术。
我听说可以使用testng.xml中的Beanshell脚本来完成此操作,但是从testng docs上的示例中 ,我仍然不清楚如何最好地实现此目的。
解决问题的方法如下。
之后,您应该可以轻松地完成所需的工作。 如果您具有在<test>
级别定义的参数,则可以增强下面显示的侦听器,并在实现org.testng.ITestListener
侦听器之后添加类似的代码。
倾听者
public class EnvReaderListener implements ISuiteListener {
@Override
public void onStart(ISuite suite) {
Map<String, String> parameters = suite.getXmlSuite().getParameters();
for (Map.Entry<String, String> parameter : parameters.entrySet()) {
String env = System.getenv(parameter.getKey());
if (env != null && ! env.trim().isEmpty()) {
parameter.setValue(env);
}
}
}
@Override
public void onFinish(ISuite suite) {
}
}
TestNG套件XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="My Suite" parallel="methods" verbose="2">
<listeners>
<listener class-name="org.rationale.emotions.EnvReaderListener"/>
</listeners>
<parameter name="name" value="Sample name"/>
<test name="My Test" verbose="2">
<classes>
<class name="org.rationale.emotions.SampleTest"/>
</classes>
</test>
</suite>
按照此示例,您需要确保您的作业将具有一个名为name
的参数。
样品测试课
package org.rationale.emotions;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class SampleTest {
@Test
@Parameters ("name")
public void testMethod(String name) {
System.err.println("Name that was passed in via Jenkins job " + name);
}
}
您可以在项目中启用filters
情况下使用Maven Resources Plugin
目标copy-resources
来替换模板文件中的变量。 例:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>path_to_output_folder/output</outputDirectory>
<resources>
<resource>
<directory>path_to_resource_dir/res</directory> <!--source to your testng.xml-->
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
在您的情况下与jenkins一起使用:
更改您的testng.xml-> <parameter name="firstName" value="${firstname}"/>
调用maven目标mvn resources:resources -DfirstName=$FIRSTNAME
,其中($ FIRSTNAME)是Jenkins变量。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.