Appium自动化测试原理及配置项
一、App自动化测试原理
通过设计自动化脚本,通过发送指令到Appium Server,然后Appium Server转发指定到Android SDK框架来操作被测手机,这个类似于selenium通过浏览器驱动来操作浏览器
Android SDK不同系统不同版本差异较大,不同的被测终端系统可能用到不同的软件包/框架,所以需要自动化脚本指定操作终端设置参数
二、Desired Capability-Appium 自动化配置项
打开appium官方文档: Appium Desired Capabilities
这里有几个常用的参数需要关注
automationName: UiAutomator1 这是一个自动化会话的参数
platformName: iOS, Android, or FirefoxOS,这个参数是被测终端的系统版本
platformVersion: e.g. 7.1, 被测终端的系统版本
deviceName: e.g. iPhone Simulator, 被测终端的设备名称,iOS起作用,Android随便输入什么,不影响使用
noReset: e.g. True 是否初始化app的状态及数据,例如一个app要测试登录,如果此参数设置为True,那么一旦成功登录之后,其余用例都
会保留这次测试的数据
newCommandTimeout: 60 默认参数60,指的是Appium Server建立的一个session当中,如果60秒都没有新的指令接收,就关闭当前会话
以上参数为通用参数,下面单独介绍Android单独的参数UIAutomator1
apppackage: 需要运行的安卓app的JAVA包
appActivity:启动安卓app的活动名称
三、常用的adb命令
-
连接测试终端
adb connect 127.0.0.1:62001
注: 127.0.0.1是本机
模拟器终端: 夜神: 62001 雷神: 5555 mumu:7555 -
查看当前连接设备
adb devices -
查看被测app的包名及入口启动页面
aapt dump badging apk_package
由于查看的内容特别多,我们只需要查找需要的内容,可以使用 | findstr查找package信息
aapt dump badging apk_package | findstr package
启动入口也用类似的方法: adb dump badging apk_package | findstr launchable-activity
上面的package name = 后面的一段就是app的包名了, launchable-activity name后面就是启动入口
四、Appium日志查看测试原理
打开Appium–>Advanced–>勾选上Log Timestamps,然后启动Start Server
以下是一点Appium日志示例用于方便对照,蓝色代表正在调用Android SDK的软件包,黄色代表警告信息一般可以不看,灰色代表windows操作系统的操作
部分内容解释:
[HTTP] --> POST /wd/hub/session //基于HTTP请求创建一个会话
[W3C] Calling AppiumDriver.createSession() with args //这里是创建该会话带的参数
[Appium] Setting automation to 'UiAutomator1'. //当前的自动化框架是Android的"UiAutomator1", appium-windows 1.13默认不发送automationName参数的话使用UiAutimator1,如果是1.14以后版本,默认使用UiAutomator2,安卓6以后建议使用UiAutomator2
[ADB] Getting connected devices... //ADB相关命令获取连接的设备,并确认安卓版本,设置参数是否与终端一致
[ADB] 1 device(s) connected //1个设备已连接
...
...
[ADB] Getting install status for io.appium.settings //如果获取的所有信息都正确,会开始往被测终端安装一个appium settings,参考下图
[ADB] 'io.appium.settings' is installed //appium settings安装完成,后面appium server通过发送指令到appium settings应用程序进行数据交互
[UiAutomator] Parsing uiautomator jar //appium会推送一个‘AppiumBootstrap.jar’驱动jar包到被测终端上, 这个包来接收Appium Server的指令来操作终端,这个jar包类似python当中的模块
[HTTP] <-- POST /wd/hub/session 200 //响应当前的HTTP请求,一次会话结束