Appium UI自动化实战

发布于 2021-10-09  1,475 次阅读


介绍基于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需要手动复现(不一定能复现)


一名测试工作者,专注接口测试、自动化测试、性能测试、Python技术。