Android自动化测试-Monkey篇_Danieldadada的博客-程序员秘密_android自动化测试monkey

 部分参考自《腾讯Android自动化测试实战》丁如敏 盛娟著

1 monkey

安卓系统自带功能,无需另外安装,只需要电脑安装adb,手机开启开发者选项usb调试,即可进行连接,然后在电脑shell上跑monkey脚本,即可进行安卓自动化测试

2 adb安装配置以及操作安卓设备的常用命令

2.1 安装配置

官网下载Adb Kits,解压后有adb.exe adbwinapi.dll adbwinusbapi.dll这三个文件,配置方法有两种,选其一即可:

方法一 将这三个文件剪切到c盘\user\用户目录文件夹下面

方法二 将这三个文件所在目录地址放到系统环境变量path中

2.2 常用命令

1查询模拟器/安卓设备实例 

adb devices

2安装应用程序到安卓设备/模拟器(卸载是uninstall)

adb install 电脑路径\apk文件

3将安卓设备/模拟器的文件复制到电脑

adb pull 安卓路径/文件 电脑路径

4将电脑的文件复制到安卓设备/模拟器

adb push 电脑路径\文件 安卓路径

3 monkey启动

例:

adb shell monkey -v 10  

通过该命令启动Monkey后,Monkey向被测手机的Android系统发送10条随机事件类型。

4 monkey 测试实例(1)随机事件流

例:被测程序是Android应用(App)。测试希望通过Monkey来模拟用户长时间的随机操作,检查被测应用是否会出现异常(应用崩溃或者无响应)。

monkey脚本:

adb shell monkey -p com.xxx.xxx --pct-touch 40 --pct-motion 25 --pct-appswitch 10 --pct-rotation 5 -s 12358 --throttle 400 --ignore-crashes --ignore-timeouts -v 500000

脚本解析如下:

1使用-p参数来指定测试应用的包名

(Package的名字查看方法:安卓设备与电脑adb连接后,在shell输入命令

adb shell pm list package

即可查看安卓设备当前的所以应用程序包名)

2 使用--pct-xxx参数限制Monkey执行的事件类型和占比

monkey事件类型如下

3使用-s参数来指定命令执行的seed值

Monkey会根据seed值来生成对应事件流,同一个seed生成的事件流是完全相同的。这里指定了seed值,是为了测试发现问题时,便于进行问题复现。

4使用--throttle参数来控制Monkey每个操作之间的时间间隔

5使用--ignore-crash和--ignore-timeouts参数使Monkey遇到意外时能继续执行

6使用-v指定log的详细级别

Monkey的日志输出有3个级别:默认的是level 0, -v -v日志级别为level 1, -v -v日志级别为level 2。日志的级别越高,其详细程度也越高。为了方便问题的定位,将日志级别设置为level2。

5 monkey测试实例(2)固定事件流

常规Monkey测试执行的是随机的事件流,但如果只是想让Monkey测试某个特定场景(执行固定的事件流)呢?这时候就需要用到自定义脚本了,Monkey支持执行用户自定义脚本的测试,用户只需要按照Monkey脚本的规范编写好脚本,存放到手机上,启动Monkey通过-f scriptfile参数调用脚本即可。

Monkey自定义脚本的编写模板如下:

#头文件,控制Monkey发送消息的参数,固定写即可
       

#脚本类型,一般不用更改
       

type=raw events
       

#脚本执行次数,但是由于Monkey命令本身可以指定执行次数,所以这里的设置是不生效的
       

count=10
       

#命令执行速率,速率也可以通过Monkey命令设置,这里的设置是不生效的
       

speed=1.0
       

#以下为Monkey命令
 

start data>>
       

LaunchActivity(pkg_name, cl_name)
       

DispatchPress(KEYCODE_HOME)
        
…  

例:要测试的是应用宝App,测试的操作是打开应用宝,点击输入框,输入“yyb”,点击搜索。搜索完成后,点击返回键返回应用宝首页。

