iOS自动化测试:mac下iOS10 appium测试环境的搭建

概述

Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于IOS和Android以及firefox的操作系统。原生的应用是指用android或ios的sdk编写的应用,移动网页应用是指网页应用,类似于ios中safari应用或者Chrome应用或者类浏览器的应用。混合应用是指一种包裹webview的应用,原生应用于网页内容交互性的应用。重要的是Appium是跨平台的,何为跨平台,意思就是可以针对不同的平台用一套api来编写测试用例。

iOS10后基于UIAutomation的测试框架已经苹果更改为XCUITest测试框架了,从Appium1.6.3开始Appium也开始支持XCUITest了。由于时间原因,Appium1.6.3以前的测试环境搭建及其工具使用就不再说明,资料网上也是一大把。截止目前最新的是Appium1.6.5,下面介绍下环境搭建过程。

开发环境


系统:macOS Sierra (10.12.4)

开发工具:Xcode 8.3.2(iOS10.3.1)

环境搭建


开始搭建

1、 安装homebrew:homebrew 简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,可以说Homebrew就是mac下的apt-get、yum等神器。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2、 安装libimobiledevice:libimobiledevice 是一个跨平台的软件库,支持 iPhone®, iPod Touch®, iPad® and Apple TV® 等设备的通讯协议。不依赖任何已有的私有库,不需要越狱。应用软件可以通过这个开发包轻松访问设备的文件系统、获取设备信息,备份和恢复设备,管理 SpringBoard 图标,管理已安装应用,获取通讯录、日程、备注和书签等信息,使用 libgpod 同步音乐和视频。

$ brew install libimobiledevice --HEAD

3、 安装carthage:carthage 使用于 Swift 语言编写,只支持动态框架,只支持 iOS8+的Cocoa依赖管理工具。

$ brew install carthage

4、安装node:node是安装npm的前置条件。

$ brew install node

5、安装npm:npm是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。

$ brew install npm

6、安装cnpm:国内直接用npm下载安装会有好多网络问题,安装淘宝的cnpm要比npm好用,https://npm.taobao.org/

$ npm install -g cnpm --registry=https://registry.npm.taobao.org

7、安装ios-deploy:ios-deploy是一个使用命令行安装ios app到连接的设备的工具,原理是根据os x命令行工程调用系统底层函数,获取连接的设备、查询/安装/卸载app。

$ cnpm install -g ios-deploy

8、安装xcpretty: xcpretty是用于对xcodebuild的输出进行格式化。并包含输出report功能。

$ gem install xcpretty

9、安装appium,appium-doctor

$ cnpm install -g appium

$ cnpm install -g appium-doctor

10、使用appium-doctor检查appium环境

$ appium-doctor //appium-doctor --ios 只检测iOS环境

info AppiumDoctor Appium Doctor v.1.4.2

info AppiumDoctor ### Diagnostic starting ###

info AppiumDoctor  ✔ The Node.js binary was found at: /usr/local/bin/node

info AppiumDoctor  ✔ Node version is 6.10.2

info AppiumDoctor  ✔ Xcode is installed at: /Applications/Xcode.app/Contents/Developer

info AppiumDoctor  ✔ Xcode Command Line Tools are installed.

info AppiumDoctor  ✔ DevToolsSecurity is enabled.

info AppiumDoctor  ✔ The Authorization DB is set up properly.

info AppiumDoctor  ✔ Carthage was found at: /usr/local/bin/carthage

info AppiumDoctor  ✔ HOME is set to: /Users/zhoutq

WARN AppiumDoctor  ✖ ANDROID_HOME is NOT set!

WARN AppiumDoctor  ✖ JAVA_HOME is NOT set!

WARN AppiumDoctor  ✖ adb could not be found because ANDROID_HOME is NOT set!

WARN AppiumDoctor  ✖ android could not be found because ANDROID_HOME is NOT set!

WARN AppiumDoctor  ✖ emulator could not be found because ANDROID_HOME is NOT set!

WARN AppiumDoctor  ✖ Bin directory for $JAVA_HOME is not set

info AppiumDoctor ### Diagnostic completed, 6 fixes needed. ###

info AppiumDoctor

info AppiumDoctor ### Manual Fixes Needed ###

info AppiumDoctor The configuration cannot be automatically fixed, please do the following first:

WARN AppiumDoctor - Manually configure ANDROID_HOME.

