首页 > 其他分享 >app稳定性测试之Monkey工具

app稳定性测试之Monkey工具

时间:2024-12-03 14:01:20浏览次数:13  
标签:shell Monkey -- app adb 事件 测试 monkey

01monkey介绍

Monkey是一款针对Android应用程序的自动化测试工具,它的名字寓意着像猴子一样在软件上随机乱敲按键,以此来模拟用户的随机操作。通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、滑动Trackball、手势输入等操作),Monkey可以对设备上的程序进行测试,检测程序在长时间运行下的稳定性,并观察程序在何种情况下会出现异常。

Monkey测试不仅可以帮助开发者发现应用程序的潜在问题,还能提高应用程序的健壮性和可靠性。此外,Monkey还提供了丰富的命令行参数,使得测试过程更加灵活和可控。

02运行原理

Monkey测试的原理主要是利用socket通讯的方式模拟用户的随机操作。当Monkey程序在模拟器或设备运行的时候,如果用户触发了如点击、触摸、手势或一些系统级别的事件,它就会产生随机脉冲,并模拟出相应的用户操作。这些随机操作可以是对应用程序的UI进行点击、滑动、输入等操作,也可以是模拟设备的一些系统事件,如网络状态变化、电话呼入等。

Monkey测试通过模拟用户操作来测试应用程序的稳定性,主要是因为在实际使用中,用户的使用习惯和操作方式往往是多样化和不可预测的。通过模拟这种随机性,Monkey可以更全面地测试应用程序在各种情况下的表现,从而发现可能存在的问题。

03monkey命令

Monkey命令的参数大致分为三大类:

(1)基本配置参数 –v -s --throttle -p;
(2)发送的事件类型:
(3)调试选项

图片

参数说明:

一、基本参数:

1)-P参数,指定要测试的包名:

例:

//指定1个包

adb shell monkey -p cn.mopon.film 2000

-P后面接app包名, 2000是要测试的操作的次数(即随机事件数),比如点击数,缩放数等,达到这个次数测试就结束退出monkey测试状态。

//指定多个包

adb shell monkey -p cn.mopon.film -p com.tencent.QQ -p com.tencent.QQBrowser 100

//不指定包

adb shell monkey 100

说明:Monkey随机启动APP并发送100个随机事件。

2)-v参数,指定输出日志的级别,monkey输出日志有3个级别,通过-v参数来指定:

-v 第一级别; -v -v第二级别;-v –v –v 第三级别

例:

//指定日志级别Level0

adb shell monkey -p cn.mopon.film -v 100

说明:日志级别level0:缺省值,仅提供启动提示、测试完成和最终结果等少量信息

//指定日志级别Level 1

adb shell monkey -p cn.mopon.film -v –v 100

说明:日志级别 Level 1,提供提供较为详细的日志,包括每个发送到Activity的信息。

//指定日志级别Level 2

adb shell monkey -p cn.mopon.film –v -v –v 100

说明:日志级别 Level 2,提供更详细的日志,包括了测试中选中/未选中的Activity信息。

Monkey的参数没有顺序要求,但是随机事件数是一定要放在最后的。

adb shell monkey -p cn.mopon.film –v -v –v 100 |logcat -v time>D:\log\1.txt

说明:用Monkey 测试时,为了方便分析问题,可以在命令monkey命令后面加上 |logcat -v time,这样就能边测试边打印Log并存到电脑本地,但是以上组合在monkey测试完成后,logcat仍然在执行,测试时需注意手动结束。

3)--throttle参数,指定用户操作间的时延

//指定用户操作(即事件)间的时延

adb shell monkey -p com.tencent.WeChat --throttle 3000 100

说明:throttle单位是毫秒。

4)-s(随机数种子)

用于指定伪随机数生成器的seed值,如果seed值相同,则两次Monkey测试所产生的时间序列也相同

monkey测试1:adb shell monkey -p com.taobao.taobao -s 10 100

monkey测试2:adb shell monkey -p com.taobao.taobao -s 10 100

这个参数对于重测,复现问题比较常用。

04事件类型参数

Monkey的事件类型总共有11种,分别是触摸(Touch)、手势(motion)、二指缩放(pinchzoom)、轨迹(trackball)、旋转(rotation)、基本导航(nav)、主要导航事件(majornav)、系统按键(syskeys)、启动activity(appswitch)、键盘事件(flip)和其它类型事件(anyevent),在日志中分别用0-11来表示;

如:

C:\Users\XXX>adb shell monkey –p cn.mopon.film --throttle 1000 -v –v –v 100

:Monkey: seed=160364725750 count=100

:IncludeCategory: android.intent.category.LAUNCHER

:IncludeCategory: android.intent.category.MONKEY

// Event percentages:

// 0: 15.0%

// 1: 10.0%

// 2: 2.0%

// 3: 15.0%

// 4: -0.0%

// 5: -0.0%

// 6: 25.0%

// 7: 15.0%

// 8: 2.0%

// 9: 2.0%

// 10: 1.0%

// 11: 13.0%

05指定事件比例

1、指定触摸事件的百分比

adb shell monkey -p cn.mopon.film --pct-touch 20 1000

注:--pct-{+事件类别}{+事件类别百分比}用于指定每种类别事件的百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比),--pct-touch {+百分比}用于调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。

2、指定动作事件的百分比

adb shell monkey -p cn.mopon.film --pct-motion 30 1000

注:指定动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。

3、指定多个事件的百分比

adb shell monkey -p cn.mopon.film --pct-touch 20--pct-pinchzoom30 --pct-motion 15 --pct-appswitch 301000

说明:指定多个事件百分比时,各百分比之和不能超过100%

如果不指定事件的百分比,monkey会随机按事件百分比来跑app