1编写自定义脚本monkey.script(后缀可以随便写,比如monkey.txt,只要文件可以编辑就行)

#monkey.script代码如下

#启动测试
       

type = user
       

count = 1
       

speed = 1.0
       

start data >>
       

#启动应用宝
       

LaunchActivity(com.tencent.android.qqdownloader,com.tencent.assistant.activity.SplashActivity)   

UserWait(2000)
       

#点击搜索框
       

Tap(463,150,1000)
       

UserWait(2000)
       

#输入字母“yyb”
       

DispatchString(yyb)
       

UserWait(2000)
       

#点击搜索
       

Tap(960,150,1000)
       

UserWait(2000)
       

#点击返回键返回首页
       

DispatchPress(KEYCODE_BACK)

2将文件push到手机或模拟器的sdcard中:

adb push monkey.script  /sdcard/

3执行脚本:

adb shell monkey  -f /sdcard/monkey.script -v 1

此时可以看到手机按照前面的自定义脚本开始执行,共1次

(若要连续执行10次,则把1改成10即可)

解析:

monkey自定义脚本常用api如下:

 

1 LaunchActivity(pkg_name, cl_name)

应用包名比较好查找,activity名相对麻烦,需要借助aapt,方法如下:

1-1下载aapt.exe

搜索apktool 进入官网install页面,下载apktool.bat apktool.jar两个文件,然后解压apktool.jar,在该目录下的prebuilt\windows目录下的aapt_64.exe复制到c盘\user\用户目录,改名为aapt.exe,把apktool.bat文件也复制到这个用户目录下即可

1-2运行aapt命令查找应用对应的activity名

确保安卓设备与电脑adb连接好,确保电脑磁盘有这个应用的apk安装包,然后输入命令

aapt dump badging 电脑目录\apk文件

即可在shell中查看apk安装包对应的activity名

2 DispatchPress(keyName)

按键名称有

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40962436/article/details/89165975

智能推荐

Spring Boot学习历程:集成mybatis+freemarker+spring security+ehcache+logback_遗忘的小星星的博客-程序员秘密

    以前开发一直用的是Spring MVC,最近有时间就来研究一下Spring Boot。先说一下感受:SpringBoot比较适合快速开发,和SpringMvc比较起来的优点我觉得有:    1.配置快,启动快。    2.不需要依赖额外的安装tomcat,只需要一个jar包就能运行。    3.配置热部署插件,效率更高。缺点就是出错了不太好找问题。这几天找了好多教程,终于自己搭建出来自己熟...

[生活大杂烩-1] 我们缺席彼此生命里最重要的十年_石圣的博客-程序员秘密

还没有走进婚姻殿堂的我,没能感受到与父母分属于两个家庭的矛盾与纠缠。但是我细细想来,高中三年,大学四年,工作快满一年。我跟爸妈在彼此的生命里缺席了快八年。这八年里,爸爸再也不是那个身强体健随时随地能够为我遮风挡雨的样子,我看到了他走上坡路驼背的时候。妈妈也再也不是那个满面容光时时刻刻照顾我生活起居的样子,我看到了她做手工活力不从心的无奈。我也不是那个满目稚气只知道闷头学习的小孩,我知道,时间总会要

SpringBoot 基于向量搜索引擎及虹软人脸识别SDK的大规模人脸搜索_你这愚蠢的土拨鼠啊的博客-程序员秘密

SpringBoot 基于向量搜索引擎及虹软人脸识别SDK的大规模人脸搜索文章目录SpringBoot 基于向量搜索引擎及虹软人脸识别SDK的大规模人脸搜索在线环境demo在线环境说明前言系统架构功能设计Milvues人脸上传(单张)人脸上传(批量)人脸搜索技术架构前端框架后端框架数据库中间件前后端交互安装部署前端后端配置服务数据库人脸数据核心方法FaceEngineConfig 类FaceEnginePoolFactory 引擎对象工厂类faceUtils 人脸识别工具类milvusOperateUti