WARN AppiumDoctor - Manually configure JAVA_HOME.

WARN AppiumDoctor - Manually configure ANDROID_HOME and run appium-doctor again.

WARN AppiumDoctor - Add '$JAVA_HOME/bin' to your PATH environment

info AppiumDoctor ###

info AppiumDoctor

info AppiumDoctor Bye! Run appium-doctor again when all manual fixes have been applied!

info AppiumDoctor

环境常见问题解决:

✖ Xcode Command Line Tools are NOT installed!

$ xcode-select --install #按照提示安装即可

WARN AppiumDoctor ✖ ANDROID_HOME is NOT set!

建议安装AS,可以解决其他Android环境的其他问题Android Studio

设置 ANDROID_HOME 路径

设置 JAVA_HOME 路径

Mac OS X 下查看和设置JAVA_HOME

在.bash_profile/.zshrc文件中设置JAVA和Android环境变量

#android sdk

export ANDROID_HOME=~/Library/Android/sdk

export PATH="$HOME/.yarn/bin:$PATH"

#java_home

export JAVA_HOME=$(/usr/libexec/java_home)

export PATH=$JAVA_HOME/bin:$PATH

export CLASS_PATH=$JAVA_HOME/lib

以上都很简单,下面重点来了。

11、appium服务端安装:安装appium-xcuitest-driver依赖,进入WebDriverAgent安装目录,运行bootstrap。

$ cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent (如果WebDriverAgent 所在路径和此不同,请自行查找)

$ mkdir -p Resources/WebDriverAgent.bundle

$ sh ./Scripts/bootstrap.sh

11.1、用Xcode打开WebDriverAgent,并且编译进入WebDriverAgent 文件夹,可用如下方法:

11.2、编译WebDriverAgentLib

11.3、编译WebDriverAgentRunner

若果编译的过程中有语法错误,重新安装第10步。

11.4、建立服务WebDriverAgent:进入WebDriverAgent 文件夹,建立服务。

$ cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent

$ xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=真机的udid' test

运行到最后会发现

而iphone多了一个WebDriverAgentRunner的app。手动启动那个app的时候

原因是我们手机并并没有信任这个apple id的开发者,到设置-通用-设备管理(描述文件) 信任你的apple id就可以了。再次运行上述命令,看到如下图,就成功了,

12. 安装appium client端:appium client有ruby,python,java三个版本,可自行选择自己喜欢的安装即可,这里只说Python版安装,具体见下面查看资料3。

pip安装

$ pip install Appium-Python-Client

如果安装过程出现 could not create ‘/Library/Python/2.7/site-packages/appium’: Permission denied 错误,

使用 pip install Appium-Python-Client –user 命令可以安装成功

源码安装 在Pipy上下载源码安装

$ tar -xvf Appium-Python-Client-X.X.tar.gz

$ cd Appium-Python-Client-X.X

$ python setup.py install


github安装

$ git clone https://github.com/appium/python-client.git

$ cd python-client

$ python setup.py install

13、测试流程:

下载测试代码并且测试,网上一个简单的测试代码:erduoniba/appium_ios_sample_code,自己写可以参考Python + Appium+ IOS自动化测试

对于如何利用app-inspector获取界面元素,请参考app-inspector官方文档。

13.1、先启动appium服务器:

$ appium -U xxxxxxx // xxxxx 真机设备ID

13.2、接下来连上真机 执行测试用例代码:

$ cd sample-code/examples/python

$ python ios_simple_device.py

test_scroll (__main__.SimpleIOSTests) ... ok

----------------------------------------------------------------------

Ran 1 test in 30.421s

OK

踩过的坑


1、1 - 10步安装过程中的权限问题:chmod -R 777 pathForFile,然后重新运行该命令。

2、第11.4步我在安装的时候一直没有Listening on USB这一行信息,不过服务正常可以使用。

3、在测试过程中一直提示第11.4步第一个图的错误的话,拔数据线,关测试机,重启,重插。


参考资料


1、Appium在 MAC 上搭建 appium1.6.3 过程:https://testerhome.com/topics/6962

2、appium1-macOS10.12下如何丝滑的使用appium?:http://www.jianshu.com/p/05943804c25e

3、Appiumappium + iOS10.2 + Xcode8.2.1 + React Native 完成自动化测试:https://testerhome.com/topics/7775

推荐阅读更多精彩内容