• Android自动化测试


    MonkeyRunner介绍:

    MonkeyRunner是Google提供的一个基于坐标点Android黑盒自动化测试工具。

    Monkeyrunner工具提供了一套API让用户/测试人员来调用,调用这些api可以控制一个Android设备或模拟器,而不需要了解对应的源码。

    有了Monkeyrunner,我们可以编写python脚本来控制apk包的安装和卸载、启动app、向app发送各种动作事件、截取图片并保存。

    Monkeyrunner与Monkey的区别:

    Monkey是通过adb shell命令,发送一系列随机的模拟事件,主要用来做压力测试;

    MonkeyRunner则可以通过api来产生特定命令和事件来控制设备和模拟器。

    MonkeyRunner所具有的特点:

    支持多设备: API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。

    功能测试: monkeyrunner可以为一个应用自动跑一次功能测试(自顶向下)。您提供按键或触摸事件的输入数值,然后通过截屏查看结果。

    回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。

    可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner API之外,您还可以使用标准的Python os和subprocess模块来调用如adb这样的Android工具。 您还可以向monkeyrunner API中添加您自己的类。

    注意点:

    monkeyrunner工具使用Jython(使用Java编程语言的一种Python实现,并不是Python),虽然脚本需保存为.py文件,但却不能使用python **.py来执行(会报找不到MonkeyRunner模块),必须使用monkeyrunner **.py命令来执行

    官方一个简单的MonkeyRunner的例子

     1 # python引入monkeyRunner模块
     2 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
     3 # 连接设备, 获得一个MonkeyDevice对象
     4 device = MonkeyRunner.waitForConnection()
     5 # 安装apk包. 返回值是boolean,可以判断是否安装成功
     6 device.installPackage('myproject/bin/MyApplication.apk')
     7 # 设定一个有效的测试程序包名
     8 package = 'com.example.android.myapplication'
     9 # 设定测试程序包名下的一个Activity名
    10 activity = 'com.example.android.myapplication.MainActivity'
    11 # 设定程序入口
    12 runComponent = package + '/' + activity
    13 # 启动应用程序
    14 device.startActivity(component=runComponent)
    15 # 按下手机的菜单键
    16 device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)
    17 # 截图
    18 result = device.takeSnapshot()
    19 # 保存截图
    20 result.writeToFile('myproject/shot1.png','png')

    从上面的实例中我们可以看出使用monkeyrunner测试应用程序的具体步骤为

    1、先从from.android.monkeyrunner中导入三个api

    2、连接设备,等待设备连接并返回连接的设备

    3、安装测试程序包(可写绝对路径),安装完毕后会返回布尔型变量,可通过此变量,写一个if语句,判断是否安装成功

    4、设置安装程序包名和Activity名

    5、通过包名/Activity来启动应用程序

    6、执行一系列的touch、drag等事件

    7、截图保存

    8、截图对比samas,判断结果


    基于坐标点如何处理不同分辨率的设备

    如320*480的,怎么移植到480*600的上面?

    device.touch(340,580,'DOWN_AND_UP')

    320/x = 480/newx, x = 340

    480/y = 600/newy, y = 580

    这样就能求得一个比例关系了,用这个比例关系做一个类似宏替换就行,代码基本不用动;甚至可以写一个方法,获取到像素后,与基础的计算后,直接替换即可。

    除以上方式,还可以运用hierarchyviewer获取控件,通过控件找到坐标。缺点:要开root,4.1.2以下要开root。注意4.1以上版本用uiautomatorviewer不需要root也可以获取。

  • 相关阅读:
    js保存图片至本地
    ArrayLike
    key的作用
    react Video event
    react中字符串换行
    react打包后找不到静态文件
    2020软件工程第三次作业
    003 Longest Substring Without Repeating Characters
    002addTwoNumbers
    001twoSum
  • 原文地址:https://www.cnblogs.com/dtest/p/4155427.html
Copyright © 2020-2023  润新知