python获取ios手机内存_使用 Python 库 facebook-wda 完成网易云音乐 iOS 客户端的自动化测试 (示例)...

简介

facebook-wda是ATX项目下面的一个子库,专门提供iOS应用的自动化测试,可以通过ATX使用这个库,当然也可以单独拿来使用。

这篇文章介绍了如何用facebook-wda这个python库来完成一个普通App应用的测试,希望通过这个篇文章,能让iOS的测试或开发人员,更方便的回归测试自己的应用。开发出质量更高的应用。

选用 网易云音乐 作为被测应用,纯粹是因为我平常用网易云音乐听歌比较多,比较喜欢这款应用

facebook-wda简要说明

facebook-wda这个Python库,通过直接构造HTTP请求直接跟WebDriverAgent通信。它是一个非常短小精悍的一个库,并不像appium、macaca还有一个中间转发服务,支持这么多的语言。用它做测试,Python你必须要会。

虽然代码比较精炼,但是能完成的功能却非常强大。你能在appium里面找到的功能,这个库有提供,找不到的功能,这个库也有提供。

安装准备

在写代码之后,你需要把下面列的东西都准备好。

成功安装后,浏览器访问 http://localhost:8100/status会看到一个json字符串

安装Python库(目前这个版本的库支持py2.7~3.5之间的版本)

pip install --pre facebook-wda

小试牛刀:完成网易云音乐的自动登陆

手机上先安装上一个网易云音乐

通过ideviceinstaller -l 或者其他工具查找到网易云音乐的bundleId com.netease.cloudmusic

网易帐号我先用两个静态变量代替 USERNAME, PASSWORD

先贴一段代码,看注释理解的比较快一些

首先是设备连接和弹窗处理

import wda

bundle_id = 'com.netease.cloudmusic'

c = wda.Client('http://localhost:8100') # DEVICE_URL

s = c.session(bundle_id) # 启动应用

# 处理不知何时就会突然弹出的警告框

def alert_callback(session):

btns = set([u'不再提醒', 'OK', u'知道了', 'Allow', u'允许']).intersection(session.alert.buttons())

if len(btns) == 0:

raise RuntimeError("Alert can not handled, buttons: " + ', '.join(session.alert.buttons()))

session.alert.click(list(btns)[0])

s.set_alert_callback(alert_callback)

变量s就代表wda的Session了,下面通过获取到的Session去完成登录

def netease_login(s):

# 已经登录直接跳过

# 开头有2s的广告,所以这里需要等待3s

if s(name=u'发现音乐', type='Button').wait(3, raise_error=False):

# Already logged in

return

# 点击邮箱登录,输入帐号密码,验证是否登录成功

s(name=u'网易邮箱').tap()

s(type='TextField').set_text(USERNAME+'\n')

s(type='SecureTextField').set_text(PASSWORD+'\n')

s(name=u'开启云音乐').click_exists(timeout=3.0)

assert s(name=u'发现音乐', type='Button').wait(5.0) # 等待5s

netease_login(s)

使用python单测框架pytest来组织测试脚本

最近用了用pytest,感觉比python自带的unittest好用的不少。安装方法 pip install pytest

直接上脚本(为了节省篇幅,我就省略了比较常见的import,包括上面的那个alert_callback,实际写代码的时候你应该加上去)

def setup_function():

# 每次测试之前,保证帐号是登录的

s = c.session(bundle_id)

netease_login(s)

def teardown_function():

s.close() # 一次测试结束,关闭应用

def test_discover_music():

"""

测试 发现音乐->私人FM 中的播放功能

"""

s(name=u'发现音乐', type='Button').tap() # 默认会寻找10s,所以不用担心点不到

assert s(name=u'听歌识曲', visible=True).wait()

s(name=u'私人FM').tap()

assert s(name=u'不再播放').exists

assert s(name=u'添加到我喜欢的音乐').exists

assert s(name=u'00:00', className='StaticText').exists

s(nameMatches=u'(暂停|播放)').tap() # 点击播放后,按钮会变成暂停,这里用正则匹配下

assert s(name=u'00:00', className='StaticText').wait_gone(10.0) # 等待音乐播放,进度条开始走了

def test_my_music():

"""

测试 我的音乐->本地音乐

"""

s(name=u'我的音乐', type='Button').tap()

assert s(name=u'最近播放').wait(2.0)

s(name=u'本地音乐').tap()

assert s(name=u'管理').wait()

s(name=u'播放全部').tap()

保存文件为 test_cloudmusic.py,然后命令行运行测试

$ py.test -vv

============================= test session starts =============================

platform win32 -- Python 2.7.13, pytest-3.2.1, py-1.4.34, pluggy-0.4.0 -- c:\python27\python.exe

cachedir: ..\.cache

rootdir: D:\Workdir\facebook-wda, inifile:

collected 2 items

com.netease.cloudmusic\test_discover_music.py::test_discover_music PASSED

com.netease.cloudmusic\test_discover_music.py::test_my_music PASSED

========================== 2 passed in 23.19 seconds ==========================

pytest会保证调用函数test_discover_music之前把setup_function调用了,在测试结束后把teardown_function调用一次。

PS: 该项目自身的自测代码用的也是pytest

进一步阅读:控件定位

通过访问 http://localhost:8100/inspector可以获取应用的UI图层结构,方便写脚本

比如我们访问到一个控件的属性

直接看着就可以写出代码 s(name=u'听歌识曲', className='Button').tap()

除了这些简单的定位方法还有茫茫多的定位方法。具体查看项目的主页 https://github.com/openatx/facebook-wda 想锻炼下手部肌肉的,还可以顺便点个Star

结束语

这是一个功能完善且代码很鲁棒的库,不好好推广它,实在是对不起代码。有问题或者有使用心得,欢迎发帖讨论或者QQ群里讨论 497460177

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值