1. Jenkins本地执行测试 or 服务器端执行测试

测试代码计划通过jenkins执行时,通过网上查询各种教程,大多数为本地执行测试,由此可见,本地执行是大多数人的选择。

经过探讨,最终决定采用服务端执行测试。自动化测试代码上传到测试服务器,通过jenkins部署并执行,可减少本地资源占用。

2. 服务器端执行测试,需要的browser & webDriver

鉴于公司测试服务器为无界面的Linux系统,浏览器采用无界面的chrome。即,在服务器安装Headless Chrome。

webDriver选用chromeDriver对应版本。chromeDriver下载:http://npm.taobao.org/mirrors/chromedriver/

1 ChromeOptions options = new ChromeOptions();
2 options.setHeadless(true);
3 return new ChromeDriver(options);

3. pom.xml配置

  1 <project xmlns="http://maven.apache.org/POM/4.0.0"
  2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4     <modelVersion>4.0.0</modelVersion>
  5 
  6     <groupId>com.hebg3</groupId>
  7     <artifactId>UITest</artifactId>
  8     <version>0.0.1-SNAPSHOT</version>
  9     <packaging>jar</packaging>
 10 
 11     <name>UITest</name>
 12     <url>http://maven.apache.org</url>
 13     <profiles>
 14         <profile>
 15             <id>saveOrder</id>
 16             <build>
 17                 <plugins>
 18                     <!-- 测试运行器,用于运行测试用例 -->
 19                     <plugin>
 20                         <groupId>org.apache.maven.plugins</groupId>
 21                         <artifactId>maven-surefire-plugin</artifactId>
 22                         <version>2.19.1</version>
 23                         <configuration>
 24                             <suiteXmlFiles>
 25                                 <!-- 添加testng.xml文件,相当于run as testngSuite -->
 26                                 <suiteXmlFile>src/test/resources/saveOrder.xml</suiteXmlFile>
 27                             </suiteXmlFiles>
 28                             <source>${java.version}</source>
 29                             <target>${java.version}</target>
 30                             <showWarnings>true</showWarnings>
 31                         </configuration>
 32                     </plugin>
 33                     <!-- 可执行jar插件 -->
 34                     <plugin>
 35                         <groupId>org.apache.maven.plugins</groupId>
 36                         <artifactId>maven-jar-plugin</artifactId>
 37                         <!-- 将src/test文件夹打成jar包 -->
 38                         <executions>
 39                             <execution>
 40                                 <goals>
 41                                     <goal>test-jar</goal>
 42                                 </goals>
 43                             </execution>
 44                         </executions>
 45                         <!-- 打包配置 -->
 46                         <configuration>
 47                             <outputDirectory>${project.build.directory}</outputDirectory>
 48                             <archive>
 49                                 <manifest>
 50                                     <addClasspath>true</addClasspath>
 51                                     <classpathPrefix>lib/</classpathPrefix>
 52                                 </manifest>
 53                                 <manifestEntries>
 54                                     <Class-Path>.</Class-Path>
 55                                 </manifestEntries>
 56                             </archive>
 57                             <!-- 打包时不包含以下格式的文件 -->
 58                             <excludes>
 59                                 <exclude>**/*.xml</exclude>
 60                                 <exclude>**/*.properties</exclude>
 61                                 <exclude>**/*.csv</exclude>
 62                             </excludes>
 63                         </configuration>
 64                     </plugin>
 65 
 66                     <!-- maven资源文件复制插件 -->
 67                     <plugin>
 68                         <groupId>org.apache.maven.plugins</groupId>
 69                         <artifactId>maven-resources-plugin</artifactId>
 70                         <version>3.1.0</version>
 71                         <executions>
 72                             <!-- 复制src/main/resources路径的文件 -->
 73                             <execution>
 74                                 <id>copy-resources</id>
 75                                 <phase>validate</phase>
 76                                 <goals>
 77                                     <goal>copy-resources</goal>
 78                                 </goals>
 79                                 <configuration>
 80                                     <outputDirectory>${basedir}/target/src/main/resources</outputDirectory>
 81                                     <resources>
 82                                         <resource>
 83                                             <directory>${project.basedir}/src/main/resources</directory>
 84                                             <includes>
 85                                                 <include>**/*.xml</include>
 86                                                 <include>**/*.csv</include>
 87                                                 <include>**/*.properties</include>
 88                                             </includes>
 89                                             <filtering>true</filtering>
 90                                         </resource>
 91                                     </resources>
 92                                     <encoding>UTF-8</encoding>
 93                                 </configuration>
 94                             </execution>
 95                             <!-- 复制src/test/resources路径的文件 -->
 96                             <execution>
 97                                 <id>copy-test-resources</id>
 98                                 <!-- here the phase you need -->
 99                                 <phase>validate</phase>
100                                 <goals>
101                                     <goal>copy-resources</goal>
102                                 </goals>
103                                 <configuration>
104                                     <outputDirectory>${basedir}/target/src/test/resources</outputDirectory>
105                                     <resources>
106                                         <resource>
107                                             <directory>${project.basedir}/src/test/resources</directory>
108                                             <includes>
109                                                 <include>**/*.xml</include>
110                                                 <include>**/*.csv</include>
111                                                 <include>**/*.properties</include>
112                                             </includes>
113                                             <filtering>true</filtering>
114                                         </resource>
115                                     </resources>
116                                     <encoding>UTF-8</encoding>
117                                 </configuration>
118                             </execution>
119                         </executions>
120                     </plugin>
121                 </plugins>
122             </build>
123         </profile>
124     </profiles>
125     <!-- 设置jdk版本与编码格式 -->
126     <properties>
127         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
128         <encoding>UTF-8</encoding>
129         <java.version>1.8</java.version>
130         <maven.compiler.source>1.8</maven.compiler.source>
131         <maven.compiler.target>1.8</maven.compiler.target>
132     </properties>
133 
134     <dependencies>
135         ……
136     </dependencies>
137 </project>

4. 打包命令

4.1 打包命令的执行

eclipse中右击项目名称 - 【Run As】-【Maven Build ...】,在goals处输入以下命令并运行;

4.2 打包:package -DskipTests=true -PsaveOrder

说明:-D跳过测试,直接打包,首先需要进行测试能否正常打包,之后再执行测试;

-P选择profile id(Line:15),不选择profile id会按默认执行,执行所有testng.xml,各插件版本也与设置的不同;

4.3 执行测试:test -PsaveOrder

4.4 配置jenkins:以上命令均能正常执行 -> 代码上传到git -> 运维大佬帮忙布置jenkins,jenkins执行的本质即,执行以上两条命令;

5. 多个testSuite的配置

当存在多个testng.xml文件,包含多个testSuite时,可以通过pom.xml设置多个profile来分别执行;

以上,Line14~123即为一个profile,可同时设置多个,根据不同情境,执行不同的profile;

我们目前的做法是:在部署jenkins项目时,输入profile id方可执行,实现了一个项目,多个测试情境按需使用;

6. 测试结果的查看

目前做法:在jenkins中添加了HTML Report、TestNG Results插件。

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!