龙空技术网

移动测试神器Appium-iOS环境快速搭建&demo项目实战

大刚测试开发实战 65

前言:

当前大家对“测试的环境怎么写”大体比较注意,你们都需要学习一些“测试的环境怎么写”的相关资讯。那么小编也在网络上收集了一些对于“测试的环境怎么写””的相关文章,希望同学们能喜欢,你们一起来了解一下吧!

前言

在之前的文章中,我们介绍过一款移动端自动化测试框架UiAutomator2以及如何基于UiAutomator2框架在移动端设备上开展自动化测试实践,感兴趣的可以查看:

《移动端APP自动化测试框架-UiAutomator2基础》《基于UiAutomator2+PageObject模式开展APP自动化测试实战》

不过UiAutomator2只支持Android设备,不支持iOS设备。想要在iOS设备上开展自动化测试,还得是传统老牌测试框架Appium,也是今天重点要介绍的内容。全篇分为以下几个部分:

1.Appium知多少

Appium简介Appium工作原理Appium如何实现iOS应用自动化?

2.环境搭建

基础环境搭建:JDK、NodeJS、PythoniOS环境搭建:克隆测试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的ADBAppium环境:Appium-Desktop(桌面端)Appium-inspector(定位器)Appium-doctor(环境检测工具)测试代码编写环境:编写测试代码的IDEA:PyCharmAppium-Python-Client包:编写测试用例的方法包;1.基础环境搭建

基础JDK、nodeJS、Python环境搭建不做过多赘述,详情可参照前面的文章:《基础环境搭建,这一篇就够了!》

2.iOS环境搭建

基本步骤如下:

下载安装xcode在xcode中下载iOS模拟器使用xcode编译打包测试APP(以Appium官方的示例APP为例)① 克隆克隆ios-test-app项目并在Xcode中编译打包克隆ios-test-app项目

git clone 
启动xcode,在xcode中打开项目选择要部署的iOS版本选择模拟器型号开始编译,完成后会自动启动模拟器② 安装WebDriverAgent下载WebDriverAgent:在xcode中按照如下图操作,然后进行编译,具体方法见:iOS UI自动化--WebDriverAgent安装及使用。3.Appium环境搭建① 下载Appium-Desktop

官方网站下载并安装最新版本的 Appium-Desktop,,目前最新的为1.22.3-4版本

② 安装appium-inspector

官方网站下载并安装最新版本的 Appium根据各自电脑系统下载。例如我的是Mac系统:

③ 安装Appium环境诊断工具appium-doctor

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:

{  "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 XCUITestOptionsclass 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(";, options=options)  # 连接Appium        self.driver.implicitly_wait(8)    def tearDown(self):        self.driver.quit()

注意:安装的Appium-Python-Client,自2.3版本后,多了一个options参数:要先导入XCUITestOptions,再调用XCUITestOptions的load_capabilities方法加载设备信息。

更多具体用法见:

② 编写测试用例

在编写用例之前,我们先照着页面捋一下操作思路:

在第一个输入框输入一个数字在第二个输入框输入一个数字点击“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的环境搭建确实挺复杂的,快的话可能要一天,慢的话两三天也不一定搞得好,因为往往一个报错,就会卡住很久!

不过不要紧,以下是一些个人经验之谈,在遇到问题时希望能对你有参考意义:

遇到问题,先不要着急,可以先看报错信息,基于经验去解决;经验解决不了,可以在网上搜索其他人是否遇到过同类问题;网上搜不到的,可以咨询身边有经验的同事、朋友或同学,但问题描述需具体、准确,如问题产生的背景、前因后果,报错的信息、截图,已经尝试过的解决方法等;问也问不到人的,那就只能不断尝试各种猜想,不断怀疑,并且基于此种怀疑去不断验证,逐一排除;还有一个极为重要且有效的,就是查看该系统/软件的日志,有报错日志最好,没有报错日志就边操作复现边看日志信息;遇到问题不可怕,是问题,总会有解决办法,一时想不到,不必焦躁,不必死磕,晾一晾,转换一下思路,说不定第二天就会”山重水复疑无路,柳暗花明又一村“!

标签: #测试的环境怎么写