Java+Selenium 3.x 实现Web自动化 - Maven打包TestNG,利用jenkins执行测试
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插件。