06调试类型参数

由于monkey在测试app时,我们需要作长时间的稳定性测试,比如连续测试10小时(monkey不能指定时间,可以指定次数,时间可以在测试次数的日志基础上大概算出来),在测试过程中,app很可能测试时间不久,因为碰到问题而崩溃,此时测试会停止,而达不到我们长期测试的目的,我们需要通过调试参数来让测试执行继续,主要的几个参数如下:

--ignore-crashes指即使应用程序崩溃(Force& Close错误),Monkey依然会发送事件,直到事件计数达到指定的次数为止。

如:

adb shell monkey -p cn.mopon.film --ignore-crashes 10000

说明:即使应用程序崩溃,Monkey依然会发送事件,直到事件计数达到10000为止。

--ignore-security-exceptions指APP发生许可证书错误时,Monkey依然继续发送事件,直到事件数目达到目标值为止

adb shell monkey -p cn.mopon.film --ignore-security-exceptions 1000

--ignore-timeouts指app在发生 ANR(Application No Responding)错误时,Monkey是否停止运行如果使用--ignore-timeouts参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成,如

adb shell monkey -p cn.mopon.film --ignore-timeouts 1000

--kill-process-after-error指APP发生错误时,应用程序停止运行并保持在当前状,如:

adb shell monkey -p cn.mopon.film --kill-process-after-error 1000

当应用程序发生错误时,应用程序停止运行并保持在当前状态,注意系统并不会结束该应用程序的进程。

也多个控制参数一起使用:

adb shell monkey -p cn.mopon.film --ignore-crashes--ignore-timeouts 10000

注:当app崩溃,发生ANR错误时继续测试

标签:shell,Monkey,--,app,adb,事件,测试,monkey
From: https://blog.csdn.net/m0_60889254/article/details/144188513

相关文章

  • 测试工程师要遵守的用例编写规范
    前言在软件开发的快速迭代和不断更新的背景下,测试用例规范的重要性愈发凸显。它不仅帮助测试人员明确测试的目标和方法,还确保测试过程的一致性和可重复性。通过遵循统一的规范,我们可以减少人为错误,提高测试覆盖率,从而确保软件的质量。01什么是测试用例测试用例是测试过程中......
  • uniapp实现加密Token并在每次请求前动态更新(vue、微信小程序、原生js也通用!)
    导语:在Web开发中,Token作为一种身份验证的机制,被广泛应用于前后端交互过程中。本文将为大家介绍如何在每次请求前动态设置加密的Token,并在请求一次后使Token值加1(或其他动态改变的逻辑),从而提高系统的安全性。一、背景知识Token简介 Token是一种身份验证的令牌,通常由服务器......
  • test plateform-01-测试平台概览
    前言大家好,我是老马。在开始之前,我们对测试平台做一个基本的设想。商业上可以参考:apifox之类的测试工具。我们如果想实现,最好是二开,而不是全部从零开始做。是什么?测试平台是一个用于测试和验证软件或硬件系统功能的环境或工具集合。它为开发人员、测试人员和质量保......
  • QWQ智能测试:阿里云开源AI模型推理能力测试
    从玄离199最新的科技补全系列视频:【科技补全26】全球最大盗版视频网站被摧毁;Sora被泄露;网易怒喷腾讯抄袭;新型电脑病毒通过微信群传播;_哔哩哔哩_bilibili中了解到阿里云开源了具有推理能力的AI模型QWQ,为了测试它的推理能力,我们来找一些题目来测试一下他的推理能力。我们来......
  • HTML+CSS+JavaScript网页设计与制作实例 -Apple商城网页(6个页面)
    一、网站描述基于HTML、CSS和JavaScript等技术的综合应用,实现对Apple商城的仿写。该网站包含八个静态页面,分别是落地页、首页、简介、新闻、产品中心等。二、网页作品技术   HTML:用于构建网页的结构和内容,通过标签和属性来定义页面的各个部分。   CSS:用于美化......
  • 最新毕设-Python-食堂就餐系统设计-82280(免费领项目)可做计算机毕业设计JAVA、PHP、爬
    摘要本论文主要论述了如何基于Python开发一个食堂就餐系统,本系统将严格按照软件开发流程进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述食堂就餐系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计。食堂就餐......
  • 请问单元测试和集成测试有什么区别?
    在前端开发中,单元测试和集成测试是两种不同但互补的测试方法,它们的目标是确保代码的质量和稳定性。它们的主要区别在于测试的范围和粒度:单元测试(UnitTesting):范围:最小可测试单元。在前端开发中,这通常指一个函数、组件或模块。目标:验证每个单元是否按照预期独立工作。......
  • 【uniapp】轮播图
    前言Uniapp的swiper组件是一个滑块视图容器组件,可以在其中放置多个轮播图或滑动卡片。它是基于微信小程序的swiper组件进行封装,可以在不同的平台上使用,如微信小程序、H5、App等。效果图前端代码swiper组件<template><viewclass="banner-content"><swiperclass=......
  • Android App获取root权限
    在Android中,获取root权限通常意味着你需要通过su(superuser)命令来执行具有更高权限的操作。对于系统应用(SystemApp)来说,由于它们具有一定的系统权限,可以访问一些普通应用无法访问的资源,但它们通常并不能直接获得root权限,除非设备已经被root过。要使一个应用程序(特......
  • test plateform-00-测试平台设计蓝图规划
    前言大家好,我是老马。最近想设计实现一个测试平台,基本的拼图已经收集的差不多了。后续就是一步步来落地实践了!设计蓝图技术生态测试开源组件data-factory:Autogeneratemockdataforjavatest.(便于Java测试自动生成对象信息)junitperf:Junitperformancerelyo......