概述

Monkey是中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。Monkey自动化测试工具是可视化操作的便利方式工具,提高使用性和效率。

设置monkey种子数,延迟,执行次数

-s 种子数作用:伪随机数生成器的seed值。如果用相同的seed值再次运行monkey,将生成相同的事件序列。

--throttle 延迟作用:在事件之间插入固定的时间(毫秒)延迟,你可以使用这个设置来减缓Monkey的运行速度,如果你不指定这个参数,则事件之间将没有延迟,事件将以最快的速度生成。

-v日志输出等级作用:命令行上的每一个-v都将增加反馈信息的详细级别。简单(默认),除了启动、测试完成和最终结果外只提供较少的信息。中等,提供了较为详细的测试信息,如逐个发送到Activity的事件信息。复杂,提供了更多的设置信息,如测试中选中或未选中的Activity信息。

--ignore-crashes作用:通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

--ignore-security-exception 作用:通常,当程序发生许可错误(例如启动一些需要许可的Activity)导致的异常时,Monkey将停止运行。设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

读取程序包,选择需要测试的包名

-p 程序包作用:如果你指定一个或多个包,Monkey将只允许访问这些包中的Activity。如果你的应用程序需要访问这些包(如选择联系人)以外的Activity,你需要指定这些包。如果你不指定任何包,Monkey将允许系统启动所有包的Activity。指定多个包,使用多个-p,一个-p后面接一个包名。

点击读取程序包通过读取data/data目录下获取所有的程序包名称,首先需要将手机连接到PC,测试连接是否正常,可在cmd里输入adb devices来进行验证;因测试多针对一个特定的APP包,所以需要知道需要测试包的包名;也可以通过adb shell pm list packages列出所有包名来进行查找通过全部选择快速选取所有的应用包,通过全部取消取消已选项。

查看log,生成Monkey log。

Monkey开始,通过adb连接手机,并运行logcat,生成logcat到指定目录。

一键monkey可以自动生成默认参数,直接开始monkey测试。

Monkey的可视化界面是通过python 内置的wx模块来实现,可以快速构建UI界面。

软件主界面的控件排布代码:

1.MyFrame是整个窗体的主入口,通过实例化wx.Frame来显示窗口

class MyFrame(wx.Frame):

//设置默认delay时间值

delayDefault = "2"

//设置默认种子数

seedDefault = "5000000"

//设置默认执行次数

executionFrequencyDefault = "60000000"

logDir = "./"

def __init__(self):

//执行方式定义

excuteMode = ["忽略程序崩溃",

"忽略程序无响应",

"忽略安全异常",

"出错中断程序",

"本地代码导致的崩溃",

"默认"

]

//日志输出等级区分

logMode = ["简单","普通","详细"]

executionModeDefault = excuteMode[0]

//初始化菜单按钮

menuBar = wx.MenuBar()

menu1 = wx.Menu("")

menuBar.Append(menu1, "File")

self.SetMenuBar(menuBar)

//初始化标签栏

wx.StaticText(panel, -1, "种子数:", pos=(xPos, yPos))

self.seedCtrl = wx.TextCtrl(panel, -1, "", pos=(xPos1, yPos))

//绑定点击事件

self.seedCtrl.Bind(wx.EVT_KILL_FOCUS, self.OnAction)

self.seedCtrl.SetFocus()

//初始化标签栏

wx.StaticText(panel, -1, "执行次数:", pos=(xPos, yPos+yDelta))

//设置窗口位置

self.excuteNumCtrl = wx.TextCtrl(panel, -1, "", pos=(xPos1, yPos+yDelta))

//初始化标签栏

wx.StaticText(panel, -1, "延时:", pos=(xPos, yPos+2*yDelta))

self.delayNumCtrl = wx.TextCtrl(panel, -1, "", pos=(xPos1, yPos+2*yDelta))

//初始化标签栏

wx.StaticText(panel, -1, "执行方式:", pos=(xPos, yPos+3*yDelta))

//设置窗口位置

