Appium介绍
- appium是开源的移动端自动化测试框架
- appium可以测试原生的,混合的,以及移动端的项目
- appium可以测试ios,android应用
- appium是跨平台的,可以用在osx,windows以及linux桌面系统上
Appium基本原理
在andorid端,appium基于Webdriver协议,利用Bootstrp.jar,最后通过调用UiAutomator的命令,实现APP的自动化测试
UIAutomator测试框架是Android SDK自带的APP UI自动化测试Java库
另外由于UiAutomator对H5的支持有限,appium引入了chromedriver以及safadriver等来实现基于H5的自动化。
Appium在android端工作流
- client端也就是我们test script是我们的webdriver测试脚本
- 中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium Webdriver测试框架类似,Appium支持标准的webdriver JsonWireProtocol。在这里提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调用对应的框架响应操作。
- appium server会把请求转发给中间件Bootstrap.jar,它是用Java写的,安装在手机上。Bootstrap监听4723端口并接收appium命令,最终通过调用用UIautomator的命令来实现
- 最后Bootstrap将执行的结果返回给appium server
- appium server再将结果返回给appium client
第一个脚本示例
首先启动android模拟器
adb start server #开启adb
adb dervices #查看你监听列表
adb shell "dumpsys activity |grep Focuse #查看当前包名package和当前活动对象activity
启动Appium
点击左上角有'机器人'的按钮:选择你的android版本
点击右上角的‘三角’按钮启动Appium
通过Python编写自动化测试脚本
desired_caps是一个字典,用于在appium server与手机端建立会话关系时,手机端需要告诉服务端设备相关的一些参数,根据这些参数服务端可以做出相应的处理
#coding:utf-8
from appium import webdriver
#desired_caps是一个字典,负责启动服务端时的参数设置,启动session的时候是必须提供的
#Desired Capabilities本质上是key value的对象,它告诉appium server这样一些事情,比如:
#本次测试是启动浏览器还是启动移动设备?
#是启动android还是启动ios?
#启动android时,app的package是什么?
#启动android时,app的activity是什么?
desired_caps = {}
#你要测试的手机操作系统
desired_caps['platformName'] = 'Android'
#手机操作系统的版本
desired_caps['platformVersion'] = '4.2'
#使用的手机类型或模拟器类型
desired_caps['deviceName'] = 'Android'
#deviceName你的模拟器名字,就是在下载AVD的时候,你填写的,忘了的回头去找,或者在模拟器顶部会显示
#所运行的app包名
desired_caps['appPackage'] = 'com.android.calculator2'
#app运行的事件
desired_caps['appActivity'] = '.Calculator'
#启动打开app
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
#根据元素定位,执行点击操作
driver.find_element_by_name("6").click()
driver.find_element_by_name("5").click()
driver.find_element_by_name("9").click()
driver.find_element_by_name("1").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()
报错
会话已存在错误-----解决方案,关掉appium重启
画出来的这三个,是需要在脚本中正确填写的
执行效果