主要内容

稳定性测试是什么

Monkey 介绍

自动化 Monkey

稳定性测试是什么

通过随机点击屏幕一段时间,看看 app 会不会奔溃,能不能维持正常运行。

Monkey 介绍

Monkey 是一个命令行工具,它可以运行在我们的模拟器或者设备当中。它可以发送一些伪随机(pseudo-random)的用户事件流,例如点击,触摸,手势等。我们能够使用 Monkey 工具来对我们所开发的应用进行压力测试。Monkey 测试是一种为了测试软件的稳定性,健壮性的快速有效的方法。

Monkey 常用命令

基本语法如下:

adb shell monkey [options]

如果什么参数都不给,monkey 将以无反馈模式进行启动,并把事件任意发送到安装在目标环境下中的全部包。

下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送 500 个伪随机事件:

adb shell monkey -p your.package.name -v 500

根据 Monkey 官网的介绍:https://developer.android.com/studio/test/monkey 可以添加对应的执行参数。

Monkey 的参数都是根据具体需求设定的,主要分为常规类,事件类,约束类和调试类。下面就对这些命令进行说明:

类别

参数

说明

常规类

--help

显示 moneky 参数帮助信息 usage

-v

打印日志信息,每个-v 将增加反馈信息的级别。-v 越多日志信息就会越详细,不过目前最多支持三个-v。Level0:一个-v,除启动提示、测试完成和最终结果之外,提供较少信息。Level1:两个-v,提供较为详细的测试信息,如逐个发送到 Activity 的事件。Level2:三个-v,提供更加详细的设置信息,如测试中被选中的或未被选中的 Activity。

事件类

-s

伪随机数生成器的 seed 值。如果用相同的 seed 值再次运行 Monkey,它将生成相同的事件序列。

--throttle

后面接时间,单位为毫秒,表示事件之间的固定延时(即执行每一个指令的间隔时间),若不接这个选项,monkey 则不会延时

--pct-touch

后面接触摸事件的百分比。(触摸事件是一个 down-up 事件,它发生在屏幕上的某单一位置)

--pct-motion

后面接动作事件的百分比。(动作事件由屏幕上某处的一个 down 事件、一系列的伪随机事件和一个 up 事件组成)。

--pct-trackball

