App稳定性测试

  稳定性测试就是指软件长时间的持续运行,系统版本是否稳定,是否能否持续的为用户提供服务。

指标:

  异常的次数

  异常的频率

App的稳定性测试如何实施?

首选Monkey

  Monkey是向系统发送随机的用户事件流(如按键输入、触摸屏输入和手势输入等),实现对正在开发的应用程序进行稳定性测试。可以更好的模拟用户操作,确保App的稳定性。

Monkey运行原因

1、Monkey 程序是由 Android 系统自带,使用 Java 语言写成,其本身是安卓系统下的一个monkey.jar文件。在Android文件系统中的存放路径是: /system/framework/monkey.jar;

2、Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;

3、Monkey 启动方式:在 cmd 命令提示符里面输入命令行来启动 monkey 测试。

4、命令行:adb shell monkey——monkey.shell——monkey.jar——安卓进程——设备上执行测试

Monkey原理图:


一、所需软件:

Python3.7

Pycharm社区版

SDK  下载网址:http://www.androiddevtools.cn/

雷神模拟器

58同城apk


二、SDK环境搭建

1、下载 android-sdk,这个是做 android 测试和开发的必备环境,如果不

会下载的话,在 QQ 群:902061117 群文件下载

1、解压后,里面有个 SDK manager.exe 双击打开

3.勾选你要现在的 API 版本和对应的 android 版本,后面模拟器会用到

,然后坐等下载

在系统变量新建:ANDROID_HOME,对应变量值为:

E:\android-sdk-windows(sdk 安装路径)

2.path 添加两个变量,将以下箭头所指的两个文件路径添加到 path 里

path下添加如下两个路径:

E:\android-sdk-windows\tools 和  E:\android-sdk-windows\platform-tools

adb环境

1.因为 adb 是在 D:\androidsdk\android-sdk-windows\platform-tools

这个目录下的,所以上面添加了环境变量后,可以直接在 cmd 里面运行了。

2.在 cmd 输入 adb 可以查看对应版本号

三、连接雷神模拟器---adb connect 127.0.0.1:5555

首先要打开USB调式选项(默认是没有开启调式模式的)

开启调式模式操作步骤:依次打开设置--关于-连击5次版本号,再返到我设置主页就可以看到开发者选项

雷电模拟器:adb connect 127.0.0.1:5555

使用指令:adb devices

连接信息解释

手机设备:显示设备的序列号,即b2355f8a

模拟器:显示ip地址和端口,即127.0.0.1:62001

device:已识别的设备,连接成功

unauthorized:没有授权,需要手机上授权后才能连接

unkown:未识别的设备

offline:离线设备

主流安卓模拟器连接方式:
夜神模拟器:adb connect 127.0.0.1:62001
逍遥安卓模拟器:adb connect 127.0.0.1:21503
天天模拟器:adb connect 127.0.0.1:6555
海马玩模拟器:adb connect 127.0.0.1:53001
网易MUMU模拟器:adb connect 127.0.0.1:7555 MacOS:adb connect 127.0.0.1:5555
genymotion模拟器:adb connect 127.0.0.1:5555
谷歌原生模拟器:adb connect <设备的IP地址>:5555


Monkey

Monkey命令-事件数

Monkey支持的所有命令

adb shell monkey

必选的命令

COUNT:事件数

通过事件数量来测试稳定性

adb shell monkey 次数   即,adb shell monkey  50

注:可能小伙伴发现这速度也忒快了,我看都没看清,这人的速度也没这么快,不合理。哈,那接着,控制每一次操作的间隔时间


Monkey命令-事件间隔

--throttle <milliseconds>     在事件之间插入固定延迟。通过这个选项可以控制Monkey发送事件的频率。时间单位是ms(毫秒)1000毫秒=1秒

例1:发送10个事件,持续执行时间1分钟

adb shell monkey --throttle 6000 10,即10个事件,做完一个事件就等待6秒后再执行

备注:扯了半天,小伙伴想知道我要去检测公司的app倒 底要怎么整


Monkey命令-指定包

-p <allowed-package-name>    此参数指定了一个包,Monkey将只允许系统启动这些包里的Activity

-p <allowed-package-name1>  -p <allowed-package-name2>    如果用此参数指定了多个包,Monkey将只允许系统启动这些包里的Activity

例3:对58同城进行稳定性测试,执行100次事件

adb shell monkey -p com.wuba 100

获取包名

adb shell pm list packages

知识点:

有可伙伴可能会问,我压根不知道我学习的app的名包叫啥那怎么找呢?

aapt dump badging D:\test\xxx.apk(APK的全名),如手机淘宝.apk

Monkey命令-日志设置

-v Level 0    除启动提示、测试完成和最终结果之外,提供较少信息

-v-v Level 1 提供较为详细的测试信息,如逐个发送到Activity的事件

-v-v-v Level 2    提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。

例4:对58同城进行稳定性测试,执行100次事件,分别查看不同日志级别记录的信息情况

adb shell monkey -p com.wuba -v 100

adb shell monkey -p com.wuba -v-v 100

adb shell monkey -p com.wuba -v -v -v 100

日志导出到本地

adb shell monkey -p com.wuba -v-v-v 100 >d:\wuba.txt

Monkey命令-seed值

在Monkey运行过程中,肯定会发现异常、奔溃、无响应等问题,对于此类问题如何进行复现呢?

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

使用场景:

复现bug,回归测试(验证bug)

adb shell monkey -s 1593077384911 -p com.wuba -v-v-v 100 >d:\wuba4.txt

