mac系统下搭建ios自动化测试环境(appium+python)

最近因为工作需要进行了mac系统下的ios真机自动化测试环境搭建,踩了很多坑,还好最后跑通了。

真机连接效果如下:


image

设备和主要的软件版本如下:

iphone xs 12.3.1;mac os 10.14.5;xcode 10.2.1;appium-desk 1.13.0;appium 无界面版 1.14.0; node.js 10.16.0;python3.7;JDK12.0.2 。
友情提示:建议每一条命令前添加sudo进行授权,避免permission deny 造成安装失败。

环境搭建

JDK安装

去oracle官网https://www.oracle.com/technetwork/java/javase/downloads/index.html
下载JDK,下面两个都可以,下载需要注册账号。

JDK.png

JK.png

下载完成后无脑下一步下一步就好。
详细步骤可参考https://www.cnblogs.com/52py/p/8065066.html
安装配置完成后在终端输入 java -verison 如果出现java version "12.0.2" 2019-07-16 字样说明安装成功。

brew

安装homebrew:homebrew 简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,类似于pip、apt-get、yum等神器。
安装命令

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

node.js

可用两种方法安装
1 官网下载后按照提示进行安装
https://nodejs.org/zh-cn/
2 使用brew命令安装

brew install node

安装完成后在终端输入 node -v 如果出现 类似v10.16.0 字样说明安装成功。

依赖插件ibimobiledevice、carthage、ios-deploy、xcpretty

brew install libimobiledevice --HEAD
brew install carthage
npm install -g ios-deploy
gem install xcpretty

Xcode

推荐在App Store中安装,软件一共6.5G左右,请保持网络畅通。

Appium

appium是手机和pc之间的代理服务器,完成两者的通信处理。(没错,它就是个中间商)
appium-desk版本可在官网下载安装http://appium.io/downloads.html
appium-server 无界面版使用npm命令安装,但鉴于部分资源被墙,建议使用淘宝镜像。

npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install -g appium #appium@1.13.0可指定安装版本

安装appium-doctor检查appium环境。

cnmp install -g appium-doctor

终端运行appium-doctor --ios


QQ20190725-154336.png

若提示xcode未安装在终端运行命令,设置xcode路径。

 xcode-select –switch /Applications/Xcode.app/Contents/Developer

参考http://blog.sina.com.cn/s/blog_68f262210102uz5y.html

WebDriverAgent (wda)

之前查阅了很多资料,说的是appium自带的wda有问题,无法使用inspector进行页面元素定位,但我决定使用appium-desk进行定位就没有单独去下载GIthub上的wda-master。

  • 首先是桌面版的wda
  1. 文件路径:
    /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
    在终端cd到上述目录,运行命令安装依赖。
./Scripts/bootstrap.sh

安装完成后点击mac右上角的聚焦搜索,粘贴路径敲击回车。


image.png
  1. 右键通过Xcode打开.xcodeproj文件。


    image.png
  2. 首先打开Xcode-performance-account登录你的AppleID (我用的公司开发者账户,如果你是个人账户你就百度解决证书的问题)
  3. 在wdaLib General设置中选择自动签名,选择你的公司team。bundleid 是APP的唯一标识符,直接问开发获得。


    image.png

    确认 wdaLib build setting 中deployment系统的版本


    image.png

    packaging 中的project bundleid 和之前填写的是否一致。
    image.png

    signing签名是否正确


    image.png
  4. 在wdaRunner General中设置自动签名,如果报错提示 Try again ,不要着急,先设置build setting。


    image.png

    检查build setting中packaging 的bundleid是否正确


    image.png

    设置签名
    image.png
  5. 连接上你的水果机,Scheme选择wdarunner,destination选择你的真机。


    image.png

    image.png
  6. 点击左上角三角形进行构建,首次构建可能会要求你输入访问钥匙的密码,输入你的账户密码即可(我输入的是开机密码),提示build succeeded。然后点击-product-test进行将wda安装到真机。安装完成后在真机的safari浏览器输入 127.0.0.1:8100/status 显示如下则表示安装成功。


    QQ20190725-0.PNG
  7. 打开appium-desk ,设置ip端口号,一般保持默认即可,如果你已经开启了无界面版的appium-sever,就把端口修改和前者不同即可,高级设置也保持默认状态,点击start server 开启appim服务。
    (mac系统与windows不同,只能打开一个appium-desk,所以你要同时做多台真机的测试那就必须要安装无界面的appium-sever。)
    image.png

    服务开启成功的界面如下图,右上角的三个方框的含义分别是:建立inspector session(用于获取真机页面元素);导出appium运行日志;关闭appium服务。
    image.png

    点击右上角的小问号按钮,弹出连接窗口,填入对应参数,参数具体含义可见
    appium接口参数(推荐使用google浏览器,鼠标右键可翻译页面内容)
