Jenkins多参数执行测试套件

2021-07-15 11:07:53 浏览数 (1)

工作中在使用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%

0 人点赞