前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mac 环境Appium自动化测试环境搭建

Mac 环境Appium自动化测试环境搭建

作者头像
清风穆云
发布2021-08-09 10:49:31
2.4K0
发布2021-08-09 10:49:31
举报
文章被收录于专栏:QA一隅

前言

上一篇分享了 Windows环境Appium自动化测试环境搭建 但是由于Win环境不支持iOS设备测试,因此这里再分享Appium+Mac环境搭建,值得一提的是:在Mac环境既可以进行Android也可以进行iOS App自动化测试。

系统环境

设备类型

系统版本

Mac-mini

Mac OS 10.14.6

iPhone6

iOS 12.4.3

环境搭建

Xcode

Xcode 是运行在操作系统Mac OS X上的集成开发工具(IDE),由Apple Inc开发。可以在AppStore中安装最新版本,后续我们配置WebDriverAgent会用到此工具。

JDK

  • 点击 JDK下载地址 下载 jdk-xxx_osx-x64_bin.dmg文件安装。
  • 详细安装配置请参考:MAC安装JDK及环境变量配置
  • 安装完成后输入如下命令进行验证
代码语言:javascript
复制
atxdeMac-mini:~ atx$ java -version
java version "12.0.2" 2019-07-16
Java(TM) SE Runtime Environment (build 12.0.2+10)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)

Node.js

使用brew安装Nodejs,安装命令如下

代码语言:javascript
复制
brew install nodejs

安装后使用如下命令安装是否成功

代码语言:javascript
复制
atxdeMac-mini:~ atx$ npm -v
6.4.1
atxdeMac-mini:~ atx$ node -v
v8.16.0

Android SDK

使用brew安装Android SDK命令如下

代码语言:javascript
复制
brew install android-sdk

安装完成后使用如下命令验证是否安装成功

代码语言:javascript
复制
atxdeMac-mini:~ atx$ adb version
Android Debug Bridge version 1.0.41
Version 29.0.1-5644136
Installed as /usr/local/bin/adb

Appium安装

Appium安装有两种方式,一种是通过Appium-desktop安装,另外是通过npm命令安装,通过命令安装其实安装的是appium-server版本,可以通过appium命令启动服务。任选择一种安装方式即可。

Appium-desktop

可以在官方Github下载对应的软件包下载.dmg后缀名结尾的包: appium-desktop/releases 通过官网下载速度非常感人,所以我这里提供一个网盘版本的下载地址:Appium-mac-1.15.0-1.dmg 下载安装后启动即可。

命令安装

通过命令 npm install -g appium来安装。不过由于众所周知的网络原因,直接使用这样安装会非常非常慢,甚至会安装失败,所以我们可以使用国内镜像来安装。

选用的镜像是 淘宝NPM镜像

镜像设置
代码语言:javascript
复制
npm install -g cnpm --registry=https://registry.npm.taobao.org

安装命令

使用如下命令来执行安装:

代码语言:javascript
复制
#安装最新版本
cnpm install -g appium

#安装指定版本
cnpm install appium@1.7.2 -g
Appium-Python-Client 安装

由于我们使用Python来写脚本,所以需要安装Appium-Python-Client客户端。

代码语言:javascript
复制
pip install Appium-Python-Client
安装校验

appium-doctor可以检测Appium整体依赖环境配置情况。

代码语言:javascript
复制
cnpm install appium-doctor -g

安装好之后输入appium-doctor可以查看环境配置情况

代码语言:javascript
复制
atxdeMac-mini:~ atx$ appium-doctor
info AppiumDoctor Appium Doctor v.1.11.1
info AppiumDoctor ### Diagnostic for necessary dependencies starting ###
info AppiumDoctor   The Node.js binary was found at: /usr/local/bin/node
info AppiumDoctor   Node version is 8.16.0
info AppiumDoctor   Xcode is installed at: /Applications/Xcode 10.3.app/Contents/Developer
info AppiumDoctor   Xcode Command Line Tools are installed in: /Applications/Xcode 10.3.app/Contents/Developer
info AppiumDoctor   DevToolsSecurity is enabled.
info AppiumDoctor   The Authorization DB is set up properly.
info AppiumDoctor   Carthage was found at: /usr/local/bin/carthage. Installed version is: 0.33.0
info AppiumDoctor   HOME is set to: /Users/atx
info AppiumDoctor   ANDROID_HOME is set to: /Users/atx/Library/Android/sdk
info AppiumDoctor   JAVA_HOME is set to: /Library/Java/JavaVirtualMachines/jdk-12.0.2.jdk/Contents/Home
info AppiumDoctor   adb exists at: /Users/atx/Library/Android/sdk/platform-tools/adb
info AppiumDoctor   android exists at: /Users/atx/Library/Android/sdk/tools/android
info AppiumDoctor   emulator exists at: /Users/atx/Library/Android/sdk/tools/emulator
info AppiumDoctor   Bin directory of $JAVA_HOME is set
info AppiumDoctor ### Diagnostic for necessary dependencies completed, no fix needed. ###
info AppiumDoctor
info AppiumDoctor ### Diagnostic for optional dependencies starting ###

