Appium
Appium是一个开源的,适用于原生或混合移动应用( hybrid mobile apps )的自动化测试工具,Appium应用WebDriver: JSON wire protocol驱动安卓和iOS移动应用。
这里介绍界面工具的appium环境。
一. 前期准备
我这里用的是当前最新版本:Appium: 1.22.2 + inspector:v2022.2.1 与旧版本不同这个两个app安装包。
1. 安装 Appium
桌面端 [Appium Desktop](https://github.com/appium/appium-desktop)
安装包: [releases page](https://github.com/appium/appium-desktop/releases).
2. 安装检查器
检查员现在作为一个单独的应用程序发布。
请访问 https://github.com/appium/appium-inspector
二. WebDriverAgent配置
Appium驱动IOS测试原理
Appium选择了Client/Server的设计模式。只要client能够发送http请求给server,那么的话client用什么语言来实现都是可以的,这就是如何做到支持多语言的原因;
Appium扩展了WebDriver的协议,没有自己重新去实现一套。这样的好处是以前的WebDriver API能够直接被继承过来,以前的Selenium(WebDriver)各种语言的binding都可以拿来就用,省去了为每种语言开发一个client的工作量。
- XCUITest是苹果开发的一个做IOS自动化测试的框架,需要了解些Swift等iOS编程知识
WebDriverAgent是Facebook开发的一个iOS自动化测试工具,先来看下面的这张原理图:
-
WDA在Client创建了一个Server,在手机端安装了一个叫作
WebDriverAgentRunner
的一个应用;这个应用会接收来自 Server 的指令,并连接底层的XCTest.framwork
,让XCTest.framwork
调用苹果API来操作手机进行自动化 -
而appium是把
WebDriverAgentRunner
给集成进去了,因此实现了appium的跨平台能力
通过上图我们了解到 Appium 很粗暴的把整个 WebDriverAgent 直接集成到自己的项目里,然后通信机制就走 WebDriverAgent,Appium 其实就提供了一个 Client 端的作用。所以 iOS 9.3 系统之后自动化测试核心是 WebDriverAgent,Appium 就提供了一个 Client 端来写脚本和发送指令。
Appium 自动化架构模式可以用一个抽象的架构表示,就是下面这样的:
从图中可以看出:
- Client 端是 Appium 之前本身提供的;
- Server 端是:WebDriverAgent 和 Instruments;( Appium 直接把 WebDriverAgent 整个集成进来,Instruments 是为了支持 iOS 9.3 之前的系统)
- 最右边是一个手机
- 之前 Server 是和 bootstrap.jar 通信,这里
WebDriverAgent
提供了 WebDriverAgentRunner (类似 bootstrap.jar 的功能),WebDriverAgent与之通信; - WebDriverAgentRunner 是一个应用,Client 和 server 运行 了之后,
WebDriverAgentRunner
会被装到手机上,这个应用会接收来自 Server 的指令,并连接底层的XCTest.framwork
,并告诉XCTest.framwork
操作手机进行自动化。
如何配置 WebDriverAgent
WebDriverAgent通过集成appium进行安装
桌面版安装: WebDriverAgent的路径是: 这里说的是这种
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent
命令行安装: 命令行安装的appium一般安装在/usr/local/bin/appium
下,
WebDriverAgent将会在路径:/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/
下
-
配置webdriverAgent
配置
WebDriverAgentLib
,选择开发者账号配置
WebDriverAgentRunner
,选择开发者账号注意:↓
Edit Scheme:
编译运行和test的设备选择:这里选择了模拟器 这里与检察器里的配置有关
xcode菜单 - Product -> Test
运行成功后,iphone手机上会新建一个无图标的WebDriverAgent的应用,自动打开后马上又返回桌面
而在xcode控制台会打印如下日志:里面有IP地址与端口号
在浏览器上输入 http://(ip地址):(端口号)/status
如果网页上返回一些json格式的数据,说明运行成功
模拟器就在电脑端查看
手机运行agent就在手机浏览器
注意的点
-
product bundle identify、开发者组织、目标设备 是否修改。否则start session 报WebDriverAgent的异常
-
桌面安装版不用单独下载WebDriverAgent,找对路径就ok。
三、经历的异常问题
1. 不再是一个app
Appium: 1.22.2 + inspector:v2022.2.1,不再是一个app,需要单独下载
2. No route found for /sessions
Appium inspector -> start session后在Appium中报错:No route found for /sessions
[HTTP] <-- GET /sessions 404 6 ms - 211
[HTTP]
[HTTP] --> GET /sessions
[HTTP] {}
[HTTP] No route found for /sessions
解决:
在Appium inspector
中的Remote Path
中配置/wd/hub
:
3. Appium vendor prefixes
Automatically add necessary Appium vendor prefixes on start 自动加前缀,确认勾选
4. 参数配置json取值
Desired Capabilities 参数配置
ios必要的几个参数
{
"appium:automationName": "XCUITest", //固定
"platformName": "iOS", //固定
"appium:platformVersion": "15.1",
"appium:deviceName": "iPhone 13 Pro",
"appium:app": "/Users/电脑名称/Downloads/app名称.app",
"appium:udid": "10FC370C-C73A-4720-BDFD-4F5BD7206973"
}
- platformVersion:当前版本支持 8.0, 15.0, 8.3, 14.5, 7.4, 15.2 ,如果是真机iPhone 需要确认手机系统版本,否则报错
- deviceName、uuid :xcode 查看,XCode菜单 Windows -> Devices and Simulator
-
app 要测试的app的安装包文件绝对路径,文件以
.app
结尾
我这里将包从.../Xcode/DerivedData/... 里取了拷了出来到下载
文件夹
Appium inspector
检察器的正常工作前两个必要条件:
-
在 webdriverAgent启动后,localhost:??/stauts确认启动后。
-
然后通过Appium Server GUI启动 0.0.0.0 4723 启动服务
-
检察器的作用在于检查 capacity 配置的正确性,提供界面化的工具 这里ye可以启动Python,通过pyton代码启动服务
a. 配置参数,排除一切错误后 正常启动会话
b. 可以查看控件的oath name value id 等信息
c. 录制操作步骤 可以选自己擅长的语言 通常 Java 或者 python,
d. 到这里就基本完成