后面接轨迹事件的百分比 (轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。

--pct-nav

后面接 “基本” 导航事件百分比 (导航事件主要来自方向输入设备的上,下,左,右事件)

--pct-majornav

后面接 “主要” 导航事件的百分比 (这些导航事件通常引发图形界面中的动作,如:5-way 键盘的中间按键、回退按键、菜单按键)

--pct-syskeys

后面接 “系统” 按键事件的百分比 (这些按键通常被保留,由系统使用,如 Home、Back、StartCall、End Call 及音量控制键)。

--pct-appswitch

后面接启动 Activity 的百分比。在随机间隔里,Monkey 将执行一个 startActivity() 调用,作为最大程度覆盖包中全部 Activity 的一种方法。

--pct-anyevent

调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。

约束类

-p

如果用此参数指定了一个或几个包,Monkey 将只允许系统启动这些包里的 Activity。如果你的应用程序还需要访问其它包里的 Activity(如选择取一个联系人),那些包也需要在此同时指定。如果不指定任何包,Monkey 将允许系统启动全部包里的 Activity。要指定多个包,需要使用多个-p 选项,每个-p 选项只能用于一个包。

-c

如果用此参数指定了一个或几个类别,Monkey 将只允许系统启动被这些类别中的某个类别列出的 Activity。如果不指定任何类别,Monkey 将选择下列类别中列出的 Activity:Intent.CATEGORY_LAUNCHER 或 Intent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c 选项,每个-c 选项只能用于一个类别。

调试类

--dbg-no-events

设置此选项,Monkey 将执行初始启动,进入到一个测试 Activity,然后不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约束、以及一个保持 Monkey 运行 30 秒或更长时间的非零值联合起来,从而提供一个环境,可以监视应用程序所调用的包之间的转换。

--hprof

设置此选项,将在 Monkey 事件序列之前和之后立即生成 profiling 报告。这将会在 data/misc 中生成大文件 (~5Mb),所以要小心使用它。

--ignore-crashes

通常,当应用程序崩溃或发生任何失控异常时,Monkey 将停止运行。如果设置此选项,Monkey 将继续向系统发送事件,直到计数完成。

--ignore-timeouts

通常,当应用程序发生任何超时错误 (如 “ApplicationNot Responding” 对话框) 时,Monkey 将停止运行。如果设置此选项,Monkey 将继续向系统发送事件,直到计数完成。

一条常用的 Monkey 命令

adb shell monkey -v -v -v -p [PackageName] --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes --ignore-native-crashes --throttle 1000 100000 > monkey.txt

Monkey 的特点

综合上面的描述,使用 Monkey 如下特点:

1.Monky 测试使用的事件流数据流是随机的,不能进行自定义。

2.可对 MonkeyTest 的对象,事件数量,类型,频率等进行设置。

通过自然语言开发 Monkey 自动化脚本

因为命令行运行每次需要修改不同的参数,这样操作不是很灵活,我们可以写段代码来驱动。为了让脚本的可读性更高,我们使用 BDD 的方式来做。BDD 的好处就是可以在自然语言描述中修改参数就能直接运行程序,并可以数据驱动。对于团队协作,或者新人了解业务特别方便。下面借助工具来实现这些操作:

因为脚本用 JavaScript,开发工具可以使用CukeTest(http://cuketest.com)

执行引擎可以借助 adbkit 来实现。步骤如下:

环境搭建

配置 sdk(请自行网上查阅资料本机安装 sdk)

安装 node.js 库 adbkit(https://github.com/openstf/adbkit)

创建项目

打开 CukeTest,文件新建 - 新建项目;项目类型选择基本项目,填写项目信息,完成创建即可。

在项目的根目录下执行npm install adbkit --save 完成 abdkit 库的安装。

关于 abdkit 可以参考 GitHub https://github.com/openstf/adbkit

设置超时时间

由于需要持续长时间按去运行 monkey 脚本检测应用的稳定性,所以设置超时时间长一些

编辑 support/env.js

const { setDefaultTimeout } = require('cucumber')

setDefaultTimeout(1000 * 1000)

编辑 feaure 文件

# language: zh-CN

功能: monkey 稳定性测试

调用monkey脚本 检测手机app原生计算器稳定性

场景: 设计并调用monkey脚本

假如app的package为"com.android.calculator2"

同时设置运行随机数值为10000

当我希望基本导航事件中占用比例为"10"

同时触摸事件在所有事件中所占的比例为"70"

同时每个操作步骤之间的间隔为1000毫秒

并且忽略程序崩溃或者发生异常

那么手机序列号为"192.168.181.101:5555"运行1000次脚本

如果你想修改 monkey 脚本的参数,直接修改 feature 文件中的参数即可。

编写自动化脚本

const { Given, When, Then } = require('cucumber');

var adb = require('adbkit');

var client = adb.createClient();

Your step definitions /

var command = 'monkey'

Given(/^app的package为"([^"]*)"$/, async function (packagename) {

command = command + "-p" + packagename

});

Given(/^设置运行随机数值为(\d+)$/, async function (seed) {

command += "-s" + seed

});

When(/^我希望基本导航事件中占用比例为"([^"]*)"$/, async function (nav) {

command += '--pct-touch' + nav});

When(/^触摸事件在所有事件中所占的比例为"([^"]*)"$/, async function (touch) {

command += "--pct-touch" + touch

});

When(/^忽略程序崩溃或者发生异常$/, async function () {

command += "--ignore-crashes"

});

When(/^每个操作步骤之间的间隔为(\d+)毫秒$/, async function (ms) {

command += "--throttle" + ms

});

Then(/^手机序列号为"([^"]*)"运行(\d+)次脚本$/, async function (deviceid, num) {

command += "" + num;

return client.shell(deviceid, command)

// Use the readAll() utility to read all the content without

// having to deal with the events. `output` will be a Buffer

// containing all the output.

.then(adb.util.readAll)

.then(function (output) {

console.log('[%s] %s', device.id, JSON.stringify(output.toString().trim()))

})

});

运行脚本

点击运行 feature 文件,即可看到 monkey 自动去操作模拟器的计算器

如果要对多个应用做不同的 Monkey 测试,只需要在 CukeTest 中将这个场景一键转换成场景大纲,再添加多行数据就行了。真正实现了通过数据驱动做 Monkey 测试。

欢迎大家一起交流学习。

