移动端的自动化测试,最常见的就是Android自动化测试,IOS相较于Android要安全稳定的多,但是IOS也是一个需要测试的方向,作为测试,不认真测一下心里还是过意不去,只是我个人觉得Android的测试优先级会更高,当然Android也更开放,更容易测试;今天这里来一起学习记录下iOS自动化测试要如何来做

1、环境准备

  • 硬件环境

    • Macbook Pro(做iOS测试,Mac是绕不开的,我们依赖的软件环境需要运行在Mac上,必须要有一台Mac本;没有怎么办?买一台就有了~)
    • iPhone、iPad:既然测试IOS软件,那iPhone和iPad也自然不用多说了,虽然Xcode里有虚拟机,但是实际测试还是以真机为准
  • 软件环境
    • Xcode:Xcode是苹果官方提供的开发IDE,里面集成了苹果软件开发所需的所有,包括专项的性能测试等,我们做自动化也需要通过它来与设备绑定证书

Xcode下载地址:https://developer.apple.com/download/
下载安装好的图标如下

2、技术方案

2.1 主流框架

先来看目前主流的IOS移动测试框架

  • Appium:目前最常用的APP自动化测试框架,具备跨平台性
  • Calabash-IOS :BDD模式,没有过多的了解使用
  • KIF:KIF 使用 XCTest 框架,需要对Objective—C 、Swift和 XCTest掌握程度较高,这个对测试工程师来说学习成本太大
  • XCTest:苹果官方提供的iOS测试框架,要求同KIF一致
  • WebDriverAgent:由Facebook 推出的一款iOS移动测试框架,也是appium跨平台的底层驱动;WDA本身也是一个完整的基于webdriver协议的框架
  • Uiautomation :在xcode8后废弃

2.2 方案选型

之前的Android自动化我们选择的是appium框架作为底层的驱动框架,当时就介绍说appium的优点之一就是跨平台性,其实也就是因为其底层封装了WebDriverAgent,而我们期望的是:

  • 做一套可以跨平台支持的app测试方案,可以在公司的Android和iOS版本间自由切换测试
  • 并且在编程语言上要是测试工程师常用的Java或Python,降低学习成本

综上原因,那么最终的选择依然是appium

3、落地实践(踩坑)

3.1 App安装

appium官方提供了一个演练的IOSApp,以此为例进行演示:
appium演练example地址:https://github.com/appium/ios-uicatalog

  • 将项目clone到本地后用Xcode打开,注意打开IOS项目要打开以.xcodeproj结尾的文件
  • 插入真机,Xcode上选择真机,在Singing中添加AppleID作为account,生成一个本地的Provisioning Profile和设备上的证书

    踩坑:你可能会遇到如下的错误信息

    Failed to create provisioning profile.
    The app ID "com.appium.apple-samplecode.UICatalog" cannot be registered to your development team. Change your bundle identifier to a unique string to try again.Provisioning profile "iOS Team Provisioning Profile: *" doesn't include the currently selected device "Uzumaki的 iPhone".
    


这是因为你的bundle identifier不唯一导致,将其修改自定义为一个唯一的bundle identifier再尝试即可

  • Xcode中选中Build,Success后在手机中我们可以看到UICatalog已经被成功安装,尝试打开:

    踩坑: 苹果对未在AppStor中上架的App做了限制,默认不受信任,所以我们需要手动将其设置为信任:
    设置-通用-描述文件与设备管理

  • 这个时候再打开App,就可以正常操作运行了