self.excuteModeCtrl = wx.ComboBox(panel, -1, "", (xPos1,yPos+3*yDelta), choices=excuteMode,style=wx.CB_DROPDOWN)

//设置初始化checklistbox,下拉菜单

self.checkListBox = wx.CheckListBox(panel, -1, (xPos, yPos+4*yDelta ), (400, 350), [])

wx.StaticText(panel, -1, "日志输出等级:", pos=(xPos, yPoslayout-yDelta))

self.logModeCtrl = wx.ComboBox(panel, -1, "", (xPos1,yPoslayout-yDelta), choices=logMode,style=wx.CB_DROPDOWN)

//初始化按钮,读取程序包按钮绑定readButton事件

self.readButton = wx.Button(panel, -1, "读取程序包", pos=(xPos, yPoslayout))

self.Bind(wx.EVT_BUTTON, self.OnReadClick, self.readButton)

self.readButton.SetDefault()

//初始化默认参数按钮,绑定defaultButton事件

self.defaultButton = wx.Button(panel, -1, "默认参数", pos=(xPos, yPoslayout+yDelta))

self.Bind(wx.EVT_BUTTON, self.OnResetClick, self.defaultButton)

self.defaultButton.SetDefault()

//初始化一键monkey按钮,按钮绑定quick事件

self.quickButton = wx.Button(panel, -1, "一键Monkey", pos=(xPos+120, yPoslayout+yDelta))

self.Bind(wx.EVT_BUTTON, self.OnQuickStartClick, self.quickButton)

self.quickButton.SetDefault()

2.生成log代码:

//生成log函数

def OnBuildLog(self,event):

os.chdir(self.logDir)

//通过日期创建唯一标识文件名称

date = time.strftime('%Y-%m-%d-%H-%M',time.localtime(time.time()))

dir_m = "Monkey_Log_"+date.replace("-","")

dir0 = "sdcard0_log"

创建目标文件目录

if (os.path.exists(dir_m+"/"+dir0)):

print "already exists"

else:

os.system("mkdir -p "+dir_m+"/"+dir0)

os.chdir(dir_m)

//通过adb命令导出log文件到目标文件夹中

os.system("adb pull /storage/sdcard0/log/ "+dir0)

//查找异常log文件

self.BuildFatalLog(os.getcwd())

//遍历所有的log文件函数

def ListFiles(self,path):

//遍历文件件

for root,dirs,files in os.walk(path):

log_f = ""

for f in files:

if(f.find("main") == 0):

log_f = f.strip()

//切换到目标目录

os.chdir(root)

//通过grep 命令查找所有的异常文件

if (log_f != ""):

grep_cmd="grep-Eni-B2-A20'FATAL|error|exception|system.err|androidruntime' "+log_f+" > "+log_f+"_fatal.log"

os.system(grep_cmd)

//查找异常文件函数

def BuildFatalLog(self,path):

self.ListFiles(path)

3.读取程序包代码分析:

//读取程序包函数声明

def OnReadClick(self, event):

//清空控件内容

self.checkListBox.Clear()

//通过读取手机data/data目录来确认所有的包名

os.system("adb shell ls data/data > ~/log.log")

//解析log.log文件

home = os.path.expanduser('~')

f = open(home+"/log.log", 'r')

line = f.readline()

while line:

line = f.readline()

if (line != ""):

print "===="+line

//将解析的包名,添加包名checkbox中显示

self.checkListBox.Append(line)

f.close()

