工作中在使用Java Selenium TestNG Maven Jenkins做WebUI自动化测试的过程中,想要配置两个参数化构建。第一个就是执行Testng的XML文件参数;另一个参数就是环境参数,该参数对应WebUI自动化测试的环境。
实际效果:Jenkins给定不同的XML文件名称、环境参数后,会执行指定XML文件,指定环境的测试。
首先Jenkins需要安装插件Build With Parameters (输入框式的参数)或者 Persistent Parameter (下拉框式参数)。
然后在maven项目配置页面,选择下图选项:
环境数据配置如下:
此时将环境参数配置好。回到maven pom文件配置参数,这里使用了profile去实现参数化。
代码语言:javascript复制<!-- 不同的打包环境 -->
<profiles>
<!-- 测试环境,默认激活 -->
<profile>
<id>test</id>
<properties>
<env>test</env>
</properties>
</profile>
<!-- 深圳环境 -->
<profile>
<id>sz</id>
<properties>
<env>sz</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault><!--默认启用的是sz环境配置-->
</activation>
</profile>
<!-- 广西环境 -->
<profile>
<id>gx</id>
<properties>
<env>gx</env>
</properties>
</profile>
<!-- 演示环境 -->
<profile>
<id>example</id>
<properties>
<env>example</env>
</properties>
</profile>
</profiles>
然后我的思路是想法是通过evn配置文件读取各个环境对应的所有配置,
所以在main目录的resource文件夹下创建了evn.properties文件,然后建立了filters文件夹去管理所有环境的数据配置,文件结构和文件数据如下
evn.properties文件数据如下
代码语言:javascript复制
# Environment
test.host=${test.host}
# 数据源配置
datasource.url=${jdbc-url}
datasource.username==${jdbc-usernamel}
datasource.password==${jdbc-password}
datasource.driver-class-name=com.mysql.cj.jdbc.Driver
filters-sz配置文件数据如下
代码语言:javascript复制# ip
test.host=http://zhan.zzxes.com.cn/
# 数据库
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///campus_terminal?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT+8
username=root
password=123
项目实际取参代码如下:
代码语言:javascript复制public String GetHost(String url) {
InputStream stream = this.getClass().getClassLoader().getResourceAsStream("env.properties");
properties = new Properties();
try {
properties.load(stream);
} catch (IOException e) {
e.printStackTrace();
}
String host = properties.getProperty("test.host");
System.out.println(host);
return host;
}
此时,去Jenkins构建项目时,就可以去选择对应的环境来进行构建。构建后会自动打开对应域名的环境。
接下来进行测试用例的选择执行,在maven中添加配置
代码语言:javascript复制<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
<configuration>
<argLine>-Dfile.encoding=UTF-8</argLine>
<encoding>UTF-8</encoding>
<suiteXmlFiles>
<!--suppress UnresolvedMavenProperty -->
<suiteXmlFile>${project.basedir}/src/test/testsuite/${RunTest}</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
此时,在Jenkins中添加对应选择参数
最后,我们在构建预步骤中加入命令,如下图
这是时候,Jenkins构建maven项目时,就可以选择对应参数去构建,可以根据需要去执行对应环境的对应模块的用例。
后发现在构建成功后,整个测试套件还会重复build一次,排查问题后,应该是在构建命令设置时不应该使用test 直接使用package即可
clean package -Dmaven.test.skip=true -P%env% -DRunTest=%RunTest%