3.2 环境配置

  • 上面介绍了这里是选中appium作为移动测试框架,因此appium相关环境的安装必不可少,具体安装细节可参考另一篇博客:Windows(Win10)、Mac下安装appium
  • 另外还需要几个辅助测试工具和命令
    • 依赖工具包安装:
    brew install --HEAD ideviceinstaller
    brew install --HEAD libimobiledevice
    
    • 查看模拟器列表:instruments -s devices
      运行结果如下,可以看到最前面两行显示的其实是本机的Mac和连接的iPhone真机,剩下的是模拟器
    $ instruments -s devices
    Known Devices:
    user的MacBook Pro [A6791A60-C973-5E1F-AB56-60Cxxx1D8C8E]
    iPhone (2) (12.4.1) [aa3c395a15b4edcc21c4df8f01xxx7ffc307e61f]
    Apple TV (13.3) [5B058A91-DF96-4F33-A0AC-EBFB380261F8] (Simulator)
    Apple TV 4K (13.3) [A8902607-CECF-41D2-B9A2-27BA5F071C5A] (Simulator)
    Apple TV 4K (at 1080p) (13.3) [BE620E4C-47CA-4440-B612-EA7429882325] (Simulator)
    Apple Watch Series 4 - 40mm (6.1.1) [5F4AA1E1-4E6F-444A-9415-E82677D217D7] (Simulator)
    Apple Watch Series 4 - 44mm (6.1.1) [F8F72C70-308C-4466-AD21-2C08D0A992E9] (Simulator)
    iPad (7th generation) (13.3) [A942CAE8-1174-4750-BE5A-BFB53CEB1750] (Simulator)
    iPad Air (3rd generation) (13.3) [09E7731F-5671-4025-8600-B54849071FCD] (Simulator)
    iPad Pro (11-inch) (13.3) [FD89E91B-C186-45C8-B3E2-28163DCE28E0] (Simulator)
    iPad Pro (12.9-inch) (3rd generation) (13.3) [F52FFEE6-3924-43E4-B3F4-01B0924984D0] (Simulator)
    iPad Pro (9.7-inch) (13.3) [F80CDE6E-7D71-4DD2-A6ED-75A369F34448] (Simulator)
    iPhone 11 (13.3) [7EE01CD6-A04C-48B0-B4E1-A07656DCBD0B] (Simulator)
    iPhone 11 Pro (13.3) [0F9B4876-6730-412A-BDB1-2B7385D1269E] (Simulator)
    iPhone 11 Pro (13.3) + Apple Watch Series 5 - 40mm (6.1.1) [ADD82DF7-23F7-4AD0-843F-9BAD6DE5F451] (Simulator)
    iPhone 11 Pro Max (13.3) [9E0FC67A-13D6-4626-8DAD-1393E0E2CFBA] (Simulator)
    iPhone 11 Pro Max (13.3) + Apple Watch Series 5 - 44mm (6.1.1) [B66BF964-2965-4B67-96D9-5828E98CE25B] (Simulator)
    iPhone 6s (13.3) [36540FE6-A996-403E-AA2C-1DBE74F67E88] (Simulator)
    iPhone 8 (13.3) [C8A32676-39BA-4EB0-99A0-7C2C8F91A85E] (Simulator)
    iPhone 8 Plus (13.3) [9B9BC775-9D0E-4B39-B25E-1EC75E289A00] (Simulator)
    
    • 查看真机列表:idevice_id -l
    $ idevice_id -l
    aa3c395a15b4edcc21c4df8f0182a7ffc307e61f
    
    • 安装App:ideviceinstaller -i demo.app
    • 命令行编译(在做持续集成时候可能会用到):
    xcodebuild -scheme UICatalog -target iOS clean build
    xcodebuild -scheme UICatalog -target iOS archive
    

3.3 WebDriverAgent的安装与启动

  • 虽然appium使用WDA作为底层的iOS自动化框架,但是由于版本的更新等原因,可能造成appium本身自带的WDA会有bug,因此为了保险起见,先手动下载facebook的
WebDriverAgent
    facebook WebDriverAgengithub地址:thttps://github.com/facebookarchive/WebDriverAgent

    $ git clone git@github.com:facebookarchive/WebDriverAgent.git
    Cloning into 'WebDriverAgent'...
    remote: Enumerating objects: 18311, done.
    remote: Total 18311 (delta 0), reused 0 (delta 0), pack-reused 18311
    Receiving objects: 100% (18311/18311), 15.69 MiB | 7.00 KiB/s, done.
    Resolving deltas: 100% (6810/6810), done.
    
  • 然后我们进入WebDriverAgent进行编译,在Scripts下有一个bootstrap.sh
