android测试手机租赁,在 Android 手机内执行 UI 自动化测试

前言

前一段时间,已经完成借助ATX执行 UI 的一系列操作,然后得到我们所需的数据和结果,最后展示。

完成部署之后,一直觉得脚本的触发和执行比较依赖 Jenkins,特别是跑步性能测试经常需要跑 4 个小时左右,在这个时间段内会占用 Jenkins 某个 Slave 的使用,最重要的是,我们 Jenkins 会无缘无故的出现问题,如果模拟跑步没有执行完毕,那么本次执行的 Job 就不能正常收集到。

这个时候,我们老大提醒我,如果让 Python 脚本脱离 PC,直接运行在手机端内,是不是更好?

由于我们的脚本特别简单,上一帖子已经有过介绍,然后需要再次感谢@codeskyblue,atx-agent 真的是一个非常好用的库。用 Go 语言实现的类似一个服务端,Push 安装到手机内,接收一系列命令执行 UI 方面的动作。

这个时候有两个思路,

Busybox,然后通过 curl 命令组装的 shell 脚本实现对 UI 的操作,

QPython 或者 PythonForAndroid,由于 PythonForAndroid 找不到最新的 APK,QPython 社区更新时间比较近。选择 QPython。

那么站在巨人的肩膀上,通过 QPython 实现在手机端执行跑步性能测试所需的 UI 自动化动作。

QPython

QPython 是一个能让安卓手机运行和编写 Python 的 APP,到网上下载 APK 安装或者在 GOOGLE PLAY 搜索安装即可,我在 Github 找到下载链接

下载qpython-release.apk,然后使用 adb install 安装即可。

安装好之后,由于 uiautomator2 的库依赖 huamanize 和 requests,打开 QPython,点击 QPYPI,然后点击 INSTALL WITH PYTHON'S PYPI,分别执行:

pip install requests

pip install humanize

手机端 QPython 中 script 的路径

经过观察 QPython 中脚本路径在这个下面:

/storage/emulated/legacy/qpython/scripts

由于 uiautomator2 的库很简单,我就直接复制放在整个脚本执行目录里面,这样就不用安装了。

代码结构如下:

7c7250c79d67c5eec08ea2287b2e61f6.png

由于还未知道如何在 QPython 内执行 Nose 测试框架,重改了一下之前的 UI 自动化的部分代码,只是作为一个 demo,所以特别简单:

#coding=utf-8

import uiautomatorX as uiautomator2

import time

packagename = 'com.xx'

activity = 'com.xxx'

packagename_gps = 'com.xxxxx'

activity_gps = 'com.xxxxx'

uiautomator2.DEBUG = True

driver = uiautomator2.connect('http://localhost:7912')

driver.app_start(packagename_gps, activity=activity_gps)

time.sleep(5)

driver.app_start(packagename, activity=activity)

time.sleep(5)

def teardown():

exit_run_module()

driver.app_stop(packagename)

driver.app_stop(packagename_gps)

def exit_run_module():

driver(resourceId='running_button_change_mode_to_normal').click()

driver(resourceId='pause_button').long_click()

if driver(resourceId='finish_button').exists:

driver(resourceId='finish_button').click()

else:

raise Exception(u"出错了,没有结束按钮")

# print self.driver.dump_view()

driver(text=u'确定').click()

def test_run():

time.sleep(5)

if driver(text=u'暂不升级').exists:

driver(text=u'暂不升级').click()

driver(text=u'运动').click()

driver(text=u'户外跑').click()

if driver(resourceId='running_button_change_mode_to_normal').exists:

driver(resourceId='running_button_change_mode_to_normal').click()

else:

raise Exception(u"出错了,不在跑步地图界面")

time.sleep(30)

driver.screenshot('run_end.png')

if __name__ == '__main__':

test_run()

teardown()

先将代码通过执行 adb push xxx /storage/emulated/legacy/qpython/scripts。

这样在 QPython 内,点击文件,点击 scripts,然后执行。如图所示。

c52c5d0c966872d69c46a9b8bc75d094.png

写在最后

QPython 给了我们实现 UI 自动化更多的可能,也能更大程度的提高 UI 执行的稳定性。

后续很多细节需要完善。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值