欢迎大家来到IT世界,在知识的湖畔探索吧!
前言
在之前的文章中,我们介绍过一款移动端自动化测试框架UiAutomator2以及如何基于UiAutomator2框架在移动端设备上开展自动化测试实践,感兴趣的可以查看:
- 《移动端APP自动化测试框架-UiAutomator2基础》
- 《基于UiAutomator2+PageObject模式开展APP自动化测试实战》
不过UiAutomator2只支持Android设备,不支持iOS设备。想要在iOS设备上开展自动化测试,还得是传统老牌测试框架Appium,也是今天重点要介绍的内容。全篇分为以下几个部分:
1.Appium知多少
- Appium简介
- Appium工作原理
- Appium如何实现iOS应用自动化?
2.环境搭建
- 基础环境搭建:JDK、NodeJS、Python
- iOS环境搭建:克隆测试APP、WDA安装
- Appium环境搭建:Appium-Desktop、Appium-inspector、Appium-doctor
- 测试代码编写环境搭建:PyCharm安装
3.项目实战:
- 编写测试用例并运行在iOS设备上
一、Appium知多少
1.Appium简介
Appium 是一个开源的自动化测试框架,支持 iOS 和 Android 上 Web App、Native App 和 Hybrid App 的自动化测试。Appium具有极强的灵活性:
- 测试用例的实现支持多种编程语言,比如 Java、Ruby、Python 等;
- Appium Server 支持多平台,既有基于 Mac 的版本,也有基于 Windows 的版本;
- 支持 Web App、Native App 和 Hybird App 三大类移动应用的测试;
- 既支持 iOS,也支持 Android;既支持真机,也支持模拟器。
2.Appium原理
Appium 可以分成三大部分,分别是 Appium Client、Appium Server 和设备端:
① Appium Server
Appium Server 有 Mac 和 Windows 版本,也就是说 Appium Server 可以运行在 Mac 或者 Windows 电脑上。本质上,Appium Server 是一个 Node.js 应用,接受来自 Appium Client 的请求,解析后通过 WebDriver 协议和设备端上的代理打交道。
- 对于iOS,Appium Server 会把操作请求发送给 WebDriverAgent(简称 WDA),然后 WDA 再基于 XCUITest 完成 iOS 模拟器或者真机上的自动化操作;
- 对于Android,Appium Server 会把操作请求发送给 appium-UIautomator2-server,然后 appium-UIautomator2-server 再基于 UIAutomator V2 完成 Android 模拟器或者真机上的自动化操作。
② Appium Client
Appium Client 其实就是测试代码,使用对应语言的 Client 将基于 JSON Wire 协议的操作指令发给 Appium Server。比如我们前面说的在编写代码前要先在本地安装一个Appium-Python-Client的Python包,这个包实际上就提供了各种各样的API方法,用于编写测试用例:
③ 设备端
设备端很好理解,就是iOS的手机或模拟器、Android的手机或模拟器。
整体来说,Appium 的内部原理可以总结为:Appium 属于 C/S 架构,Appium Client 通过多语言支持的第三方库向 Appium Server 发起请求,基于 Node.js 的 Appium Server 会接受 Appium Client 发来的请求,接着和 iOS 或者 Android 平台上的代理工具打交道,代理工具在运行过程中不断接收请求,并根据 WebDriver 协议解析出要执行的操作,最后调用 iOS 或者 Android 平台上的原生测试框架完成测试。
3.Appium如何实现iOS应用自动化?
Appium通过XCUITest驱动来支持基本的iOS应用自动化。XCUITest是苹果公司在iOS 9.3版推出的自动化框架,Appium利用这个框架来操作iOS设备或模拟器上的应用程序。在这个过程中,Appium对XCUITest的使用是通过WebDriverAgent服务间接完成的。WebDriverAgent(也被叫做WDA)是一个运行在iOS模拟器或设备上暴露XCUITest API的服务,兼容WebDriver。
二、环境搭建
俗话说“万事开头难”、“工欲善其事必先利其器”。在正式开始之前,我们先要搞清楚我们要搭建哪些环境,以及这些环境是用来干嘛的?
首先是硬件环境:这个不必多说,需要一台Mac系统的电脑,一台iOS手机(或模拟器)。
其次是软件环境,软件环境又可以分为:基础依赖环境、iOS环境、Appium环境、测试代码编写环境。
- 基础依赖环境:
- 能够运行Appium Server的基础依赖环境:JDK、nodeJS;
- 编写测试代码的基础依赖环境:Python语言编写就安装Python、Java语言就安装JDK,这没啥好说的(本文将以Python为例);
- iOS环境:
- xcode:打包编写iOS APP项目的工具
- 模拟器:在Xcode中下载
- ios-test-app项目:用来运行测试的官方demo项目
- WebDriverAgent:远程控制iOS设备进行测试,可以类比成Android的ADB
- Appium环境:
- Appium-Desktop(桌面端)
- Appium-inspector(定位器)
- Appium-doctor(环境检测工具)
- 测试代码编写环境:
- 编写测试代码的IDEA:PyCharm
- Appium-Python-Client包:编写测试用例的方法包;
1.基础环境搭建
基础JDK、nodeJS、Python环境搭建不做过多赘述,详情可参照前面的文章:《基础环境搭建,这一篇就够了!》
2.iOS环境搭建
基本步骤如下:
- 下载安装xcode
- 在xcode中下载iOS模拟器
- 使用xcode编译打包测试APP(以Appium官方的示例APP为例https://github.com/appium/ios-test-app)
① 克隆克隆ios-test-app项目并在Xcode中编译打包
- 克隆ios-test-app项目
git clone https://github.com/appium/ios-test-app.git
欢迎大家来到IT世界,在知识的湖畔探索吧!
- 启动xcode,在xcode中打开项目
- 选择要部署的iOS版本
- 选择模拟器型号
- 开始编译,完成后会自动启动模拟器
② 安装WebDriverAgent
- 下载WebDriverAgent:https://github.com/appium/WebDriverAgent
- 在xcode中按照如下图操作,然后进行编译,具体方法见:iOS UI自动化–WebDriverAgent安装及使用。
3.Appium环境搭建
① 下载Appium-Desktop
官方网站下载并安装最新版本的 Appium-Desktop,https://github.com/appium/appium-desktop/releases/tag,目前最新的为1.22.3-4版本
② 安装appium-inspector
https://github.com/appium/appium-inspector
官方网站下载并安装最新版本的 Appium,根据各自电脑系统下载。例如我的是Mac系统:
③ 安装Appium环境诊断工具appium-doctor
欢迎大家来到IT世界,在知识的湖畔探索吧!npm install -g appium-doctor
安装报错了,提示淘宝的镜像源过期了
网上找了方法,尝试解决:
再次安装,成功了:
使用“npm list -g”命令可以看到已安装的appium-doctor为1.6.2版本
执行“appium-doctor”检查环境,发现报错“zsh: command not found: appium-doctor”
再次查找解决办法:
执行“npm list -g”查看安装的包的路径:
编辑~/.zprofile文件,将npm包路径导入环境变量(注意:这里用的是zsh,所以编辑.zprofile,如果是bash,则需要编辑.bash_profile)
编辑完成,需要重载一下环境变量
source ~/.zprofile
重新执行“appium-doctor”命令,检测成功:
④ 启动Appium Server
配置好 Appium 的环境依赖后,就可以继续启动 Appium Server 了。点击Appium图标,启动服务:
⑤ 启动appium-inspector
在appium-inspector页面配置Session:
欢迎大家来到IT世界,在知识的湖畔探索吧!{ "platformName": "iOS", "appium:platformVersion": "17.5", "appium:deviceName": "iPhone 15", "appium:automationName": "XCUITest", "appium:app": "/Users/chenjigang/Library/Developer/Xcode/DerivedData/TestApp-axnnovmblqknzudyvqypxsgdtcjs/Build/Products/Debug-iphonesimulator/TestApp.app" }
点击“Start Session”,启动报错Error:“Failed to create session. An unknown server-side error occurred while processing the command. Original error: Unable to launch WebDriverAgent because of xcodebuild failure: xcodebuild failed with code 65 xcodebuild error message:”
在网上查找到的解决方法是要先在手机上安装一个WebDriverAgent(Appium-IOS启动报错):
我前面没安装WebDriverAgent,后来安装以后就正常了(WebDriverAgent具体安装方法见:iOS UI自动化–WebDriverAgent安装及使用)。
再次点击“Start Session”,启动成功!
4.测试代码编写环境搭建
由于我们是以Python编写测试用例作为示例,所以必须安装PyCharm编辑器以及Appium的方法包Appium-Python-Client。
① PyCharm安装
可参考前面的文章《PyCharm2023.3.2激活成功教程,亲测有效!》
② 安装Appium-Python-Client包
pip install Appium-Python-Client
三、项目实战
1.编写第一个测试用例
① 初始化设备连接
desired_caps中是设备和APP的信息,也就是appium-inspector初始化配置中填写的内容。
from appium.options.ios import XCUITestOptions class MyTests(unittest.TestCase): def setUp(self): """初始化设备""" desired_caps = { "platformName": "iOS", "platformVersion": "17.5", "deviceName": "iPhone 15", "automationName": "XCUITest", "app": "/Users/xxx/Library/Developer/Xcode/DerivedData/TestApp-axnnovmblqknzudyvqypxsgdtcjs/Build/Products/Debug-iphonesimulator/TestApp.app", } options = XCUITestOptions().load_capabilities(caps=desired_caps) self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", options=options) # 连接Appium self.driver.implicitly_wait(8) def tearDown(self): self.driver.quit()
注意:安装的Appium-Python-Client,自2.3版本后,多了一个options参数:要先导入XCUITestOptions,再调用XCUITestOptions的load_capabilities方法加载设备信息。
更多具体用法见:https://pypi.org/project/Appium-Python-Client/
② 编写测试用例
在编写用例之前,我们先照着页面捋一下操作思路:
- 在第一个输入框输入一个数字
- 在第二个输入框输入一个数字
- 点击“Compute Sum”计算两数之和
- 断言输出的计算结果是否正确
def test_calculator(self): integer_a = self.driver.find_element(By.ID, "IntegerA") # 定位第一个输入框 integer_b = self.driver.find_element(By.ID, "IntegerB") # 定位第二个输入框 sum_button = self.driver.find_element(By.ID, "ComputeSumButton") # 定位求和按钮 answer = self.driver.find_element(By.ID, "Answer") # 定位答案元素 integer_a.send_keys("5") # 第一个输入框输入5 integer_b.send_keys("5") # 第二个输入框输入5 sum_button.click() # 点击求和按钮 self.assertEqual(answer.text, "10") # 断言求和是否正确
③ 运行测试用例
运行效果如下:
小结
上述就是我自己亲身实践的具体搭建步骤、以及在搭建过程中遇到的问题和解决办法,算是抛砖引玉了。当然还有很多有待完善的地方,比如测试案例中用到的APP仅仅是一个官方的测试demo,操作步骤也比较简单。你可以运用到实际工作中的测试APP上去,并引入PO面向页面对象设计模式,从而应对更为复杂的测试场景。
Appium的环境搭建确实挺复杂的,快的话可能要一天,慢的话两三天也不一定搞得好,因为往往一个报错,就会卡住很久!
不过不要紧,以下是一些个人经验之谈,在遇到问题时希望能对你有参考意义:
- 遇到问题,先不要着急,可以先看报错信息,基于经验去解决;
- 经验解决不了,可以在网上搜索其他人是否遇到过同类问题;
- 网上搜不到的,可以咨询身边有经验的同事、朋友或同学,但问题描述需具体、准确,如问题产生的背景、前因后果,报错的信息、截图,已经尝试过的解决方法等;
- 问也问不到人的,那就只能不断尝试各种猜想,不断怀疑,并且基于此种怀疑去不断验证,逐一排除;
- 还有一个极为重要且有效的,就是查看该系统/软件的日志,有报错日志最好,没有报错日志就边操作复现边看日志信息;
- 遇到问题不可怕,是问题,总会有解决办法,一时想不到,不必焦躁,不必死磕,晾一晾,转换一下思路,说不定第二天就会”山重水复疑无路,柳暗花明又一村“!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/99414.html