版权声明:

本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有。

允许有条件转载,转载请附带底部二维码。

一、为什么需要一个测试脚本?

昨天讲解了Android Monkey命令的使用方式,今天趁着还热乎就手把手用Monkey写一个压力测试的脚本。还不了解什么是Monkey的,可以看看昨天的文章。

Monkey说到底其实就是一段命令,只能在有限的范围内做一些随机事件的压力测试。可以很明显看到它的一些缺点:

  1. 前期准备工作太多,需要把设备准备好、安装好待测Apk。
  2. 无法做到无干预的循环。类似没人看着去测试一夜的情况。
  3. 对一些在测试情况下,各项状态的监控并不好。

那么,这些问题,其实都可以使用一个脚本来解决问题。

Monkey命令其实就是在命令行中执行的命令,所以脚本语言基本上都可以完成这个任务,这里选择主流的Python来完成。

二、如何设计压测脚本

既然是一个完整的脚本,那么当然需要满足一些最基本的需求。

包括:

  1. 可以自动安装待测试apk。
  2. 可以循环执行脚本,并且每次都退出App重新执行。
  3. 在执行完成之后,可以输出测试报告。
  4. 变动的参数,可以让测试人员自行配置。

一个简单的测试脚本,包括这些基本上就足够了。

三、动手写脚本

编写完成之后,Python的项目结构大概是这样子的。

项目的结构大概如下:

  • apk目录:用于存放待测试的Apk。
  • bugreport_out目录:用于存放测试完成输出的报告。
  • .config:压力测试的配置信息文件。
  • chkbugreport.jar:输出测试报告的工具。
  • runmonkey.py:真正需要执行的Python脚本。
  • start.bat:为测试准备一个点击就可以执行的bat脚本。

了解了项目的结构之后,就可以开始编写Python脚本了。

1、编写配置文件和读取配置文件

首先看看.config配置文件。

在配置文件里,主要配置待测试的设备ID、循环执行次数,和每次循环的时候点击的次数。

这样设计,基本上可以通过execcount和monkeyclickcount两个参数,配置所需要执行多久的一个压测方案。

接下来就需要一个方法去读配置文件。

2、安装待测试apk

一般测试都是会测试同一个apk产品,所以这里写死apk的文件名。直接通过os.popen()这个Python的方法执行adb脚本。

3、杀掉待测app

为了让每次循环都是新的一个测试任务,保持测试环境的赶紧,需要一个方法在每次循环之前,杀掉之前正在运行的待测App。

4、生成测试报告

生成测试报告主要依赖chkbugreport.jar这个工具,它会根据bugreport获得的文件内容,生成测试报告。

bugreport的用法:

adb shell bugreport > .\bugreport.txt

而chkbugreport.jar是一个java编写的工具,直接通过java -jar 执行即可

完整的代码如下:

5、开始执行Monkey脚本

做完准备工作,就需要一个方法来执行我们配置好的Monkey脚本。

各项参数的配置,不明白的看看昨天的文章吧。

6、开始调用准备好的方法

准备工作已经完成,接下来将这些准备好的方法,组合起来,用一个for循环完成脚本的执行。

四、为测试人员准备一个bat

做完这些,基本上就算是把主要功能完成了。执行下面的命令,就可以跑起来了。

python runmonkey.py

但是终归这个脚本是要给测试用的,最好还是提供一个点击可用的bat脚本。

新建一个start.bat文件,把上面的命令保存进去就行。

下面看看执行起来的样子。

这里配置了循环三次,所以最终从Log中可以看到,确实执行三次之后,生成测试报告,并且退出测试。

五、生成的测试报告

chkbugreport.jar 可以通过生成的bugreport的内容,生成我们需要的测试报告。

从上面的截图可以看到,其实它会是一个网页,输出的内容非常的齐全。

六、多说两句

其实这个Monkey的压力测试脚本,已经满足测试的基本要求。但是实际上,生成的测试报告,不太好查看。通常封装成成熟的产品的App,都会集成第三方Bug监控的服务,例如:Bugly、友盟什么的。所以可以不以来bugreport生成的测试报告,直接在打测试包的时候,生成一个测试渠道的apk,用它来测试,这样在第三方服务提供的网站上,可以清晰看到测试的报告。

七、完整的Demo

完整的Demo请关注承香墨影的公众账号,回复关键词:“monkey脚本”获得。