libimobiledevice

libimobiledevice用于连接iOS设备,类似于Androidadb。使用如下命令进行安装:

代码语言:javascript
复制
brew install libimobiledevice --HEAD

安装后我们使用可以常用命令来检测是否安装成功

1.获取设备的udid

代码语言:javascript
复制
atxdeMac-mini:~ atx$ idevice_id -l
6dd5e55bf4204cd5ad8042dc4ecb2b703bbxxxxx

2.查看设备已经安装的应用bundleID

代码语言:javascript
复制
atxdeMac-mini:~ atx$ ideviceinstaller -l
Total: 7 apps
com.hunantv.imgotv.interinhouse - 芒果TV国际 6.2.13.1911231710
hk.itools.apper - 应用兔 4.1.1.3
com.mgtv.noah - 茄子短视频 20191029001
com.hunantv.dmsdk.bigdataDemo - BDSDK-iPhone-Demo 4.1.0.1838
com.hunantv.imgotv - 芒果TV 6.5.2.1912111010
com.hunantv.dmsdk.demo - MGTV-DownloadSDK-Demo 1
com.apple.test.WebDriverAgentRunner-Runner - WebDriverAgentRunner-Runner 1

更多资料:ios命令行调试工具libimobiledevice

WebDriverAgent

WDA简介

WDA(WebDriverAgent)是适用于iOSWebDriver服务器实现,可用于远程控制iOS设备允许启动和终止应用程序,点击和滚动视图或确认屏幕上的视图存在。

这使其成为应用端到端测试或通用设备自动化的完美工具。它的工作原理是链接XCTest.framework和调用AppleAPI直接在设备上执行命令。WebDriverAgentFacebook上开发并用于端到端测试,并被Appium成功采用。

WDA路径

WDA路径其实就是WebDriverAgent.xcodeproj文件所在路径,这里需要注意的是使用Appium-desktop安装和命令安装的WDA文件路径不一样。

  1. Appium-desktop路径如下
代码语言:javascript
复制
/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/
  1. 命令安装路径如下
代码语言:javascript
复制
/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent/

初始化WDA

进入到WDA目录,使用如下命令初始化WDA,该脚本会使用Carthage下载所有的依赖,使用npm打包响应的js文件

代码语言:javascript
复制
brew install carthage
./Scripts/bootstrap.sh

执行完成后,使用Xcode直接双击打开WebDriverAgent.xcodeproj这个文件。

设置证书

因为安装到真机上都是需要证书签名的,所以需要准备苹果开发者证书,可以使用公司的企业证书或者个人开发者证书(99美刀一年)

1.首先在TARGETS里面选中WebDriverAgentLib设置好证书

2.接着在TARGETS里面选中WebDriverAgentRunner,用同样的方法设置好证书。

3.如果是免费版的个人证书,还需要修改下WebDriverAgentBundleID,随便加点后缀,只要不跟其他人的重名就好。

运行测试

1.菜单栏选择目标设备

2.Scheme选择WebDriverAgentRunner

3.最后运行 Product -> Test一切正常的话,手机上会出现一个无图标的WebDriverAgent应用

注意:UI Testing需要iOS9.0以上系统版本,所以连接WDA的设备最好是iOS9以上系统版本。

4.此时Xcode控制台界面可以看到设备的IP。如果看不到的话,依次点击Xcode菜单 View->Debug Area->Activity Console

端口转发

1.有些国产的iPhone机器通过手机的IP和端口还不能访问,此时需要将手机的端口转发到Mac上。

代码语言:javascript
复制
 iproxy 8100 8100

2.打开浏览器输入http://localhost:8100 可以看到页面如下信息,说明WDA连接成功。

