移动端自动化测试解决方案(Appium + Python) - (1) 环境搭建

  最近对iOS自动化测试做了一番探究,希望通过自动化测试更好的去提高公司项目的测试效率 。在网上找了很多的文章和相关资料,都因为时间比较久导致无法实现基本环境的搭建,我在这儿分享给大家分享我的实现过程。
  首先是iOS自动化实现方案。有两篇文章值得你去读一读。

  • 腾讯--移动APP自动化测试框架对比
  • 美团--客户端自动化测试研究
      我简单的对第一篇文章中的内容做一下总结。一个高质量的App不仅仅需要代码规范和逻辑严谨,还需要通过测试去对App的质量进行考核。从分层测试的角度来说,我们的测试你首先是单元测试,然后是接口级测试,最后是UI的测试。文章中列举了安卓和iOS一些常用的测试框架,iOS端常用的XCTest(系统自带用于单元测试的框架)、KIF(Keep It Functional,一款iOS app功能性测试框架)、Kiwi(BDD框架,是对XCTest的一个完整替代)都进行了简单的介绍。
      解释一下BDD和TDD:
  • 行为驱动开发(英语:Behavior-driven development,缩写BDD)是一种敏捷软件开发的技术,BDD的重点是通过与利益相关者的讨论取得对预期的软件行为的清醒认识。它通过用自然语言书写非程序员可读的测试用例扩展了测试驱动开发方法。
  • 测试驱动开发(英语:Test-driven development,缩写为TDD)是一种软件开发过程中的应用方法,由极限编程中倡导,以其倡导先写测试程序,然后编码实现其功能得名。测试驱动开发是戴两顶帽子思考的开发方式:先戴上实现功能的帽子,在测试的辅助下,快速实现其功能;再戴上重构的帽子,在测试的保护下,通过去除冗余的代码,提高代码质量。测试驱动着整个开发过程:首先,驱动代码的设计和功能的实现;其后,驱动代码的再设计和重构。
    如果你的项目对UI自动化测试要求度不高的话,仅仅是需要单元测试和UI测试那么这里提出两套方案:
  • 方案一:xcode自带两个target,XCTest和XCUITest。前者是单元测试后者是UI测试。
  • 方案二:Kiwi+KIF。前者可以进行单元测试,后者则可以进行UI测试。
    Tip:Kiwi和KIF的环境搭建亲测是没问题的。有issue可以底部留言。
      在了解了iOS可用的测试相关工具之后,结合第二篇美团技术团队分享的文章,我们延用其给出的实现项目UI自动化测试方案:Appium + cucumber。下面简单介绍一下两个平台:
      Appium是一个开源的自动化测试工具,支持多种脚本语言,不依赖源码。由于苹果删除了自动化测试框架UIAutomation, Appium改为使用XCUITest框架,使用Facebook的WebDriverAgent驱动。
      cucumber是使用文本描述语言来执行测试用例的工具,使用Gherkin语法,文件以.feature做为后缀。
      Appium + cucumber的方案具有以下优势:
  • Appium底层以webDriverAgent为驱动,跨平台性较高。
  • Appium对webView的支持性更好。
  • Appium元素定位手段更多。
  • Appium对安卓和iOS的接入成本较低,安卓提供apk文件,iOS提供.app文件。
      接下来,我将正式开始说明对Appium和WebDriverAgent的集成,首先是Appium。

前置条件:

  • mac
  • xcode

目前本人运行成功的各工具对应版本,贴给大家参考:

  • appium v1.15.1
  • xcode 11.2
  • iphone6 iOS12.4
  • ruby 2.6.3
  • python 3.8.0