image.png
  1. 参数填写完成后点击右下角start session 手机上点击信任此电脑,并且开启设置-开发者-enable ui automation ,转跳到爱的魔力转圈圈界面,第一次连接的时间可能会很长。


    image.png
  • 无界面版的appium wda安装
    无界面相对桌面版的优势是:可以多开;占用更少的资源;启动更快。
    如果已经获取了页面元素就建议使用无界面版跑测试脚本。

路径/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent
同上,cd到目录执行命令后使用xcode构建。

./Scripts/bootstrap.sh

如果之前安装过appium-desk的wda ,xcode会卸载后重新安装,安装过程中如果提示application install failed 就手动卸载真机上的wda。

敲黑板
安装谁的wda就用谁去连接真机。
比如说:我通过xcode构建了appium-desk版的wda到真机上,那么我就只能通过desk版去连接真机,不能通过无界面appium+python连接!

Python

mac 系统自带python2,可通过官网下载并安装python3,在终端输入python3进入python IDE说明安装成功。

pip

pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能,目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具。
你可以通过以下命令来判断是否已安装:

pip3 --version

安装成功提示如下


image.png

如果提示c'ommand not found可以通过如下命令安装

sudo easy_install pip

appium-python-client

appium-python-client 是让 python 连接 appium 服务的一个驱动,也就是一个 python 语言封装和 appium api 通讯的一个库。
安装方法:

pip install Appium-Python-Client

验证:


image.png

引入webdriver模块不报错。

测试脚本

至此我们的ios测试环境已经部署的差不多了,接下来就用脚本进行测试吧。

  • 通过xcode给真机构建wda
  • 启动appium服务(有无界面版均可)
  • 编写脚本,通过入口参数连接至appium
  • 执行脚本
# coding=utf-8

from appium import webdriver
import time

class Appium:
    # 启动app
    def __init__(self):
        desired_caps = {}
        desired_caps['platformName'] = 'iOS'  # 设备系统
        desired_caps['platformVersion'] = '12.3.1'  # 设备系统版本
        desired_caps['deviceName'] = 'WANG的 iPhone'  # 设备名称
        desired_caps['bundleId'] = 'com.xxx.xxx'  # 测试app包名
        desired_caps['udid'] = 'xxxxxx-xxxxxxxx' #设备id
        desired_caps['automationName'] = 'XCUITest'  # 测试框架 
        desired_caps['noReset']='true' # 保留app的登录状态
        desired_caps['xcodeSigningId']='iOS Developer'
        desired_caps['xcodeOrgId']='aaaaa' # 团队id
        desired_caps['newCommandTimeout']=3600
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)  # 保持端口号和appium服务端口一致
        # 使用隐式等待或者显示等待,尽量减少time.sleep强制等待的使用提高脚本执行速度。
        self.driver.implicitly_wait(5)

    def test(self):
        # 点击一个id定位的元素
        self.driver.find_element_by_accessibility_id("").click()
        # 此处使用time.sleep是为了能让肉眼区分操作。
        time.sleep(1)
        # 点击一个xpath定位的元素
        self.driver.find_element_by_xpath("").click()
        time.sleep(1)
        # 给输入id定位的输入框传值
        self.driver.find_element_by_accessibility_id("").set_value("iostest")
        time.sleep(1)
        # 截图保存到当前文件
        self.driver.save_screenshot('./1.png')
        time.sleep(2)
        # 关闭app
        self.driver.close_app()


if __name__ == '__main__':
    a =Appium()
    a.test()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容