monkey测试软件,Monkey自动化测试工具相关推荐

  1. monkey测试_adb monkey压力测试检测安卓手机的5大步骤,你知道吗?

    一.monkey是什么 1.monkey程序由android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar 2.Mon ...

  2. Monkey测试1——Monkey的使用

    1 Monkey工具使用 2 3 一. 什么是Monkey 4 5 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输 ...

  3. 【Monkey测试】Monkey测试详解

    一.什么是 Monkey 测试 Monkey 测试是通过向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对应用程序客户端的稳定性测试: 通俗来说,Monkey 测试即" ...

  4. autorunner测试java,AutoRunner自动化测试工具

    工具介绍: AutoRunner是黑盒测试工具.自动化测试工具,可以用来完成功能测试.回归测试,可以提高测试效率,降低测试人工成本. 应用场景: Windows类型对象,一般为用C++/Delphi/ ...

  5. Monkey测试2——Monkey测试策略

    Monkey的测试策略 一. 分类 Monkey测试针对不同的对象和不同的目的采用不同的测试方案,首先测试的对象.目的及类型如下: 测试的类型分为:应用程序的稳定性测试和压力测试 测试对象分为:单一a ...

  6. monkey测试===通过monkey测试检查app内存泄漏和cpu占用

    最近一直在研究monkey测试.网上资料很多,但都是一个抄一个的.原创的很少 我把检查app内存泄漏的情况梳理一下: 参考资料: Monkey测试策略:https://testerhome.com/t ...

  7. 开源测试框架-UI自动化测试工具Selenium的安装与常用操作-Java语言

    为什么选择Selenium作为测试工具: 开源免费 容易与单元测试框架结合 代码可自主掌握,对于搭建框架,平台等有不可替代的优势 ​ Selenium也是一个用于Web应用程序测试的工具,支持多平台, ...

  8. Monkey测试4——Monkey命令行可用的全部选项

    Monkey命令行可用的全部选项 常规 --help 列出简单的用法. -v 命令行的每一个-v将增加反馈信息的级别. Level 0(缺省值)除启动提示.测试完成和最终结果之外,提供较少信息. Le ...

  9. 测试管理和自动化测试工具篇

    1.测试需求分析? 验证需求的合理性和可行性. 具体的需求中提取出测试需求,功能性需求和非功能性的需求. 功能性需求:用户操作系统是所涉及到的基本操作. 非功能性需求:在功能性的需求上做一些限制. 非 ...

最新文章

  1. 【算法】差分与前缀和 算法详解+例题剖析
  2. Spark:如何替换sc.parallelize(List(item1,item2)).collect().foreach(row={})为并行?
  3. 02 | 系统可用性:没有故障,系统就一定是稳定的吗?
  4. Eclipse可以执行jsp文件却无法访问Tomcat主页
  5. swing组建的层次
  6. 十大必须掌握的 Chrome 浏览器开发者工具
  7. node express框架实现下载文件功能
  8. 第八届泰迪杯数据挖掘赛C题总结
  9. JSP教程:学习路线和开发工具安装视频
  10. 不确定性管理,更需要领导力
  11. 住宅和公寓有什么区别
  12. 计算机的中央处理器CPU包括什么,中央处理器cpu由哪些组成 中央处理器的作用是什么...
  13. matlab模拟塞曼图谱,塞曼效应实验中法布里-珀罗标准具的Matlab模拟
  14. 如何用行式 Excel 数据制作不定行列的分组交叉统计表
  15. alpha冲刺(事后诸葛亮)
  16. 电力系统暂态稳定性分析,发电机相轨迹,转速功角曲线分析。ieee39,四机两区。
  17. 航天五院待遇2011zz
  18. 儒家的“天下观念”与“文化决定论”
  19. Sentinel滑动时间窗限流算法原理及源码解析(下)
  20. AutoJs学习-天猫养猫活动

热门文章

  1. eclipse注释快捷键失效问题
  2. aspx文件的Page指令参数
  3. 自播GMV单场过百万、涨粉10万 国民品牌海澜之家如何做好快手直播
  4. dubbo是什么?dubbo能做什么?dubbo怎么使用?
  5. 计算机考证不在可以报大专吗
  6. u盘安装完linux系统没镜像,U盘刻录kali linux启动盘提示找不到镜像解决方案
  7. hualinux 进阶 vue 4.1:axios跨源错误CORS解决
  8. android 百分比布局操作sp,constraintlayout中的百分比布局
  9. php取整v,PHP取整数值的方法
  10. APP UI实用素材|注册/登录界面