微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android手机App自动化涉及的技术及框架介绍

一.Appium自动化测试工具

Appium是一个开源/跨平台的自动化测试工具,支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用,appium类库封装了标准Selenium客户端类库,为用户提供所有常见的JSON格式selenium命令以及额外的移动设备控制相关的命令,如多点触控手势和屏幕朝向。

二.testNg测试框架

testNg是一个Java的测试框架,主要用来做自动
1. 利用Parameters注解将test.xml中启动的APP需要参数(udid,测试平台,包名,类名等)传递给Test标注的方法
2 .利用注解实现测试方法的执行顺序,比如:
利用@BeforeTest注解在test.xml中某个测试(test)所有测试方法执行前启动APP
利用@AfterTest注解在test.xml中某个测试(test)所有测试方法执行结束后关闭驱动
利用@AfterMethod注解在@Test注解的方法执行之后返回首页或返回指定页
3.支持数据驱动,DataProvider注解的方法是数据提供者,一般返回Object[][] 和 Iterator<Object[]>两种类型,
Test注解的方法是数据接收者,接收DataProvider注解的方法传过来的数据进行测试
Iterator<Object[]>:用于把数据存入在一个实体类里,即数据按“对象”存储
Object[][]:一般把数据存放在Excel里
4.利用testNg的IHookable监听器实现失败截图**,并把失败截图附到Allure测试报告中**
4.1.新建一个类实现把截图存放在指定路径中(getScreenshotAs)的方法
4.2.新建一个类实现IHookable接口,有一个方法调用截图方法方法和截图附到Allure报告中
一个方法需重写run方法,如果标注为@Test的方法出现异常则调用2中的方法测试方法实现失败截图
5.利用testNg的IAnnotationTransformer,ITestListener监听器实现全局失败重试
5.1.新建一个类实现实现IRetryAnalyzer接口,重写retry方法,有两个变量:运行重试的最大次数和公共静态变量正在运行的次数
5.2.新建一个类实现IAnnotationTransformer接口,重写transform方法,作用是监听所有被Test标注的方法是否有retryAnalyzer属性
如果有次属性,则不会执行我们设定的重跑机制
5.3.新建一个类继承TestListenerAdapter类,重写onTestFailure和onTestSuccess方法,作用是每条案例重跑次数用完后,重置当前正在运行的次数为初始值
以便于下一条案例失败重试
5.4.新建一个类实现ITestListener接口,重写onFinish方法,作用是把重试的方法都记录到skipped里了,会影响测试报告总数,所有记录要从skipped移除
5.5.将2.3.4步的监听器添加到在test.xml中
6.支持并发测试,testng.xml中
parallel:TestNG是否运行不同的线程来运行这个套件,认为none,其他级别为methods、tests、classes、instances
7.可通过testng.xml管理执行测试用例

三.Allure生成测试报告

Allure是一款轻量级并且非常灵活的开源测试报告框架,它支持绝大多数测试框架, 例如TestNG

四.利用MysqL数据库进行测试案例管理

1.主要的表有:
案例表:案例编号,案例名称,案例描述,预期结果,可用标记,客户数据,理财数据,断言,所属模块
案例明细表:案例编号,案例执行步骤,每一步骤对应的执行方法名,方法名中涉及的元素定位编号,所应用的组件ID,断言
组件表:组件ID,组件所属模块,组件方法名,组件方法中文
组件明细表:组件id,组件执行步骤,每一步骤对应的执行方法名,方法名中涉及的元素定位编号,断言
元素定位表:存放页面上每个元素的定位
模块菜单表:一级菜单名,一级菜单中文,模块名,模块中文
客户数据表:存放登陆信息
产品表:存放理财产品数据
数据表:存放页面上需要输入的数据和需要查找的数据
断言表:预期结果与实际结果相比较
定位元素操作字典表:元素方面,中文
2.数据库信息和生成案例和组件的参数以键值对的形式进行参数配置,都放在.properties配置文件然后利用Properties类读取配置文件
数据库信息:账号 密码 driver url
生成案例参数:组件所属模块,一级菜单名,案例编号
3.MysqL中涉及的表字段全部写在一个实体类
4.MysqL连接与查询数据,查询数据的方法返回类型是ResultSet,把查询出的数据按“对象”存储,
数据提供方法返回类型是Iterator<Object[]>

五.APP启动配置参数,分为不变参数和可变参数

**不变参数:**测试平台,包名,类名,noreset,自动化引擎(uiautomator2)
1. 创建实体类:不变参数字段
2.创建XML:不变参数对应的具体值,
实体类与xml关系:把利用DOM4j的方式初始化SaxReader对象读取xml中解析到的配置信息存放在实体类中的构造函数
可变参数:
udid:利用adb devices命令查询连接的手机
appium端口:认4723,++2。。
uiautomator2Port:端口服务端和手机上的uiautomator2服务通信的端口,该端口目前在启动appium时无法确定需要在脚本中指定,认8200,++2。。

六.案例的生成与执行

1.根据组件所属模块生成组件,自动生成组件类放在指定的路径下
2.根据案例编号(可为空)和菜单查询案例条数,自动生成案例类放在指定的路径下
3.把生成的案例存放在集合中,加上APP启动参数和监听器用于生成testng.xml
4.在main方法中执行案例
案例的执行
4.1.启动多个Appium服务
4.2.动态生成testng.xml文件
4.3.执行testng.xml
4.4.杀死Appium服务

七.并行启动APP

1.创建一个执行dos环境下的命令工具方法
2.利用adb devices命令查询连接的手机udid
3.获取端口列表,appium端口认4723和uiautomator2Port端口认8200
首先查看端口是否被占用,如果被占用,就根据该端口用命令查看进程并杀死该进程,这样端口就被释放了
4.利用命令行模式启动所有Appium服务
启动Appium服务:
由设备的数量去决定启动Appium服务的命令参数有多少条,
利用Java自带的多线程(Thread)去启动Appium服务,解决单进程阻塞问题
5.杀死所有的Appium Server
获取所有的appium的端口,根据端口查看进程并杀死该进程

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