adb shell monkey -s 100 -p com.wuba -v-v-v 50

  在Monkey运行过程中,我们可以通过结束进程的方式来终止Monkey的执行,当然在运行过程中遇到异常、奔溃等情况Monkey也会停止。为了保证执行的事件数执行完整,我们可以通过调试选项的设置来防止在运行过程中Monkey命令的提前结束。

--ignore-crashes 忽略在应用程序出现crash时导致的monkey停止

--ignore-timeouts 忽略在应用程序出现ANR问题时导致monkey停止

--ignore-security-exceptions 忽略应用程序发生许可错误时导致monkey停止

例5:对58同城进行稳定性测试,执行50次事件,忽略过程中遇到的异常,直到50次事件完成

adb shell monkey -p com.wuba --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions -v-v-v 50

部份参数:

--pct-touch:触摸事件 --pct-trackball :轨迹事件

--pct-motion:动作事件(手势) --pct-nav :基本导航事件

--pct-appswitch:启动activity事件 -pct-majornav:主要导航事件

--pct-rotation:屏幕旋转事件 --pct-syskeys:“系统”按键事件

总结:

1、Monkey是对安卓apk进行随机事件的操作,通过报告来查看apk是否稳定

2、只适用安卓平台

3、根据公司不同产品的特性可设置不同概率来针对性测试或回归(如抖音他的滑动频率高)

如果对软件测试、接口测试、自动化测试、性能测试、持结集成、面试经验交流。感兴趣可以893694563,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。

测试工程需要明白的Monkey测试的更多相关文章

  1. Monkey测试log的保存与分析

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  2. monkey测试入门2--测试步骤、常用参数、常规monkey命令

    <凤栖梧> 柳永 伫倚危楼风细细,望极春愁,黯然生天际.草色烟光残照里,无言谁会凭栏意? 拟把疏狂图一醉,对酒当歌,强乐还无味,衣带渐宽终不悔,为伊消得人憔悴. 简要步骤:adb devi ...

  3. monkey测试小记

    本篇中不记录环境搭建,只是介绍一些经验和小秘诀吧. 一.使用安卓模拟器进行测试. 在刚刚接触到monkey测试的时候,用的真机进行测试,点击几万次甚至更多的时候,发现系统变慢了.也许是错觉,但是系统经 ...

  4. monkey测试===easyMonkey测试【推荐】

    easymonkey测试: easymonkey是基于monkey测试的一个二次开发工具.(关于monkey测试参见之前blog) easymonkey的特点就是方便,解决了很多参数命令上设置的麻烦, ...

  5. [转]Monkey测试简介

    转自:http://www.cnblogs.com/manuosex/p/3215270.html 在android手机上做自动化测试,monkey比cts,Android UnitTest 好用多了 ...

  6. 手机monkey测试BUG重现及解决方法

    目录 1.1 Monkey测试简介...1 1.2 Monkey程序介绍...1 1.3 Monkey命令的简单帮助...2 1.4 Monkey命令参数介绍...2 1.5 Monkey测试步骤.. ...

  7. Android软件测试Monkey测试工具

    前言: 最近开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey.Monkeyrunner.benchmark.其 ...

  8. ActiveX添加测试工程, 出现的问题[非选择性参数][找不到成员]

    ActiveX 添加测试工程 1.新建工程MFC application, 2.添加完毕,在main Dialog中, 右键[Insert Activex Control],选择你的ActiveX控件 ...

  9. Monkey测试结果分析

    Monkey测试结果分析 什么是monkey Monkey 测试是 Android 自动化测试的手段之一,它通过模拟用户的按键输入.触摸屏输入等,测试设备多长时间出现异常.Monkey 是一个命令行工 ...

随机推荐

  1. [转]C# 互操作性入门系列(一):C#中互操作性介绍

    传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...

  2. 【springboot】@Valid参数校验

    转自: https://blog.csdn.net/cp026la/article/details/86495659 扯淡: 刚开始写代码的时候对参数的校验要么不做.要么写很多类似 if( xx == ...

  3. npm压缩js文件

    参考:https://blog.csdn.net/msy_msy/article/details/78261383 1.压缩单个js文件 cnpm install uglify-js -g 安装 1& ...

  4. 快速创建Spring web项目

    第一步,把包和文件夹建好 第二步.pom文件添加依赖 放到properties标签内 <spring_version>4.1.2.RELEASE</spring_version> ...

  5. 从kratos分析BBR限流源码实现

    什么是自适应限流 自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load.CPU 使用率.总体平均 RT.入口 QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流 ...

  6. uniapp 设置背景图片

    uniapp 由于其特殊机制,导致了背景图片不能引用本地图片.只能通过 转成 base64 来进行设置 附上链接:https://oktools.net/image2base64 图片转成base64 ...

  7. Redis-技术专区-让你彻底会使用“Redis中最陌生且最强大的集合”(ZSET)【前篇】

    前言介绍 很多小伙伴都跟我说,redis中,ZSet(有序集合)是他们最陌生的集合,同时也是觉得特别复杂的集合之一,在开发过程中经常会用到它,而且也是大家最不太有把握使用的集合,所以笔者就从ZSet集 ...

  8. openswan协商流程之(四):main_inI2_outR2()

    主模式第四包:main_inI2_outR2 1. 序言 main_inI2_outR2()函数是ISAKMP协商过程中第四包的核心处理函数的入口,同时在此处理流程中已经获取到足够的隧道信息,可以生成 ...

  9. Abp Vnext3 vue-admin-template(三获取用户信息)

    因为获取用户比较简单,只需要把用户名及头像地址赋值即可(也许理解错误,如果发现请告知谢谢), 首先将src\api\usr.js中的url请求地址改为以下代码 export function getI ...

  10. 动态规划精讲(一)LC 最长递增子序列的个数

    最长递增子序列的个数 给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, ...