下载步骤:

  1. 下载Appium客户端
    Appium客户端下载地址

  2. 环境配置
    注意,下列步骤如果提示你没有权限,记得在命令前面加 sudo

    • 命令行安装homebrew.
    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    

    安装完毕后执行brew -v查询安装的版本号,我这里是Homebrew 2.1.16

    • 安装libimobiledevice
    brew install libimobiledevice --HEAD
    

    如果你遇到下面的问题Requested 'libusbmuxd >= 1.1.0' but version of libusbmuxd is 1.0.10

    那么你需要进行下列的步骤进行更新升级操作:

    brew update
    brew uninstall --ignore-dependencies libimobiledevice
    brew uninstall --ignore-dependencies usbmuxd
    brew install --HEAD usbmuxd
    brew unlink usbmuxd
    brew link usbmuxd
    
    • 安装carthage
    brew install carthage
    
    • 安装node
    brew install node
    
    • 安装npm
    brew install npm
    
    • 安装ios-deploy
    npm install -g ios-deploy
    

    如果你遇到下面的错误:

    ld: framework not found MobileDevice
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    ** BUILD FAILED **

    错误原因是:xcode的自带的DerivedData和要求的不一致,需要更新,请尝试使用下列语句:

    \rm -fr ~/Library/Developer/Xcode/DerivedData/ios-deploy-*
    npm -g uninstall ios-deploy
    npm -g install ios-deploy@beta
    

    先移除DerivedData里的缓存,然后卸载重装。

    • 安装xcpretty
    gem install xcpretty
    
    • 安装appium-doctor
    npm install -g appium-doctor
    
    • 使用appium-doctor 检查Appium iOS环境环境
    appium-doctor --ios
    

    这里给到我的控制台完整打印信息:

    info AppiumDoctor Appium Doctor v.1.12.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 12.13.0
    info AppiumDoctor  ✔ Xcode is installed at: /Applications/Xcode.app/Contents/Developer
    info AppiumDoctor  ✔ Xcode Command Line Tools are installed in:             
    /Applications/Xcode.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.34.0
    info AppiumDoctor  ✔ HOME is set to: /Users/jackie-pc
    info AppiumDoctor ### Diagnostic for necessary dependencies completed, no fix needed. 
    ###
    info AppiumDoctor
    info AppiumDoctor ### Diagnostic for optional dependencies starting ###
    WARN AppiumDoctor  ✖ opencv4nodejs cannot be found.
    WARN AppiumDoctor  ✖ ffmpeg cannot be found
    WARN AppiumDoctor  ✖ mjpeg-consumer cannot be found.
    WARN AppiumDoctor  ✖ idb is not installed
    info AppiumDoctor  ✔ applesimutils is installed at: /usr/local/bin/applesimutils. Installed       
    versions are: applesimutils 0.7.6
    info AppiumDoctor ### Diagnostic for optional dependencies completed, 4 fixes possible.     
    ###
    info AppiumDoctor
    info AppiumDoctor ### Optional Manual Fixes ###
    info AppiumDoctor The configuration can install optionally. Please do the following     
    manually:
    WARN AppiumDoctor  ➜ Why opencv4nodejs is needed and how to install it:     
    https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/image- 
    comparison.md
    WARN AppiumDoctor  ➜ ffmpeg is needed to record screen features. Please read     
    https://www.ffmpeg.org/ to install it
    WARN AppiumDoctor  ➜ mjpeg-consumer module is required to use MJPEG-over-HTTP     
    features. Please install it with 'npm i -g mjpeg-consumer'.
    WARN AppiumDoctor  ➜ Why idb is needed and how to install it:   
    https://github.com/appium/appium-idb
    

    其中的警告不用管,我这里配置了Xcode Command,如果你需要配置的话,则需要打开你的Xcode,来到偏好设置->location的位置设置command line tools


    xcode command配置.png

Appium底层是由WebDriverAgent驱动的,WebDriverAgent是由Facebook开发的一套开源框架,用于端对端的UI测试,能同时支持模拟器和真机。但是2018年已经停止维护了,所以Appium现在是自己在对WebDriverAgent进行维护。所以,当你下载Appium后其内置的WebDriverAgent地址发生了变化。接下来我们将开始搭建非常重要的一个玩意儿WebDriverAgent,大家做好战斗准备。

具体操作步骤如下:以真机为例,模拟器不需要添加开发者账号

  1. 先去到这一级目录然后里面有一个appium-webdriveragent工程,进入其根目录,执行初始化脚本添加相关的库
/Applications/Appium.app/Contents/Resources/app/node_modules
sh ./Scripts/bootstrap.sh
  1. 修改工程targets下WebDriverAgentLib和WebDriverAgentRunner的bundleID,添加开发者账号。


    修改Lib工程的bundleID.png

    Lib工程添加开发者账号.png

    修改Runner的bundleID.png

    runner工程添加开发者账号.png

    工程选中Runner.png

当你完成了上述的几步操作之后,链接你的手机,执行command + U。

