框架初衷
前两周组内的小伙伴跟我说她现在测试的微信公众号项目(保险)每次上新产品时测试起来很费时,存在大量的重复操作(点点点),手工测试每个产品可能需要半天到一天的时间,复杂的产品需要两天。由于保险下单的过程中字段比较多,输入费劲的同时测试用例也很多(不同年龄段、工种、有无社保等),且!每个产品的页面都有部分差异!
问我能否基于UI自动化提高她测试新产品的测试速度,同时用于上线时生产的验证。
因为我写过微信公众号页面的UI监控脚本,也尝试过基于appium的多机并发测试,于是我就想,能否搭建一个框架,让小伙伴每次测试新产品的时候只要输入测试数据+修改产品差异部分代码,然后框架分发给不同的手机去执行,最后展示测试报告?
最终效果
一个case大约3-5分钟,三台手机执行测话三个新产品半天就能测完。
下面是放到jenkins上运行demo的测试报告。
下面是用例运行失败时的界面,提供截图、重试、case日志以及appium的日志。
框架介绍
1.主要工具
JAVA 版本1.8
appium-server 版本1.6.3
appium java-client 版本5.0.0-BETA8
testNG 用例组织
Allure2 测试报告
Jenkins 持续集成
Git 代码管理
2.工程目录及主要代码
pages:没有采用PO模式,页面以接口的形式定义,页面元素即为变量。
pageoptions:页面功能封装在pageoptions包中,封装成静态方法。
testcase:继承BaseDriver,driver初始化后即可执行测试。
util:appiumserver启动工具类、失败自动截图等
下面是每个package内的代码。
2.1 POM.XML
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cpeoc</groupId>
<artifactId>jyx</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>jyx</name>
<properties>
<java.version>1.7</java.version>
<aspectj.version>1.8.10</aspectj.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.11</version>
</dependency>
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>5.0.0-BETA8</version>
</dependency>
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-testng</artifactId>
<version>2.0-BETA14</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<argLine>
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
</argLine>
<suiteXmlFiles>
<suiteXmlFile>testng-OnePhone.xml</suiteXmlFile>
</suiteXmlFiles>
<!-- <workingDirectory>target\</workingDirectory> -->
</