Bob's Blog

Web开发、测试框架、自动化平台、APP开发、机器学习等

返回上页首页

openstf支持ios设备和问题解决



在这里主要介绍的是openstf支持ios设备。因为openstf原版是只支持Android设备,不过在实际工作中难免遇到有iOS设备的需求,因此需要做二次开发以达到两种平台设备的共同存在。

本文介绍: 1) 环境配置 2) 代码修改  3)问题解决

下图是支持了iphone8 Plus的截屏。

1) 环境配置

ios需要mac机。(目前有个开源项目tidevice可以支持在windows或linux上使用,不过需要先在mac上配置好webdriveragent,但我未尝试所以仅记录该工具)

在mac上需要安装一些环境以支持ios设备,并且需要结合到自动化测试中:

brew install usbmuxd
brew link usbmuxd
brew install libimobiledevice
brew install ideviceinstaller
brew install ios-webkit-debug-proxy
brew install ios-deploy
brew install carthage
brew install graphicsmagick zeromq protobuf yasm pkg-config
brew install node
npm install -g appium
npm install -g appium-doctor
appium-doctor --ios

如果需要做iphone上的自动化测试,记得安装xcode。

在appium的目录下有webdriveragent,需要build和test,安装后的路径是/usr/local/lib/node_modules/appium。

在其中的目录下node_modules/appium-webdriveragent, 运行./Scripts/bootstrap.sh。

运行完成后,用xcode打开WebDriverAgent.xcodeproj。

后续步骤可以参考这个链接的内容:https://testerhome.com/topics/7220。

与android有些不同,没有android设备那么方便。虽然也可以实现在统一的平台上分配借用归还设备以及远程操控,但是在自动化测试上有所区别。android可以用adb connect来将在stf上借用到的设备连接到本机,并利用本机环境运行自动化测试,这在执行分布式测试时是比较方便的,不同的设备连接到不同的测试机并执行脚本;但对ios设备则不行,于是需要把stf平台连接到ios设备的那台机器配置为一台测试机(无所谓主从机),然后脚本被分配到该测试机上运行。

2) 代码修改 

已经写过两篇文章是介绍openstf了,包含了环境搭建和自动操作:openstf环境搭建和问题解决 ,openstf与appium集成以自动化操作远程手机设备 。

对于openstf的更改,之前已经有高手钻研过了并开放了源码: https://github.com/mrx1203/stf;他是修改了前端页面和后端逻辑,目前我只需要后端的支持,于是我在openstf原版最新代码(Sep 18, 2019)的基础上,按照这位高手的思路只修改了后端,提交到自己fork的代码中单独的分支里:https://github.com/bobjiangps/stf/tree/ios。

目前可以启动,但是还是有点问题,我会一一解决并记录在这里;相关代码修改的说明会在之后更新。后续也会按照自己需要来修改前端。

3)问题解决

2.1)如果有二次开发本地编译时出现错误提示:'Could not locate the bindings file ... zmp.node' , 那么可以卸载stf所有并删除node_modules文件夹再重新安装:npm uninstall -g stf; rm -rf node_modules; npm install; npm link. 如果这样做还是出现了提示,我试过重新全局安装后再卸载,再本地安装就可以用了。

2.2) 在连接了iphone并启动stf后,为iphone准备的过程中运行idevicescreenshot出现错误提示: 'Could not start screenshotr service! Remember that you have to mount the Developer disk image on your device if you want to use the screenshotr service.' 那么可以检查iOS的版本是否在xcode的支持范围内,我有一个较新版本iOS的手机出现这种提示,换了较老版本的iOS的手机后不再出现错误提示,工作电脑上的xcode太老了还是版本9.2支持到iOS 11.2;另还有种方法,在'/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/'中将最高能支持的版本文件夹复制出来,再命令为需要的iOS版本号,接着再运行类似'ideviceimagemounter /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/12.4.1/DeveloperDiskImage.dmg  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/12.4.1/DeveloperDiskImage.dmg.signature' 。

下一篇:  python做web开发时uWSGI和nginx的作用和区别
上一篇:  为Django网站增加访客记录功能

共有1条评论

添加评论

Anony
2020年6月9日 17:21
为啥都喜欢重复造轮子, 直接用t-mobile的支持模块不香吗