iOS 测试 IOS 模拟器多开集成测试和那些坑

hello · 2018年08月22日 · 最后由 hello 回复于 2018年11月13日 · 2109 次阅读
本帖已被设为精华帖!

前言

公司一直没有IOS自动化,搞得很尴尬,个人感觉搞自动测试的,不搞IOS自动化,就像金X,少了重要一点啊。也向领导申请过不止一次,总只都各种原因没有分配机器,不了了之。某天线上IOS出bug了,领导遂一咬牙一跺脚决定,搞IOS自动化,期限一个月!领导的决定总是那么简约而又简单,对我们这些没有摸过MAC的弱鸡来说,IOS自动化0到1,压力山大啊。好在不到一个月,终于搞定了。和向我一样的的弱鸡们分享一下IOS模拟器多开集成测试从0到1中间的各个坑,大神自行绕道吧。

准备

Mac一台:黑苹果我没有玩过,如果你是黑苹果,就先期待你们线上出Bug,借机申请MAc吧。
  1. MAC OS版本:10.13.6
  2. Xcode版本:9.4.1(低版本的不不支持多开)
  3. IOS 11.3 Simulator
Appium测试环境安装:社区里很多帖子自行搜索一下。这里说一下遇到的坑。这个帖子可以参照
  1. WDA编译时,监听一直显示http://10.100.4.232:0host被修改过。localhost被屏蔽删除掉了。解决办法:加个localhost,调查半天,发现电脑的
  2. 依赖软件安装不了,软链接加不上。解决办法:看日志相关路径赋权,chmod -R 777 你的路径
  3. 桌面版appium搞好后,安装命令版appium,运行不起来。安装模拟器里的WDA莫名删除。解决办法:/WebDriverAgent/到各自的目录下去编译一下
在命令行输入 appium 能正常启动,跑你的测试demo可以正常运行。如果不能。集成多开也别想搞了。重新检查第二步 Appium测试环境安装
Java执行命令,启动appium服务(Python语言自动化的朋友,以下简称py,转换一下语言吧)。
  1. 这里说一下一个巨坑,Mac 下java执行命令时,默认用的是系统的/bin/下的指令,所以你在Mac电脑的shell终端下,直接输入appium 可以起动服务,用java的Runtime.getRuntime().exec(commands); 就不行了,总是不是内部命令,或者找不到目录。

2.解决办法:执行的命令写完整路径例:/usr/local/Cellar/node/10.5.0_1/bin/node /usr/local/lib/node_modules/appium/build/lib/main.js

命令启动时,自动编译WDA(多开要自动编译)编译报错如下:
[XCUITest] Launching WebDriverAgent on the device
[XCUITest] Error: Carthage binary is not found. Install using `brew install carthage` if it is not installed and make sure the root folder, where carthage binary is installed, is present in PATH environment variable. The current PATH value: '/usr/bin:/bin:/usr/sbin:/sbin'
[XCUITest] at Object.wrappedLogger.errorAndThrow (/usr/local/lib/node_modules/appium/node_modules/appium-support/lib/logging.js:78:13)
[XCUITest] at checkForDependencies$ (/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/lib/wda/utils.js:70:9)
[XCUITest] at tryCatch (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:67:40)
[XCUITest] at GeneratorFunctionPrototype.invoke [as _invoke] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:315:22)
[XCUITest] at GeneratorFunctionPrototype.prototype.(anonymous function) [as throw] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:100:21)
[XCUITest] at GeneratorFunctionPrototype.invoke (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:136:37)

1.原因,java运行命令时,编译WDA的 carthage 在 '/usr/bin:/bin:/usr/sbin:/sbin'路径下找不到(carthage的软连接,我们通常是在/usr/local/bin/下的)。
2.解决办法:在/usr/bin里创建carthage的软连接。由于Mac系统关键目录开启了保护,通常是直接创建是创建不成功的。
3.重启电脑
4.command + R 进入recover模式(重启过程中一直按着不放)
5.点击最上方菜单使用工具,选择终端
6.运行命令csrutil disable
7.当出现一长串输出信息中有successfully字样,代表关闭成功!
8.重启电脑,打开终端。cd /usr/bin,在/usr/bin里创建carthage的软连接,根据我的安装目录软连接命令是:sudo ln -s /usr/local/Cellar/carthage/0.30.1/bin/carthage carthage

打开Simulator,记录你想打开的模拟器udid,以备多开用。

目前我一台电脑开四个模拟器,开多了怕垃圾机器受不了

capabilitie设置以下几点

capabilities.setCapability("useNewWDA", true);//iOS并发必须要重新装WDA
capabilities.setCapability("wdaLocalPort", getWDAFreePort());//WDA端口
capabilities.setCapability(IOSMobileCapabilityType.BUNDLE_ID, “根据任务运行时取得空闲的模拟器UDID”);

任务管理画面点击任务执行


机器就开始执行了

不会录屏,并行执行的界面贴不上了。

总结

Mac和windows许多地方差别还是挺大的。号称一处编译处处使用的java也只是说说而已。
第一次接触使用Mac各种不熟,弱鸡无力啊。对大神们来说搞这些如探囊取物,对于我这样的弱鸡来说举步维艰,也学会了 rm -rf /*等命令。
好在一个月内搞出来了,虽然领导还是嫌弃进度慢。
要优化的地方还很多,很多坑也许才刚刚开始,期待大神们指点一下,谢谢。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 12 条回复 时间 点赞
思寒(seveniruby) 将本帖设为了精华贴 08月22日 23:56

这个任务管理界面不错,很喜欢。能不能再多贴点图

codeskyblue 回复

我这界面很垃圾的,看大神开源很多东西,给予很多人指导,大神喜欢我私你吧。Q:512433465

rm -rf /*
这个命令很实用!

Jerry li 回复

哈哈哈。是吧。一招搞定一切问题~😂

先mark一下, 好久没动iOS的环境了,这样看来真机是否也支持?

模拟器都支持真机应该问题不大。你们真有钱,可以玩多个真机,我们只能玩模拟器~

sudo 不能丢啊 手动斜眼笑

疯的蜗牛 回复

确实不能丢~😂

大神我也想要你的那个任务管理 怎么弄的 求指导

请教大神是怎么获取空闲的设备的呢?

hello #12 · 2018年11月13日 作者
fhvch 回复

任务管理是自己做的挫功能,基于spring定时任务

hello #13 · 2018年11月13日 作者
jean 回复

空闲设备:设计个设备资源管理表

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册