android驱动测试,Android: 通过 cucumber 驱动 monkey 做稳定性测试相关推荐

  1. 致测试同仁们:让我们做安全测试吧!

    今天,很多软件并没有经过专门的安全测试便运行在互联网上,它们携带着各类安全漏洞直接暴露在公众面前,其中一些漏洞甚至直指软件所承载的核心敏感信息或业务逻辑.这些漏洞一旦被不怀好意者利用,很可能会给企业造 ...

  2. 使用Monkey对apk做稳定性测试

    认识Monkey 官方文档:https://developer.android.com/studio/test/monkey.html 什么是Monkey? Monkey是Android中的一个命令行 ...

  3. 基于Monkey的稳定性测试

    1.背景&简介 1.1 什么是Monkey? Monkey是Android中的一个命令行工具,可以运行在模拟器或实际设备中,它向系统发送随机的用户事件流(按键输入,触摸屏输入,手势输入等),实 ...

  4. 接口压力测试:Postman【Postman通常用于做接口测试,同时也可以用于作为压力测试】、Jmeter【专门做压力测试】、Loadrunner、Apache AB、Webbench

    做开发的同学一定会遇到接口对接,今天介绍两个对接测试两个我个人认为比较好的测试工具 postman和jmeter 1.postman通常用于做接口测试,同时也可以用于作为压力测试 2.jmeter做压 ...

  5. Android测试能不能用monk,使用Monkey对apk做稳定性测试

    认识Monkey 官方文档:http://www.android-doc.com/tools/help/monkey.html 什么是Monkey? Monkey是Android中的一个命令行工具,可 ...

  6. monkey测试linux设备,关于使用Monkey运行脚本测试

    转自: monkey .在pc(Linux)上运行模拟器,两种方法 l可以通过eclipse运行emulator,具体方法略. l可以通过命令行:root@lenovo-desktop:~# emul ...

  7. android fota解决方案,Android智能终端FOTA方案的制作方法

    技术特征: 1.android智能终端fota方案发明专利权利要求 1.一种智能终端连续增量升级实现方法. 2.其特征在于所有任何终端设备可以一次性增量升级到最新版本,也可以对部分版本一次性增量升级到 ...

  8. APP使用monkey进行稳定性测试过程

    APP使用monkey进行稳定性测试记录 Monkey测试是Android自动化测试的一种手段,Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常. ...

  9. app稳定性测试教程——全网最全(测试木头人)

    超详细测试流程及分析 --没有之一 App稳定性测试简介 App的性能测试主要有响应.内存.cpu.FPS.GPU过度渲染.耗电.耗流七个指标,app除了这些性能测试,还有:手机版本号兼容性,屏幕分辨 ...

最新文章

  1. CentOS7安装Composer
  2. thinkphp-join
  3. 家用笔记本电脑什么牌子好_家用直饮水机什么牌子好 家用直饮水机品牌排名...
  4. linux 不关机添加硬盘,完美解决Ubuntu Linux关机异响[SATA硬盘]
  5. (python的坑,坑的我头晕,下行循环写后根遍历)
  6. C/C++学习之路: STL
  7. spring boot 加载application配置文件
  8. 异步请求中jetty处理ServletRequestListener的坑
  9. 【LeetCode笔记】剑指 Offer 57- II. 和为 s 的连续正数序列(Java、滑动窗口、二刷)
  10. sql oracle 递归查询语句,深入sql oracle递归查询
  11. oracle 10g 创建只读用户语法
  12. 使用Android OpenGL ES 2.0绘图之五:添加运动
  13. PhotoShop 各历史版本,你最熟悉哪版?
  14. pytorch:测试GPU是否可用
  15. GCC 的编译配置文件(Spec File)
  16. MATLAB【工具箱下载】汇总
  17. android opengl滤镜,Android OpenGL ES滤镜开发设计
  18. Excel怎么实现表格数据行间随机打乱排序
  19. 单系统 台电x80pro_台电X80 Pro (E6E9)-双系统安装文件平板固件
  20. Python——turtle绘制动漫形象(魔法少女小圆晓美焰,super beautiful)

热门文章

  1. Mysql和Oracle 数据库操作工具类
  2. JavaScript从入门到放弃 - ES6中的对象和类
  3. 小程序开发(12)-之分页封装
  4. root - 计算机术语,root什么意思
  5. python怎么创建子类_Python:如何在创建时使用父类注册所有子类
  6. 我的计算机专业作文800字,我家的电脑作文800字
  7. html计时器组件,vue 计时器组件的实现代码
  8. BugkuCTF-WEB题前女友
  9. cad多线段长度计算总和_没想到啊,我平时用的CAD多段线有这么多学问
  10. php 实现 model层,Thinkhphp5控制器调用的Model层的方法总结