python+monkey实现app的monkey测试

article/2025/10/18 14:53:53
  • 目标
    使用monkey对当前windows电脑连接的一个或者多个手机设备,完成对某个app的monkey测试,输出monkey日志以及monkey脚本。
  • 思路
  1. 通过terminal交互控制台,获取测试的app以及可以测试的设备。
  2. 将获取的参数和固定的monkey脚本1结合,创建测试目录、测试脚本。
  3. 执行脚本,同时输出结果,完成测试。
    在这里插入图片描述
  • 具体实现
    1.terminal的交互
    在这里插入图片描述
    def GetDeviceAndPackage(self):"""获取当前连接的设备信息"""# 具有清屏功能os.system("cls")# 执行系统命令并返回执行后的结果rt = os.popen('adb devices').readlines()n = len(rt) - 2print("当前已连接待测手机数为:" + str(n))print("monkey测试即将开始......")self.count = input("请输入你要进行的monkey测试次数:")self.testmodel = input("请输入你是要进行单次测试还是多次连续测试,请输入(1-代表单次测试,2-代表多次连续测试):")ds = []for i in range(n):nPos = rt[i + 1].index("\t")ds.append(rt[i + 1][:nPos])self.dev = ds[i]# 获取系统版本cmd_s = 'adb -s {} shell getprop ro.build.version.release'.format(self.dev)release = os.popen(cmd_s).readline().replace('\n', '')# 获取手机型号cmd_s = 'adb -s {} shell getprop ro.product.model'.format(self.dev)self.model = os.popen(cmd_s).readline().replace('\n', '')# 手机厂商cmd_s = 'adb -s {} shell getprop ro.product.brand'.format(self.dev)brand = os.popen(cmd_s).readline().replace('\n', '')# 查找测试的appcmd_s = 'adb -s {}  shell pm list packages | find "{}"'.format(self.dev, self.app_name)self.packagename = os.popen(cmd_s).readline().replace('\n', '')if self.packagename is None:# 手机未安装print(' {} is not installed in {}.'.format(self.app_name, self.model))breakelse:self.packagename = self.packagename.split(':')[-1]

2.完成测试目录、测试脚本的创建
在这里插入图片描述

    def CreateMonkeyFile(self):"""生成monkey脚本"""# 测试记录存放位置filedir = os.path.exists(self.path)if filedir:# print ("File Exist!")passelse:os.mkdir(self.path)self.path_app = self.path + '\\' + self.app_namefiledir = os.path.exists(self.path_app)if filedir:# print("File Exist!")passelse:os.mkdir(self.path_app)# 按设备ID生成日志目录文件夹path_device = self.path_app + '\\' + self.app_name + '-' + self.modeldevicedir = os.path.exists(path_device)if devicedir:# print ("File exist!")passelse:os.mkdir(path_device)file_cmd = self.path_app + '\\' + self.model + '-logcat' + '.cmd'wl = open(file_cmd, 'w')wl.write('adb -s ' + self.dev + ' logcat -v time *:W > ' + path_device + '\\logcat_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.txt\n')wl.close()# monkey脚本文件file_cmd = self.path_app + '\\' + self.model + '.cmd'# 通用monkey命令# 指定系统事件百分比syskeys = 5# 调整触摸事件的百分比touch = 55# 调整动作事件的百分比motion = 20# 指定Activity启动的百分比appswitch = 0# 指定其他事件的百分比anyevent = 20# 在事件之间插入特定的延时时间throttle = 300cmd_s = 'adb -s {} shell monkey -p {} --monitor-native-crashes --ignore-crashes --pct-syskeys {} --pct-touch {} --pct-appswitch {} --pct-anyevent {} --pct-motion {} --throttle {} -s %random% -v {} > {}\\monkey_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.txt\n'.format(self.dev, self.packagename, syskeys, touch, motion, appswitch, anyevent, throttle, self.count, path_device)if self.testmodel == '1':wd = open(file_cmd, 'w')wd.write(cmd_s)wd.write('@echo 测试成功完成,请查看日志文件~')wd.close()elif self.testmodel == '2':wd = open(file_cmd, 'w')wd.write(':loop')wd.write('\nset /a num+=1')wd.write('\nif "%num%"=="4" goto end')wd.write('\n' + cmd_s) wd.write('@echo 测试成功完成,请查看日志文件~')wd.write('\nadb -s ' + self.dev + ' shell am force-stop ' + packagename)wd.write('\n@ping -n 15 127.0.0.1 >nul')wd.write('\ngoto loop')wd.write('\n:end')wd.close()

3.测试脚本的执行

    def RunMonkey(self):for file in os.listdir(self.path_app):if os.path.isfile(os.path.join(self.path_app, file)) == True:if file.find('.cmd') > 0:os.system('start ' + os.path.join(self.path_app, '"' + file + '"'))  # dos命令中文件名如果有空格,需加上双引号time.sleep(1)
  • 实现效果
    terminal的交互:在这里插入图片描述
    脚本执行:
    在这里插入图片描述
    日志输出:
    在这里插入图片描述

  1. 如果有特定的monkey参数要求,可以调节一下设置,实现monkey脚本的变动。
    在这里插入图片描述 ↩︎


http://chatgpt.dhexx.cn/article/Z4WdkB2v.shtml

相关文章

最全的monkey测试过程及分析

