ATX 系列-如何测试网易云音乐 (iOS 篇)
本帖已被设为精华帖!,
名词简称
- ATX:AutomatorX简称,专门为手机自动化而生。
- WDA: WebDriverAgent的简称,是Facebook为苹果开发的一个自动化测试框架
前言
关于iOS的自动化可用的框架不是很多,黑盒的更少,不过好在还是可以搞的,除了苹果自动的UIAutomation,另外一个新出的测试框架就是WebDriverAgent(由鼎鼎大名的Facebook出品)。目前只开放出来了HTTP的请求协议,Client库的代码都需要自己实现,但这难不倒我们。
经过一段时间的努力,纯python版的WDA库就被我们写出来了。
目前项目的地址 https://github.com/openatx/facebook-wda
Balabala这么久,可能更多的人还是更关心怎么使用吧。道路稍微有点艰辛,不过比Appium的iOS自动化要简单的多。
可能还是有人会问ATX跟Appium到底什么关系,我负责任的说,没有任何关系,这是两个不同的测试框架,ATX是用Python写的,而Appium主要是Nodejs写的。当然区别不止这么点。
那ATX比Appium优秀在哪里呢?
- ATX依赖比较少,安装快,上手也快
- 可以测试第三方应用,比如微信,网易新闻之类
- 更新方便,可以使用pip直接更新应用
- 集成图像识别,可以解决仅靠UI无法定位识别的问题
- 集成测试报告
- 由知名企业网易的游戏测试开发团队开发(其实就是我们开发的),可以比appium更及时的响应需求,还可以用中文交流和沟通。
安装
你一定需要一台mac,因为还需要xcode,最好不要用黑苹果,比起解决黑苹果遇到的问题所花的时间,你还不如直接弄台mac呢。
WDA支持模拟器和真机,你若是能把真机的安装搞定了,模拟器肯定也是没问题的。
iPhone手机不需要越狱,所以用自己的手机就可以。
Mac上的软件最好全部用brew安装,省心省力。
请根据 https://github.com/facebook/WebDriverAgent 上的描述,将WebDriverAgent安装到手机上,直到发现手机上多了一个名叫WebDriverAgent的App,就说明安装成功了。熟话说一张图片胜千言,如果是一张gif图,是不是就天下无敌了。WDA的启动方式参考我的截图
命令行的话可以用这个命令
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=$(idevice_id -l)" test
$(idevice_id -l)
是为了方便获取连接手机的UDID的一种简写
随后打开127.0.0.1:8100/inspector 这个地址,就可以看到一个酷炫的界面(我来截个图)
左边屏幕图像,右边具体的元素信息,所有这些东西都是我们写脚本的时候需要用到的。
下面需要安装python库atx,还有一些额外的依赖需要安装在mac上,直接参考github上的指引比较好一些。指引我也是花了不少时间去写的。
https://github.com/codeskyblue/AutomatorX
最后要说的是输入法,测试之前需要将输入法却换到系统默认的英文输入法。某狗输入法是不可以的。
一切就绪后我们就可以开始写脚本了
脚本编写
首先要知道应用的bundle_id,如果不知道,可以使用命令 ideviceinstaller -l 获取所有已安装的应用,进而把应用的bundle_id查出来。
com.netease.cloudmusic, "464", "网易云音乐"
脚本其实很好写,来段很简单的代码,用来测试下WDA是否正常工作了
# coding: utf-8
import atx
d = atx.connect('http://localhost:8100', 'com.netease.cloudmusic')
print d.status()
这里我们把DEVICE_URL写成了localhost:8100,如果是真机的话,需要根据实际情况改成对应的手机IP和Port。
下面我们使用脚本来完成一个 账户登录登出的例子,将其具体化成以下几步
- 打开网易云音乐
- 使用网易通行证帐号登录
- 输入用户名密码,确认登录
- 进入账户设置,跳转到退出登录按钮
- 点击退出登录,并点击确认按钮
相应的代码
1 import atx
2 d = atx.connect('http://localhost:8100', platform='ios')
3 d.start_app('com.netease.cloudmusic')
4 d(text=u'网易邮箱').click()
5 d(xpath=u"//TextField").set_text("someone@163.com\n")
6 d(xpath=u"//SecureTextField").set_text("password")
7 d(text=u'登录').click()
8 d(text=u'帐 号').click()
9 d(text=u'退出登录').scroll().click()
10 d(text=u'确定').click()
有几行需要特殊说明下
- 第5行,本来应该是可以用 d(class_name=”TextField”)来查找元素的,似乎WDA还在完善中,这种方法并不好使,只能用xpath,set_text后面多出来一个换行符是为了隐藏掉自动补全部分,防止其影响密码的输入
- 第8行中的帐号中间需要有一个空格,不如会出现匹配不到的错误
- 第9行多了一个scroll() 它的功能是滑动屏幕是其按钮可见
测试过程报告
因为ATX集成了测试报告,所以生成响应的测试报告也很简单
在第3行代码之后加入以下代码
from atx.ext.report import Report
rp = Report(d)
rp.patch_wda()
再次运行一遍代码,在当前目录下就可以看到一个report目录,里面有一个index.html,用浏览器打开,效果如下,这里为了方便说明,只截了几个图(实际的报告也比这个详细点)
到这里,介绍就结束了。如果你真的打算做自动化,可能还需要看更多的资料,不要担心,不要害怕,虽然成功的道路有一些坎坷,但成功的喜悦也难以忘怀。
相关项目
- https://github.com/codeskyblue/AutomatorX
- https://github.com/openatx/facebook-wda
关于
Author: hzsunshx 2016-08-10
* 注:本文来自网络投稿,不代表本站立场,如若侵犯版权,请及时知会删除