脚本,执行它即可
    小技巧: 使用bash -x命令可以输出更详细的执行过程

    踩坑: 安装最后我们可以看到部分依赖安装需要安装Carthage这个东西,如果没注意的话就会造成RoutingHTTPServer部分文件缺失,后面build就会报错

    Test session results, code coverage, and logs:/Users/qinzhen/Library/Developer/Xcode/DerivedData/WebDriverAgent-euroowhgzlpucmekkhluceevrkdj/Logs/Test/Test-WebDriverAgentRunner-2019.12.17_13-59-10-+0800.xcresultTesting failed:'RoutingHTTPServer/RoutingConnection.h' file not found'RoutingHTTPServer/RouteResponse.h' file not found'RoutingHTTPServer/RouteResponse.h' file not foundTesting cancelled because the build failed.** TEST FAILED **
    

    通过命令brew install carthage安装后再执行./Scripts/bootstrap.sh即可

  • 根据WebDriverAgent官网提供的步骤,将参数替换为我们真机的参数后在真机上尝试build

    xcodebuild -project WebDriverAgent.xcodeproj \-scheme WebDriverAgentRunner \-destination 'platform=iOS,name=iPhone (2)' \test
    

    踩坑: 执行完命令后可能会出现如下报错

    $ xcodebuild -project WebDriverAgent.xcodeproj \
    >            -scheme WebDriverAgentRunner \
    >            -destination 'platform=iOS,name=iPhone (2)' \
    >            test
    2019-12-17 09:20:29.973 xcodebuild[30451:2032814]  DTDeviceKit: deviceType from aa3c395a15b4edcc21c4df8f0182a7ffc307e61f was NULL
    2019-12-17 09:20:30.026 xcodebuild[30451:2032862]  DTDeviceKit: deviceType from aa3c395a15b4edcc21c4df8f0182a7ffc307e61f was NULL
    ... //中间内容省略Testing failed:Signing for "WebDriverAgentRunner" requires a development team. Select a development team in the Signing & Capabilities editor.Testing cancelled because the build failed.** TEST FAILED **
    

    从报错信息来看,缺少development team,那么我们回到Xcode,将Automatically manage signing进行勾选后选择一个Team,注意要进入WebDriverAgentRunner中进行设置

    设置好之后又会出现报错,如下:

    这个报错信息就和我们之前提到的一样,bundle indentifler不唯一,保险起见,这里将项目中所有的Targets都进行了修改

  • 修改好之后我们再次build,之前的问题解决了,不幸的是build又fail了,又出现了新的报错:
    Semantic issue: 'assign' property of object type may become a dangling reference; consider using 'unsafe_unretained'
    Parse Issue: Could not build module 'RoutingHTTPServer'
    


    幸运的是在Google上一位外国友人轻描淡写的一句话解决了我的问题(感谢外国友人~)

    没错,我们在报错出双击,进入到报错代码处,将assign改为strong后再次build


    Build succeeded!!!老泪纵横…

  • 最终,再执行
    xcodebuild -project WebDriverAgent.xcodeproj \-scheme WebDriverAgentRunner \-destination 'platform=iOS,name=iPhone (2)' \test
    

    终于在IOS真机上看到了WDA的身影

4、踩坑补充

上面是我所经历的各种坑,也都是我实测过一步步填平的,下面试我认识的小伙伴踩到的坑和填坑方法,作为补充供记录参考

1)执行./Scripts/bootstrap.sh ERROR in ./js/app.js报错

cd
/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgen # js

vi
webpack.config.js




2)执行时候报xcodebuild failed with code 65错误

5、最后

花了很大的功夫和篇幅,记录iOS自动化的准备工作,踩了很多坑,坑不能白踩,后面继续实现iOS的自动化测试落地,欢迎小伙伴来一起探讨:iOS自动化测试(二)-基于appium的实操落地

