介绍基于appium的自动化脚本执行思路、使用的定位方式、常用操作、结果断言校验,以及实践中对于失败case的问题定位分析。适合appium初学者
自动化比较适合的场景
- 稳定迭代
- 回归冒烟测试,对新功能不适用
- 底层代码重构
不适合场景
- 支付
- 人脸识别
- 需要提前准备测试数据
APPIUM简介
Appium是目前最为强大的自动化测试框架,可用于测试原生应用,移动网页应用和混合应用,且是跨平台的支持IOS 与Android
原生应用指用 android 或 iOS 编写的应用
移动网页应用是指网页应用,H5
混合应用是指一种包裹 webview 的应用,原生应用网页内容交互性的应用
Appium是在手机操作系统自带的测试框架基础上实现的,Android和iOS的系统上使用的工具分别如下:
- Android(版本>4.3):UIAutomator,Android 4.3之后系统自带的UI自动化测试工具
- iOS:UIAutomation(instruments框架里面的一个模板),iOS系统自带的UI自动化测试工具

运行原理
我们的电脑(client)上运行自动化测试脚本,调用的是webdriver的接口,appium server接收到我们client上发送过来的命令后他会将这些命令转换为UIautomator认识的命令,然后由UIautomator来在设备上执行自动化。
Appium的架构原理如上图所示,由客户端(Appium Client)和服务器(Appium Server)两部分组成,客户端与服务器端通过JSON Wire Protocol进行通信。
Appium服务器
Appium服务器是Appium框架的核心。它是一个基于Node.js实现的HTTP服务器。Appium服务器的主要功能是接受从Appium客户端发起的连接,监听从客户端发送来的命令,将命令发送给bootstrap.jar(iOS手机为bootstrap.js)执行,并将命令的执行结果通过HTTP应答反馈给Appium客户端。
Bootstrap.jar
Bootstrap.jar是在Android手机上运行的一个应用程序,它在手机上扮演TCP服务器的角色。当Appium服务器需要运行命令时,Appium服务器会与Bootstrap.jar建立TCP通信,并把命令发送给Bootstrap.jar;Bootstrap.jar负责运行测试命令。
Appium客户端
它主要是指实现了Appium功能的WebDriver协议的客户端Library,它负责与Appium服务器建立连接,并将测试脚本的指令发送到Appium服务器。现有的客户端Library有多种语言的实现,包括Ruby、Python、Java、JavaScript(Node.js)、Object C、PHP和C#。Appium的测试是在这些Library的基础上进行开发的。
case编写思路

定位方式参考APP自动化测试
元素信息通过appium Inspector工具查看
操作
- 点击
- 输入
- 滑动
- 等待
- sleep
- 文案显示
- 文案消失
效验
文案、标识、dialog、toast显示或者消失
实战
- 前提安装好appium环境
- 启动appium server端
栗子
from appium import webdriver
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '11'
desired_caps['deviceName'] = 'xiaomi11'
desired_caps['appPackage'] = 'com.miui.calculator'
desired_caps['appActivity'] = 'com.miui.calculator/.cal.CalculatorActivity'
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.find_element_by_name("1").click()
driver.find_element_by_name("5").click()
driver.find_element_by_name("9").click()
driver.find_element_by_name("delete").click()
driver.find_element_by_name("9").click()
driver.find_element_by_name("5").click()
driver.find_element_by_name("+").click()
driver.find_element_by_name("6").click()
driver.find_element_by_name("=").click()
driver.quit()
失败问题定位
四种可能:
- app自身bug,提bug开发解决
- 脚本问题,找到错误地方修改脚本
- 工具问题,寻找其它解决方案
- 环境问题,没有网络、没有电、app后台未杀死,解决再测试
定位问题方式:
- 查看失败截图(如果有)
- 查看日志,定位代码行,查看出错原因
特别的crash、anr需要手动复现(不一定能复现)





Comments | NOTHING