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

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

真机连接效果如下:


mac系统下搭建ios自动化测试环境(appium+python)_第1张图片
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,下面两个都可以,下载需要注册账号。

mac系统下搭建ios自动化测试环境(appium+python)_第2张图片
JDK.png

mac系统下搭建ios自动化测试环境(appium+python)_第3张图片
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 #[email protected]可指定安装版本

安装appium-doctor检查appium环境。

cnmp install -g appium-doctor

终端运行appium-doctor --ios


mac系统下搭建ios自动化测试环境(appium+python)_第4张图片
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文件。


    mac系统下搭建ios自动化测试环境(appium+python)_第5张图片
    image.png
  2. 首先打开Xcode-performance-account登录你的AppleID (我用的公司开发者账户,如果你是个人账户你就百度解决证书的问题)
  3. 在wdaLib General设置中选择自动签名,选择你的公司team。bundleid 是APP的唯一标识符,直接问开发获得。


    mac系统下搭建ios自动化测试环境(appium+python)_第6张图片
    image.png

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


    mac系统下搭建ios自动化测试环境(appium+python)_第7张图片
    image.png

    packaging 中的project bundleid 和之前填写的是否一致。
    mac系统下搭建ios自动化测试环境(appium+python)_第8张图片
    image.png

    signing签名是否正确


    mac系统下搭建ios自动化测试环境(appium+python)_第9张图片
    image.png
  4. 在wdaRunner General中设置自动签名,如果报错提示 Try again ,不要着急,先设置build setting。


    mac系统下搭建ios自动化测试环境(appium+python)_第10张图片
    image.png

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


    mac系统下搭建ios自动化测试环境(appium+python)_第11张图片
    image.png

    设置签名
    mac系统下搭建ios自动化测试环境(appium+python)_第12张图片
    image.png
  5. 连接上你的水果机,Scheme选择wdarunner,destination选择你的真机。


    mac系统下搭建ios自动化测试环境(appium+python)_第13张图片
    image.png

    mac系统下搭建ios自动化测试环境(appium+python)_第14张图片
    image.png
  6. 点击左上角三角形进行构建,首次构建可能会要求你输入访问钥匙的密码,输入你的账户密码即可(我输入的是开机密码),提示build succeeded。然后点击-product-test进行将wda安装到真机。安装完成后在真机的safari浏览器输入 127.0.0.1:8100/status 显示如下则表示安装成功。


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

    服务开启成功的界面如下图,右上角的三个方框的含义分别是:建立inspector session(用于获取真机页面元素);导出appium运行日志;关闭appium服务。
    mac系统下搭建ios自动化测试环境(appium+python)_第17张图片
    image.png

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


    mac系统下搭建ios自动化测试环境(appium+python)_第19张图片
    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

验证:


mac系统下搭建ios自动化测试环境(appium+python)_第20张图片
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()

你可能感兴趣的:(mac系统下搭建ios自动化测试环境(appium+python))