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优秀在哪里呢?

  1. ATX依赖比较少,安装快,上手也快
  2. 可以测试第三方应用,比如微信,网易新闻之类
  3. 更新方便,可以使用pip直接更新应用
  4. 集成图像识别,可以解决仅靠UI无法定位识别的问题
  5. 集成测试报告
  6. 由知名企业网易的游戏测试开发团队开发(其实就是我们开发的),可以比appium更及时的响应需求,还可以用中文交流和沟通。

安装

你一定需要一台mac,因为还需要xcode,最好不要用黑苹果,比起解决黑苹果遇到的问题所花的时间,你还不如直接弄台mac呢。

WDA支持模拟器和真机,你若是能把真机的安装搞定了,模拟器肯定也是没问题的。
iPhone手机不需要越狱,所以用自己的手机就可以。

Mac上的软件最好全部用brew安装,省心省力。

请根据 https://github.com/facebook/WebDriverAgent 上的描述,将WebDriverAgent安装到手机上,直到发现手机上多了一个名叫WebDriverAgent的App,就说明安装成功了。熟话说一张图片胜千言,如果是一张gif图,是不是就天下无敌了。WDA的启动方式参考我的截图

ATX 系列-如何测试网易云音乐 (iOS 篇)

命令行的话可以用这个命令

xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=$(idevice_id -l)" test

$(idevice_id -l) 是为了方便获取连接手机的UDID的一种简写

随后打开127.0.0.1:8100/inspector 这个地址,就可以看到一个酷炫的界面(我来截个图)
ATX 系列-如何测试网易云音乐 (iOS 篇)
左边屏幕图像,右边具体的元素信息,所有这些东西都是我们写脚本的时候需要用到的。
下面需要安装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. 打开网易云音乐
  2. 使用网易通行证帐号登录
  3. 输入用户名密码,确认登录
  4. 进入账户设置,跳转到退出登录按钮
  5. 点击退出登录,并点击确认按钮

相应的代码

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,用浏览器打开,效果如下,这里为了方便说明,只截了几个图(实际的报告也比这个详细点)

ATX 系列-如何测试网易云音乐 (iOS 篇)
ATX 系列-如何测试网易云音乐 (iOS 篇)
ATX 系列-如何测试网易云音乐 (iOS 篇)
ATX 系列-如何测试网易云音乐 (iOS 篇)
ATX 系列-如何测试网易云音乐 (iOS 篇)

到这里,介绍就结束了。如果你真的打算做自动化,可能还需要看更多的资料,不要担心,不要害怕,虽然成功的道路有一些坎坷,但成功的喜悦也难以忘怀。

相关项目

  • https://github.com/codeskyblue/AutomatorX
  • https://github.com/openatx/facebook-wda

关于

Author: hzsunshx 2016-08-10

* 注:本文来自网络投稿,不代表本站立场,如若侵犯版权,请及时知会删除