Tips:

  1. 这里如果你去到上述的路径下,发现你的工程的targets没有我贴的图片那么多时或者按照给的操作步骤cmd + u没有通过编译,并且报RunnerHttp文件找不到这个错误时,怎么办?

首先检查是否有执行脚本命令,还是不行则说明你的WebDriverAgent工程可能不是最新的,你需要去下载由Appium自己维护的WebDriverAgent

  1. 如何检验你的webDriverAgent确实真机运行成功了呢?

当你运行成功,xcode控制台会输出一条http地址,将其用浏览器加载后会返回一段json数据。因为Appium本身就是通过发送json数据和你的app进行通信的,能返回json数据说明你的WebDriverAgent运行成功了,可以支持真机,然后你的手机上应该会出现一个WebDriverAgent的工程。

至此,Appium和WebDriverAgent的搭建算是完成了,应该会松一口气。接下来轻松一下,可以把Appium跑起来玩玩,步骤是:

  1. 先把WebDriverAgentRunner编译在手机上,再把待测试的工程运行在手机上。
  2. 启动Appium,点击start sever v1.15.1,点击放大镜(start inspector session),配置测试相关信息。有两种方式:Desired CapabilitiesJSON Representation,任选一种进行配置。下面是Appium真机配置界面:
    appium启动配置.png

    这里的配置作用是让Appium知道是哪台手机运行哪个App,我贴出JSON Representation的代码:
{
  "bundleId": "",
  "platformName": "iOS",
  "platformVersion": "12.4",
  "deviceName": "iPhone 6",
   "automationName": "XCUITest",
   "clearSystemFiles": "True",
   "udid": ""
}

这里如果你是测试人员,上述相关信息请找开发要,然后手机信息从手机的通用- 关于本机里面找即可。配置好后点击start session进行相关操作。下面我贴出start session后的界面和相关按钮作用:

运行appium.png

在搭建好Appium的环境后,我们需要用一种脚本语言编写自动化测试脚本,这里我们选择python语言。关于使用Python同样地也需要搭建环境,那么接下来安装python3环境。

安装步骤:

  • 安装方式一:官网下载安装包进行安装

去到python官网下载最新版本的python安装包,建议使用3.6以上版本。

  • 安装方式二:命令行通过包管理工具homeBrew进行安装
    1. 查看python版本
    brew search python3
    
    1. 安装python3
    brew install python3
    
    1. 安装成功后查看安装的Python版本
    python3 --version
    

值得注意的一点是,mac系统自带了一个Python的2.7的版本,我们如果安装Python3之后为了方便我们最好是把当前的Python运行环境指向Python3。所以,指向Python3的步骤是:

  1. 修改 .bash_profile文件。cmd + shift + G前往文件夹,输入
~/.bash_profile

打开.bash_profile文件进行编辑,添加

# Setting PATH for Python 3.7

# The orginal version is saved in .bash_profile.pysave

PATH="/Library/Frameworks/Python.framework/Versions/(填指向的版本号)/bin:${PATH}"

export PATH                                                                  
//增加这几行内容(如果不是通过brew,而是通过官网下载安装,这里会默认已经添加了,就退出不用修改了)
  1. 同样的操作去到bashrc文件,进行编辑。
alias python2='/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7'

alias python3='/Library/Frameworks/Python.framework/Versions/3.8/bin/python3.8'

alias python=python3

//添加以上三行 , 如果不知道自己的python3安装路径,可以用 which python3 命令进行查看路径
  1. 使得修改的 bash_profile文件 和 bashrc文件生效
命令行分别执行:
source ~/.bash_profile
source ~/.bashrc
  1. 最后查看当前python版本
python -V

这里如果操作成功会看到显示的是你安装的最新的Python版本。

Tips:
简单解释下什么是homebrew。

Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。
援引官方的一句话:又提示缺少套件啦?别担心,Homebrew 随时守候。Homebrew —— OS X 不可或缺的套件管理器。

什么是Carthage

Carthage与CocoaPods类似,都是用于在iOS/OS X环境下管理第三方的工具。Carthage 使用于 Swift 语言编写,只支持动态框架,只支持 iOS8+的Cocoa依赖管理工具。

参考链接:
Appium+Python3+iOS真机环境搭建
移动端UI自动化测试--Appium和Cucumber的完美结合
美团客户端自动化测试研究
如何在Mac上安装更新的Python 3.6.x

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