一、首先第一步安装Android SDK,完成后。编写测试脚本,我的脚本已经编写好。具体大家可以从网上Google针对自己的情况再进行详细的编改。 ECHO OFFECHO.:::::::::::::::::::::::::::::::::::::::::::::::::ECHO.:: 分析Monkey日志 …

【monkey】monkey测试入门

目录 一、安装 二、真机或者模拟器 三、基本命令 (一)基础参数 (二)调试选项 四、 停止命令 五、测试结果分析 (一) 初步分析方法 (二)一般的测试结果分析: 一、…

Monkey测试个人笔记

安卓monkey简介 Monkey是一款安卓自带的、java编写的app自动化测试工具,monkey是猴子的意思,所以从原理上说,它的自动化测试就类似猴子一样在软件上乱敲按键,猴子什么都不懂,就爱捣乱。Monkey原理也是类似,…

monkey测试工具

Monkey的概念: “猴子测试”是指没有测试经验的人甚至对计算机根本不了解的人(就像猴子一样)不需要知道程序的任何用户交互方面的知识,如果给他一个程序,他就会针对他看到的界面进行操作,其操作是无目的的…

Monkey的测试原理和方法

参考资料:http://blog.csdn.net/io_field/article/details/52189972 一、Monkey测试原理:Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等)&#xf…

iOS端Monkey测试

说起Monkey测试,大家想到的是monkey测试只有安卓有,monkey测试只针对安卓app,今天给大家分享一下Monkey测试在iOS端也能跑!iOS端app也能使用Monkey测试来执行稳定性测试。 一、环境准备 1、准备Mac设备,并安装xcodeI…

Monkey测试工具详解

Monkey测试工具简介: Monkey是Android SDK 中附带的一个工具;Monkey测试的原理:利用socket通讯(Android客户端和服务器以TCP/UDP方式)的方式来模拟用户的按键输入、触摸屏输入、手势输入等;Monkey测试的…

Android Monkey测试

monkey通常用于对app进行压力测试,通过monkey工具在模拟器或设备中产生类似用户点击、触摸、手势等一些系统级的伪随机事件流以测试app的稳定性,这好比一只猴子随意操作设备。 一、monkey原理 monkey是一个用java编写的脚本,设备中存放在sy…

Monkey测试全过程

1.monkey测试的概念 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性…

Monkey测试(APP稳定性)

目录 1、Monkey简介 2、monkey程序介绍 3、Monkey测试前准备 4、Monkey测试命令 5、 Monkey测试结果(pass或者fail)的判断 6、Monkey Log的简单分析 7、汇总如图 1、Monkey简介 Monkey是Androld中的一个命令行工具,可以运行在模拟器里…

monkey 测试介绍

目录 前言 环境搭建 什么是Monkey Monkey 用来做什么 Monkey程序介绍 Monkey 架构 Monkey弱点 Monkey 参数大全 Monkey 命令 基本参数介绍 Monkey 实例 Monkey 查看包名 Monkey 日志分析 必须重视Crash 前言 Monkey 是Android SDK提供的一个命令行工具&#xff0…

一个简单的monkey测试工具

Monkey的概念: “猴子测试”是指没有测试经验的人甚至对计算机根本不了解的人(就像猴子一样)不需要知道程序的任何用户交互方面的知识,如果给他一个程序,他就会针对他看到的界面进行操作,其操作是无目的的…

monkey测试详解

一、monkey测试的定义 Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对应用程序客户端的稳定性测试;通俗来说,Monkey 测试即“猴子测试”,是指像猴子一样&…

Monkey测试

一、什么是 Monkey 测试 Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对应用程序客户端的稳定性测试;通俗来说,Monkey 测试即“猴子测试”,是指像猴子一样&a…

使用Monkey进行软件测试(随机测试+脚本测试)

文章目录 一、基础概念二、monkey测试的优缺点2.1 优点2.2缺点2.3 解决方案2.3.1 二次开发2.3.2 指定测试页面2.3.3 调整各种事件的比例2.3.3 编写自定义测试脚本2.3.4 分析APP特性,选择合适的方案 三、monkey测试的基本过程3.1 环境准备3.1.1环境3.1.2 配置过程 3.…

【Monkey测试】Monkey测试详解

一、什么是 Monkey 测试 Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对应用程序客户端的稳定性测试;通俗来说,Monkey 测试即“猴子测试”,是指像猴子一样&a…

Linux 的 Kill -9命令

大家对kill -9 肯定非常熟悉,在工作中也经常用到。特别是你去重启tomcat时。 可是多半看来,我们对-9的理解只是表面而已。 很少有人(包括我)认真的去了解一下 kill -n 这个n到底是什么东东。自我批评一下。 好吧。我们来好好的认识…

kill进程.bat

输入端口号kill进程若出现中文乱码问题,则打开文件,点击另存为,将编码格式从UTF-8,改为ANSI,并将拓展名改为.bat,保存即可 echo off setlocal enabledelayedexpansion set /p port请输入端口号&#xff1…

shell中的kill命令

简介: 无论你使用哪种操作系统,你一定会遇到某个行为失常的应用,它把自己锁死并拒绝关闭。在Linux(还有Mac),你可以用一个"kill"命令强制终结它。在这个教程中,我们将展示给你多种方式使用"kill"…

Mysql的kill命令

在MySQL中有两个kill命令:一个是kill query 线程id,表示终止这个线程中正在执行的语句;一个是kill connection 线程id,这里connection可缺省,表示断开这个线程的连接,当然如果这个线程有语句正在执行&#…