代码语言:javascript
复制
{
  "value" : "Unhandled endpoint: \/ -- http:\/\/localhost:8100\/ with parameters {\n    wildcards =     (\n        \"\"\n    );\n}",
  "sessionId" : "D33BB641-B7ED-42AE-A4A2xxxxxx",
  "status" : 1
}

命令连接WDA

Xcode虽然可以使设备连接WDA,但是每次只能连接一台设备,而且该软件运行占用内存比较大,所以我们需要使用命令终端来运行WDA,这样方便我们进行自动化或持续集成。

注意:每台设备使用命令连接WDA时需要在xcode上面注册。

1.首先我们获取iOS设备的udid

代码语言:javascript
复制
atxdeMac-mini:~ atx$ idevice_id -l
6dd5e55bf4204cd5ad8042dc4ecb2b703bbxxxxx

2.然后执行如下命令来运行WDA

代码语言:javascript
复制
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=1d2c746769435ce0749f7f87b56f80abxxxxxx" test

3.最后还是运行端口转发命令iproxy 8100 8100

WDA运行常见问题

1.安装失败

解决方法:遇到这个问题,说明手机上已经有一个WebDriverAgent的应用了,只是BundleID不一致,需要先将手机上的卸载掉,重新运行 Product -> Test

2.设备未信任

解决方案:进入 设置->通用->设备管理->开发者应,然后点击信任,之后再重新运行一遍 Product -> Test

运行调试

可以使用如下代码进行启动iOS app调试。

代码语言:javascript
复制
from appium import webdriver

 def appium_iOS_test():
        desired_caps = {}
        desired_caps['automationName']='XCUITest' #Xcode8.2以上无UIAutomation,需使用XCUITest
        desired_caps['platformName'] = 'iOS'
        desired_caps['platformVersion'] = '12.4.1'
        desired_caps['deviceName'] ='iphone6'
        desired_caps['udid'] = 'xxxxx'
        desired_caps['bundleId'] = 'xxxx'
        
        driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    
appium_iOS_Test()

常见问题

  1. 8100端口被占用
代码语言:javascript
复制
[debug] [W3C] Encountered internal error running command: Error: Couldn't start port forwarding on port 8100. Please provide a different port using 'wdaLocalPort' capability
[debug] [W3C]     at WebDriverAgent.createIProxy (/usr/local/lib/node_modules/appium/node_modules/_appium-xcuitest-driver@2.129.0@appium-xcuitest-driver/lib/wda/webdriveragent.js:263:13)

解决方案:使用命令kill -9 $(lsof -i:8100 -t)关闭8100端口,然后重新启动appium和iproxy 8100 8100

  1. bundleID错误
代码语言:javascript
复制
Encountered internal error running command: Error: App with bundle identifier 'com.xxx.xxxx' unknown.

解决方案:输入正确的BundleID,可以使用ideviceinstaller -l查看正确的BundleID。

  1. WDA未启动
代码语言:javascript
复制
An unknown server-side error occurred while processing the command. Original error: Unable to start WebDriverAgent session because of xcodebuild failure: An unknown server-side error occurred while processing the command. Original error: Could not proxy command to remote server. Original error: Error: read ECONNRESET Make sure you follow the tutorial at https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md. Try to remove the WebDriverAgentRunner application from the device if it is installed and reboot the device.

解决方案:重新启动WDA

  1. 设备未信任
代码语言:javascript
复制
 An unknown server-side error occurred while processing the command. Original error: Unexpected data: {"Error":"InvalidHostID","Request":"StartSession"}

解决方案:打开xcode,弹出设备信任弹窗,点击信任即可。

参考资料

  • https://segmentfault.com/a/1190000016888385
  • https://www.jianshu.com/p/cff879e5ca65
  • https://www.cnblogs.com/dreamhighqiu/p/10989962.html
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 QA一隅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 系统环境
  • 环境搭建
    • Xcode
      • JDK
        • Node.js
          • Android SDK
            • Appium安装
              • Appium-desktop
              • 命令安装
              • 安装校验
            • libimobiledevice
              • WebDriverAgent
                • WDA简介
                • WDA路径
                • 初始化WDA
                • 设置证书
                • 运行测试
                • 端口转发
                • 命令连接WDA
                • WDA运行常见问题
            • 运行调试
            • 常见问题
            • 参考资料
            相关产品与服务
            持续集成
            CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档