iOS自动化测试(一)-技术方案、环境配置与疯狂踩坑相关推荐

  1. Alphapose - Windows下Alphapose(Pytorch 1.1+)版本2021最新环境配置步骤以及踩坑说明

    文章目录 1 Alphapose 2 环境配置 2.1 官方安装说明 2.2 Anaconda创建虚拟环境Alphapose 2.3 获取Alphapose仓库 2.4 安装相关依赖库 2.4.1 激 ...

  2. iOS之深入解析多环境配置的实现方案

    一.多 target 形式配置多环境 如下所示,选择工程 TARGETS,新创建一个 targets: 创建完成后,可要发现产生了一个 plist 文件,这个 plist 就是对应新创建的 targe ...

  3. Windows环境下PyTorch_geometric安装踩坑

    Windows环境下PyTorch_geometric安装踩坑 pytorch geometric在windows环境下安装非常恶心,莫名其妙各种报错.本帖针对GCC的编译error提供解决方案. 一 ...

  4. k8s containerd集群配置安装完整踩坑教程

    完整踩坑和精简内容 k8s containerd配置 containerd安装参考 k8s安装参考 环境 两台机器 hostnamectl set-hostname master hostnamect ...

  5. STF环境搭建运行及踩坑记录

    最初是在centos环境上搭建STF,由于种种依赖缺失.nodejs/npm版本不兼容.以及无解的"Segmentation fault (core dumped)"错误,最终还是 ...

  6. Apollo 配置教程以及踩坑总结

    一.Apollo包的介绍 apollo一共三个包:apollo-portal.zip.apollo-configservice.zip.apollo-adminservice.zip 说明: port ...

  7. osx php7 imagick,[PHP] MacOS 自带php环境安装imagick扩展踩坑记录 | 码农部落

    前言 最近学习yii2,在搭建环境后,发现在访问contact页面时报错,如下: "Either GD PHP extension with FreeType support or Imag ...

  8. KVM虚拟化技术及环境配置

    KVM 一.KVM概述 (1)虚拟化产生背景 (2)虚拟化类型 (3)虚拟化优劣势 (4)KVM架构以及原理 二.实验搭建 (1)基础环境 (2)安装KVM (3)设置KVM网络 一.KVM概述 KV ...

  9. iOS自动化测试KIF使用 jenkins相关配置

    一. 配置KIF相关 如果创建项目时没有选择test,则需要单独创建Unit Testing Bundle 注意:KIF必须使用Unit Testing Bundle否则会报错 pod添加KIF,并进 ...

最新文章

  1. 分支优化:neg+sbb算术运算代替逻辑跳
  2. Debian 安装docker
  3. 熬之滴水穿石:JSP--HTML中的JAVA代码(6)
  4. Mac 删除应用卸载后无法正常移除的图标
  5. sqlite性能优化
  6. SketchUp Pro 2021 v21.0.391 草图大师安装说明
  7. 杨丫头,送你只大喵~!!
  8. 启动计算机显示屏没反应,电脑开机后显示器无反应怎么办
  9. java mybatis (批量) 插入实体报多个问号
  10. Android开关按键(左右复选)
  11. ac8265网卡linux驱动,【奋威AC8265笔记本无线网卡使用总结】安装|驱动|任务管理器_摘要频道_什么值得买...
  12. windows终端终端_Windows终端机完整指南
  13. 手把手教你集成华为Image Kit图像裁剪功能
  14. app消息推送服务器端,系统服务:APP消息推送服务
  15. 用C语言中的结构体实现简单的学生成绩管理系统
  16. shiro教程1(HelloWorld)
  17. 高德地图上添加一个点
  18. 苹果笔记本python怎么换行_python怎么换行,我的换行就是执行啊
  19. python写情书_Python程序员用文字加密的方式,给女程序员写情书,一周后牵手回家_TONOW...
  20. matlab印刷汉字识别,如何用MATLAB仿真印刷体汉字识别系统?

热门文章

  1. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解
  2. c语言字符串二维数组如何赋值,C语言二维数组字符串的赋值
  3. Ubuntu18.04安装之后的配置
  4. curl 增加header_关于curl header的数据处理
  5. 中文短文本分类实例十二-HAN(Hierarchical Attention Networks for Document Classification)
  6. ResultJSON
  7. jquery 界面显示软键盘
  8. 配资平台揭秘!主力套路散户的方法?
  9. 在移动应用中实现离线地图和导航功能
  10. 快速排序算法讲解及代码(详细)