shell 管理 monkey 压力测试

本文介绍了如何使用shell脚本进行monkey压力测试,包括多条monkey语句的依次执行、异常记录、log筛选、状态检查、监控脚本配合以及log分析。通过自动化测试流程,提高了执行效率和结果分析的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言:

一、monkey 压力测试执行需求设计

设计调整方案的持续过程中,根据测试最终目的和提高执行及结果分析效率的需求,不断给自己提出目标需求,不断改进如下:

1、多条 monkey 语句依次执行

2、monkey 的 log 除记录操作同时记录监控到的 ANR 和 crash

注:其中包名,事件比例,事件数需定制调整;正常 monkey 的 log 为 1 输出流,异常的为 2,追加写在同一个文件内。

3、轮询筛查 logcat 减少长时间抓取的 log 量

4、当前状态检查处理异常情况

5、初始化及控制执行页面

注:当前项目未有此需求,每次测试手工初始化,暗码开启离线 log 等。所以一直未设计这部分,实现逻辑上是可行的。

6、配合监控脚本抓取数据

7、对收集到的 log 文件进行脚本分析格式化归类

二、monkey 压力测试执行代码设计

1、monkey 执行控制脚本

2、电量监控——btm

电量监控图

3、log 筛查归类为 CSV


前言:

在开发应用程序时,我们需要对其进行各种测试,以确保其稳定性和可靠性。其中,monkey 测试是一种常用的压力测试方法,它可以模拟用户的使用行为,测试应用程序在高负载下的表现。本文将介绍如何使用 shell 脚本来进行 monkey 测试,并简单提到如何监控测试过程。

方案流程:设计 monkey 语句-->套用脚本方案执行-->收集结果脚本统计分析-->分析监控数据-->提交 bug。

  • 修改 moneky.sh(主控脚本)中的 monkey 语句后批处理一键执行。
  • 方案不仅包含了执行,还包括了 ANR/Force Closed/tombstone 的归类筛查,快速去重。
  • 执行方式易于交付给懂 monkey 语法可设计 monkey 语句压测逻辑的执行人员,或固定脚本执行。

一、monkey 压力测试执行需求设计

设计调整方案的持续过程中,根据测试最终目的和提高执行及结果分析效率的需求,不断给自己提出目标需求,不断改进如下:

1、多条 monkey 语句依次执行

逻辑:执行 monkey 语句-->判定 monkey 进程产生-->等待 monkey 进程结束-->循环。
控制脚本:shell 脚本控制流程逻辑,设备端后台运行(&符后台执行)
优势

  • 组合不同 monkey 脚本进行整体测试;
  • 设备端独立完成;
  • 可连接线充避免手机电量不足;
  • 可以对手机状态和 app 状态进行控制;
  • 可同步进行 log 分析处理;
  • 等多进程操作。

2、monkey 的 log 除记录操作同时记录监控到的 ANR 和 crash

方法

monkey -p 包名 --throttle 500 --ignore-crashes --monitor-native-crashes --ignore-timeouts --ignore-native-crashes 事件比例 -v -v -v 事件数 1>>monkey.log 2>&1 &
注:其中包名,事件比例,事件数需定制调整;正常 monkey 的 log 为 1 输出流,异常的为 2,追加写在同一个文件内。

筛查:monkey.log 查找 anr 及 crash 了解异常前的 monkey 操作及异常 log。

3、轮询筛查 logcat 减少长时间抓取的 log 量

方式:控制间隔轮询筛查 logcat 有 ANR/FC/Tombstone 则保留,否则删除。
添加位置:“等待 moneky 进程结束” 阶段
统计字段:ANR——"ANR in";Force Closed——"FATAL EXCEPTION";tombstone——"Build fingerprint";
额外获取:bugreport;判定时刻截图

4、当前状态检查处理异常情况

按需设计:锁屏则自动解锁;存储空间不够则删除下载目录的文件;等。

5、初始化及控制执行页面

按需设计:执行前初始化 app 状态,存档;已运行状态执行/未运行状态执行 monkey;显示的 Activity 非目标页面,操作页面返回;等。

注:当前项目未有此需求,每次测试手工初始化,暗码开启离线 log 等。所以一直未设计这部分,实现逻辑上是可行的。

逻辑:shell 脚本写具体功能的 case 函数在 monkey 语句前执行;通过 SurfaceFlinger,window 等服务获取状态判定处理;通过 case 语句涵盖所有场景的处理方式,依据判定信息进行选择处理;放在等待 monkey 进程结束的判定循环内。

6、配合监控脚本抓取数据

方式:监控进程和 monkey 脚本进程以多进程形式运行;依次运行后台脚本即可
同步:监控进程触发条件停止,触发条件为指定文件名存在,moneky 脚本结束前创建此文件通知监控停止。
监控内容:CPU/内存——mcm 方案 ;电量监控——获取对应信息格式化为 CSV 输出走势图,判定关机/死机/重启是否是充电异常导致电量不足;等

7、对收集到的 log 文件进行脚本分析格式化归类

方式:由于 ANR/Force Close/Tombstone 是固定格式打印 log;根据格式输出的形式简单的归类统计。
**shell 逻辑:使用 grep+sed+awk,组织逻辑完成了格式化归类为 CSV。

二、monkey 压力测试执行代码设计

1、monkey 执行控制脚本

#!/system/bin/sh

#添加备注到comments.csv
comment(){
if [ ! -f $testresult/comments.csv ];then
    echo "Date,Error Type,Log Name" >$testresult/comments.csv
fi
echo "`date +%m-%d" "%H":"%M":"%S`,$1,$2" >>$testresult/comments.csv
}

#锁屏函数$1:0--lock;1--unlock;按显示内容判定处理,显示壁纸并且无其他activity则滑屏;黑屏则电源键唤醒加滑屏。
lock(){
local tmp=`wm size|busybox awk '{print $NF}'`
local x=`echo $tmp|busybox awk -F "x" '{print $1}'`
local y=`echo $tmp|busybox awk -F "x" '{print $2}'`
while true;do
    case `dumpsys SurfaceFlinger|grep "|....|"|busybox awk 'BEGIN{r="o"}{if($NF=="com.android.systemui.ImageWallpaper"||$NF=="com.android.systemui.keyguard.leui.KeyguardImageWallpaper")r="l"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值