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

主要内容

稳定性测试是什么

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 自动去操作模拟器的计算器

68f2fb57be00acc1128a60dd8848eb55.gif

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

欢迎大家一起交流学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gazebo 直接获取传感器数据_5个使传感器更简单的技巧

传感器遍布地球表面和周围空间,为世界提供数据。这些廉价的传感器是物联网背后的驱动力之一,也是我们社会现在面临的数字革命。然而,连接到传感器并从传感器获取数据并不总是直截了当或容易的。这里有五个提示,可以帮助工程师第一…

鸿蒙os吃内存吗,终于上手机!华为鸿蒙 OS 2.0 系统:128KB 内存就能跑

终于上手机!华为鸿蒙 OS 2.0 系统:128KB 内存就能跑2020-09-11 10:51:480点赞0收藏0评论9月11日消息,华为昨天下午在东莞松山湖举办了全球开发者大会,本次大会带来了全新的 EMUI 11 系统和备受期待的鸿蒙 OS 2.0 操作系统&#xf…

华为鸿蒙无人驾驶,特斯拉最大的对手竟是华为?Hicar+鸿蒙OS无人驾驶技术不再一家独大!...

原标题:特斯拉最大的对手竟是华为?Hicar鸿蒙OS无人驾驶技术不再一家独大!短短几个月的时间,特斯拉的市值翻了近4倍,对于一个超级企业来说一切都显得那么不可思议,如果把它单纯的看成一家车企,恐…

鸿蒙系统会不会影响游戏,令人担心,鸿蒙系统会不会让人失望?未来难说

如今,一直被炒的沸沸扬扬的鸿蒙系统,终于在2019年8月9日发布了,次日,也就是8月10日,荣耀的智慧屏又带着鸿蒙系统出现了一次,荣耀智慧屏也成为了首次搭载鸿蒙系统的终端,见证了中国操作系统的历史…

buck电路上下管_推荐 | 学好电路设计与仿真?你不能错过这两本书籍 ~

网 友小编,有没有 Saber 相关书籍可以推荐一下?还有,Saber 软件下载那个版本比较好?当然有啦!小 编《Saber 电路仿真及开关电源设计》柯福波 等编著本书以 Saber 开关电源为基础,以具体工程电路为范例&am…

怎么批量修改html文件后缀,如何批量修改文件后缀名

我们都知道电脑文件都有一个格式,比如JPG、MP3等等格式,每个格式都代表不一样文件类型,那么我们该如何批量更改文件类型的后缀呢?比如把JPG更改为MP3,只要在电脑里设置不隐藏文件扩展名,然后建立统一的文件夹&#xf…

python 怎么调用 矩阵 第几行_第58集 python机器学习:混淆矩阵精度指标

混淆矩阵的精度计算公式为:精度(TPTN)/(TPTNFPFN),也就是说,精度就是指正确的预测数目除以所有样本的数量。准确率、召回率与f-分数:总结混淆矩阵还有几种方法,其中最常见的就是准确率和召回率。准确率度量的是被预测为…

android seekbar闪退,android seekbar 踩坑之路

最近项目中有用到seekbar,之前对这东西不太了解,趁机来踩坑。seekbar样式按我觉得Material 中的还不算难看了。但是美工给了自己的样式,还是得改。主要有这2个属性:android:thumb"drawable/thumb"android:progressDrawable"dr…

华为鸿蒙系统还没发布吗,华为没有孤军奋战,合作伙伴“雪中送炭”,鸿蒙系统正式发布!...

6月2日晚上,期待许久的鸿蒙0S 2终于正式登场了,这意味着鸿蒙手机已经变成了面向市场的正式产品,这是华为迈出的一小步,却是国产系统与安卓、iOS竞争的开始。在鸿蒙OS正式推出后,不少华为手机用户已经收到了系统更新的推…

计算机不能进入桌面,电脑开机无法进入桌面,请高手解决。

该故障是Windows XP操作系统关机故障中最容易出现的故障。造成该故障的原因可能有以下几方面原因:系统设置在添乱Windows XP默认情况下,当系统出现错误时会自动重新启动,这样当用户关机时,如果关机过程中系统出现错误就会重新启动…

幼儿园体育游戏电子计算机教案,【幼儿园体育跳圈圈教案】小班体育教案跳圈圈_小班跳圈圈游戏教案_亲亲宝贝网...

教案二:小兔跳圈活动目标:1、在原地纵跳和短距离双脚连续向前跳的基础上,尝试较长距离双脚连续向前跳圈。2、提高身体的协调能力和弹跳能力。活动准备:1、材料准备:呼啦圈若干、小兔头饰、蘑菇、篮子。2、游戏场地设置…

crtsiii型无砟轨道板_自主知识产权CRTSⅢ型轨道板助力,赣深铁路无砟轨道轨道板灌注第一工作面完成...

(本报河源讯 通讯员 陈前名 杨琰妤)11月29日,伴随着碧源中桥轨道板最后一方自密实混凝土浇筑完成,标志着由中国中铁四局机电公司赣深铁路项目部负责施工的第一工作面无砟轨道工程圆满完成,为实现年底全线轨道板全部灌注的目标奠定了坚实基础。…

聋人工学院计算机老师,聋人工学院12位手语老师用双手传递声音

在全国第十届残运会暨第七届特奥会上有一个特殊的节目,它虽然是舞蹈,但表演者却听不见背景音乐,它虽然需要踩点,但表演者却只能靠记忆与眼睛去完成每一个节拍。70名理工大学聋人工学院的听障同学将克服身体残疾,共同演…

mysql 乘法_测试面试题集Python花式打印九九乘法口诀表

——————今天距2020年28天——————这是ITester软件测试小栈第85次推文面试的时候,面试官可能要求原地秀一段代码,比如小学生都必须会默写的九九乘法口诀表,有长方形格式、左下三角形格式、左上三角形格式、右上三角形格式、以及右下三…

量子计算机怎么编程,量子计算机编程(一)——QPU编程

今天要给大家介绍的是这本书《Programming Quantum Computers —— Essential Algorithms and Code Samples》,主要讲如何在量子计算机上编程,又示例的代码可以跑 https://oreilly-qc.github.io./ ,这本书的理解方向是纯粹计算机的&#xff0…

unity 纹理压缩格式‘_纹理优化:让你的纹理也“瘦”下来

在上一期《纹理优化:不仅仅是一张图片那么简单》中,我们针对纹理相关的优化,挑选了部分知识点分析。无论是大家在开发时的疏忽,还是对相关知识点的理解不足,这些问题的积累最终都会反映到项目的性能表现上。为此&#…

2020中级计算机工程师,2020年上半年中级网络工程师报考详解

原标题:2020年上半年中级网络工程师报考详解软考全称叫做“全国计算机技术与软件专业技术资格(水平)考试”已经开展了十多年了,所受到的欢迎程度也是越来越高,据统计累计参加软考的人数已超300万人,同时每年以21万人的速度持续增加…

华科计算机复试ccf成绩,新鲜速递!刚拟录取华科学妹总结的复试攻略,快看

原标题:新鲜速递!刚拟录取华科学妹总结的复试攻略,快看今天给大家分享一位19考研学妹的面试经验,她报考华中科技大学,已拟录取!复试已落幕,在火车上收到拟录取通知后,感觉自己就像一…

php负载均衡原理_负载均衡的原理(通俗理解)

简单的来说,假设,你在放洗脚水,并且,当前你只有一洗脚盆。那么,你的洗脚水不管有多少,你最多就能装一个洗脚盆的这个就是,单服务器应用场景,你的流量就是洗脚水,然后&…