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,一经查实,立即删除!

相关文章

gradle 查看依赖类库版本_Android studio中查看依赖的第三方库的历史版本和最新版本...

在日常开发过程中,我们通过会依赖很多的第三方库项目。类似这样:dependencies {compile com.android.support:support-v4:24.2.1compile com.google.code.gson:gson:2.4compile com.lzy.net:okhttputils:1.7.0compile com.github.ybq:Android-SpinKit:1.…

set和map去重调用什么方法_【ES6】Set、Map

SetSet 是 ES6 提供给我们的构造函数,能够造出一种新的存储数据的结构特点:只有属性值没有属性名,成员值唯一用途:可以转成数组,其本身具备去重(自动去重),交集,并集,差集的作用等参…

cygwin 编译 android vlc,Cygwin 编译 VLC 问题

Cygwin 编译 VLC遇到了这么多问题,不过还好最后编译过去了。问题1:gcc -mno-cygwin -Wsign-compare-Wall -mms-bitfields -pipe -o libaccess_output_dummy_plugin.dll-g-shared -u _vlc_entry__0_8_6 -L/usr/win32/liblibaccess_output_dummy_plugin.a …

kvm上添加万兆网卡_烂泥:为KVM虚拟机添加网卡

本文首发于烂泥行天下。前几篇文章介绍了有关KVM安装虚拟机以及如何给虚拟机添加硬盘,今天我们再来介绍下有关如何给KVM虚拟机添加网卡。给KVM虚拟机添加网卡,可以分为两种形式:图形界面的和virsh attach-interface命令的。图形界面的很简单&…

android studio日历小程序,android studio无法加载日历界面

LayoutInflater inflater (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE); //载入界面view inflater.inflate(R.layout.pumkin_calendar,null);AlertDialog.Builder ad;ad new AlertDialog.Builder(pumkinLand.this);ad.setView(view);…

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

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

paylinks.php_毕业设计-基于PHP的网上购物网站系统设计

毕业设计-基于PHP的网上购物网站系统设计,共45页,14912字,附完整的程序源代码。包括前台,后台的实现,先运行phpStudyAdmin后打开dzsw/install.php摘要随着Internet技术的发展,人们的日常生活已经离不开网络…

com/android/dx/command/main,com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0

如果你在开发过程中遇到了上述的Bug,基本上是JDK版本不一致造成的,指的是高版本的JDK编译的class不能放在低版本的JDK上运行。如果是Version 52,就表示JDK8编译的class不能运行在JDK7上,所以需要在本地安装JDK8. 如果是Version 51…

谷歌浏览器怎么重发请求_Googel 浏览器 模拟发送请求工具--Advanced REST Client

Advanced REST Client是 Chrome 浏览器下的一个插件,通过它可以发送 http、https、WebSocket 请求。在 Chrome 商店下搜索 Advanced REST Client,即可找到如果搜索不到的可到CSDN 下载:1.下载插件:Advanced Rest Client2.因为最新…

鸿蒙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…

flink 不设置水印_区分理解Flink水印延迟与窗口允许延迟的概念

link 在开窗处理事件时间(Event Time) 数据时,可设置水印延迟以及设置窗口允许延迟(allowedLateness)以保证数据的完整性。这两者因都是设置延迟时间所以刚接触时容易混淆。本文接下将展开讨论分析“水印延迟”与“窗口允许延迟”概念及区别。水印延迟(WaterMark)(1…

爱特php文件管理器2.8_查找「超级蜘蛛池开发者中心 抠:44564876易」安卓应用 - 豌豆荚...

8.6万人安装开发者头条 - 程序员分享平台 2015 年获「最美应用」官方推荐,程序员必装的应用。 开发者头条是由一群程序员创建的,我们运营了 developerWorks 的微博、微信,创建了码农周刊,已覆盖百万程序员; 我们更懂程…

谈华为鸿蒙内核和操作系统,谈华为鸿蒙内核和操作系统

作者 | 陆首群谈到华为自研鸿蒙内核和操作系统,从华为透漏出来的信息来看,有点自相矛盾、扑朔迷离!我曾说过:真真假假,虚虚实实!这里有技术原因,也有外部原因。一开始(大概是 2016 年左右)&…

弹跳机器人 桌游_MIT机器人轻松搞定桌游叠叠乐:你能玩过它算我输 |《科学》子刊...

乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAI江湖上,一直流传着一种叠叠乐的试炼。规则很简单,从下方的积木中,抽一根往上搭。你能往上搭几层?对MIT团队研发的机器人来说,玩这个游戏基本上不费吹灰之力。而且&#x…

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

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

new_picview_一款漂亮的图片查看器PictureViewer

前段时间写了一款查看妹子图片的客户端宅男福利妹子客户端SuperGank,于是后来就把其中的一个图片查看的功能封装成了一个library,使用简单,可以进行多项设置。先来看一眼效果图吧!下面来看看如何使用它:首先把图片url的…

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

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

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

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

html5画电池状态,HTML5的一个显示电池状态的API简介

这篇文章主要介绍了HTML5的一个显示电池状态的API简介,由Mozilla设计,具体的设备和浏览器支持情况还要通过检测才能确定,需要的朋友可以参考下移动设备的份额在网络流量中在大量增长,其所贡献的网络流量非常庞大,以至于为了移动设备,我们单独…

redux异步action_react-redux--异步Action

上两篇文章叙述的都是同步操作,每当 dispatch action 时,state 会被立即更新。但是实际应用中,我们有很多操作执行后,过一段时间,才会得到结果。那么怎么处理这种情况呢?先熟悉一个概念中间件本质就是一个通…