手把手用Monkey写一个压测脚本的更多相关文章

  1. python3 写的一个压测脚本(有待开发)

    import requests import queue import threading import time status_code_list = [] exec_time = 0 class ...

  2. 一文揭秘测试平台中是如何将测试用例一键转化Jmeter压测脚本

    ​    ​接上篇,一键转化将接口测试平台测试用例转化成Jmeter压测脚本思路,这里我首先在java 上面做了一个简单的实验,看看 转化的中间遇到的问题,这里呢,我只是给了一个简单的demo 版本, ...

  3. JMeter扩展Java请求实现WebRTC本地音视频推流压测脚本

    WebRTC是Web Real-Time Communication缩写,指网页即时通讯,是一个支持Web浏览器进行实时语音或视频对话的API,实现了基于网页的视频会议,比如声网的Agora Web ...

  4. 只有20行Javascript代码!手把手教你写一个页面模板引擎

    http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...

  5. jmeter压测脚本编写与静态文件处理

    一.压测脚本编写 概述:工具为谷歌浏览器-->F12-->Network,访问被测站点,通过其中的请求的地方来构造压测脚本 二.静态文件处理 概述:静态文件包括css/js/图片等,它们有 ...

  6. 【原】shell编写一个简单的jmeter自动化压测脚本

    在公司做压力测试也挺长时间了,每次测试前环境数据准备都需要话费较长时间,所以一直在考虑能不能将整个过程实现自动化进行,于是就抽空写了一个自动化脚本,当然这个脚本目前功能十分简陋,代码也不完善,很有很多 ...

  7. ab压力测试工具-批量压测脚本

    ab(Apache benchmark)是一款常用的压力测试工具.简单易用,ab的命令行一次只能支持一次测试.如果想要批量执行不同的测试方式,并自动对指标进行分析,那么单靠手工一条一条命令运行ab,估 ...

  8. my31_MGR单写模式压测以及对比普通从库记录

    场景MGR单写模式三节点,db46写节点,db47/db48为读节点工具sysbencn.压测15个小时,db46上18线程纯写,12线程oltp混合测试,db48上12线程select在压测2个小时 ...

  9. java编写jmeter压测脚本

    目前项目中接触的比较多的是接口测试,功能测个差不多后会对部分接口进行压测,采用的是java编写脚本,导入jmeter进行压测. 使用到的jmeter的相关包 写一个测试类,继承AbstractJava ...

随机推荐

  1. navigator的一些冷知识

    { 监听屏幕旋转变化接口: orientationchange orientation.angle : 0 竖屏 , 90 向左横屏 , -90/270 向右横屏 , 180 倒屏 } screenO ...

  2. 在WINDOWS中安装使用SIGPACK(MinGW64+Sublime Text3 &Visual Studio)

    本文介绍在Windows下安装使用SigPack库,涉及Armadillo.OpenBLAS安装使用说明,最终实现对SigPack示例CPP基于MinGW64在Sublime Text3下的编译运行, ...

  3. Java中 StringTokenizer 的用法

    一.StringTokenizer 1.1 StringTokenizer简介及其构造函数的三种形式: StringTokenizer类是字符串分割解析类型,其属于java.util包,在使用之前需要 ...

  4. JAVA基础复习与总结<七> File类_基本的IO概念_输入输出

    File类 1.操作目录  mkdir() 创建目录,必须确保父目录存在,如果不存在,创建失败 mkdirs() list() 文件:目录字符串形式 ,只返回目录和文件的名称 listFiles()  ...

  5. [R]R包版本更迭【持续更新】

    由于R版本更迭,网上或旧的教材上的包可能没有在维护,或者被其他包替代. 做一个表记录碰到的一些替代方案.个人向,非完整指南. * mvpart 2014年之后不再更新,R 3.0版本后无法安装, 提示 ...

  6. Gedit —— 推荐于NOI系列考试(NOIlinux)的轻量编程环境

    由于Vim,Emacs上手艰难,Guide又特别难用,Anjuta还闪退 故推荐一款轻量化的编程环境:Gedit(文本编辑器) 配置方法: 1:在桌面上新建main.cpp,打开方式选择使用gedit ...

  7. 制作docker-jdk7-zookeeper镜像(非集群版)

    ## 准备工作 用到的工具, Xshell5, Xftp5, jdk-7u79-linux-x64.tar.gz, zookeeper-3.4.9.tar.gz, docker.io/centos:l ...

  8. kubernates使用kubeadm安装

    kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验k ...

  9. NPOI 修改指定单元格字体颜色

    //创建一个字体颜色 IFont font = hssfworkbook.CreateFont(); //红色 font.Color = HSSFColor.Red.Index; //样式 ICell ...

  10. swust oj 1011

    二叉排序树的实现和查找 1000(ms) 10000(kb) 2782 / 6301 按照给定的关键字集合,建立二叉排序树.在建立的二叉排序树上查找指定的关键字,查找成功,输出找到该关键字比较的次数: ...