python for everybody quiz7_CSDN_WEEK7_QUIZ_weixin_39936380的博客-程序员秘密

简介TinymMind上GPU运行费用较贵,每 CPU 每小时 $0.09,每 GPU 每小时 $0.99,所有作业内容推荐先在本地运行出一定的结果,保证运行正确之后,再上传到TinyMind上运行。初始运行推荐使用CPU运行资源,待所有代码确保没有问题之后,再启动GPU运行。TinyMind上Tensorflow已经有1.4的版本,能比1.3的版本快一点,推荐使用。作业1利用slim框架,做一个...

skrollr.js使用时pc端鼠标滚动卡顿_糖糖不是很甜的博客-程序员秘密

skrollr.js使用时pc端鼠标滚动卡顿介绍使用效果滑动配置最后介绍skrollr.js是一款轻量级且强大的js视差动画效果库使用首先去进行引入库并进行初始化initskrollr.init({ forceHeight: false, easing: { vibrate: function(p) { return Math.sin(p * 10 * Math.PI); } }});正常写好之后在你的元素上写

随便推点

java.lang.NullPointerException: Module 'null' not found._perfectPlans的博客-程序员秘密

 严重: Servlet.service() for servlet jsp threw exceptionjava.lang.NullPointerException: Module 'null' not found. at org.apache.struts.taglib.TagUtils.getModuleConfig(TagUtils.java:755) at org.ap...

Vue:图片预览vue-photo-preview的使用_H5入门到入土的博客-程序员秘密

Vue:图片预览vue-photo-preview的使用应用场景点击图片,能够以类似朋友圈的方式展示图片,主要功能:预览,放大。标题经过网上一番查阅,有三款插件比较不错,分别是 viewerjs、vue-photo-preview 以及 vue-picture-preview。经过简单比较,viewerjs 功能比较强大,更适合web端。vue-picture-preview 只有预览和切换上下张功能,无法满足全部需求。故优先选择vue-photo-preview。使用1、安装npm inst

MyBatis-Plus 简介与入门案例_微服务技术栈的博客-程序员秘密

官方是这样介绍Mybatis-Plus的,MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。我觉得它们之间的关系有点类似于Spring与 Spring Boot之间的关系。Spring Boot是为了简化Spring开发。MyBatis-Plus对MyBatis做了增强功能以简化MyBatis的开发。MyBatis-Plus支持多种数据库,包括mysql 、mariadb 、oracle 、db2 、h2 、hsql 、

dumi组件库打包总结_coderlin_的博客-程序员秘密_extrababelplugins

最近在做页面抽成组件然后发布,期间也是遇到了很多问题和坑,现在顺便分享一下。dumi官网dumi为组件开发场景而生的文档工具,这里注重分享打包的过程,fatherdumi使用father打包,father文档1 使用rollup打包的时候报错。father提供了几种打包的方式,umd, cjs, esm。也支持使用rollup或者babel来打包成cjs/esm。一开始选择的是rollup来打包。出现的问题:rollup只支持esmodule,不支持commonjs,如果你的组件库引用

ajax异步获取请求,获得json数组后对数组的遍历_Lucky小黄人的博客-程序员秘密

如果响应数据是以html的形式发出来的,即response.setContentType("text/html;charset=utf-8");那么一般用下面这种方式,但是要注意用eval()函数将responseText转换成一个json表达式,如下标红代码 1 //创建回调函数,根据相应状态动态更新页面 2 var xhr = getXMLHttpRequest(); ...

oracle导库语句_lia1234li的博客-程序员秘密_oracle倒库语句

imp和exp对应,都具有三种模式1、完全:IMP SYSTEM/MANAGER BUFFER=64000 FILE=C:/FULL.DMP FULL=Y2、用户模式(必须指定FROMUSER、TOUSER参数):IMP SONIC/SONIC BUFFER=64000 FILE=C:/SONIC.DMP FROMUSER=SONIC TOUSER=SONIC这样用户SONIC的所有对象被导入到文...

推荐文章

热门文章

相关标签