monkey源码分析(monkey脚本python)
本文目录一览:
安卓monkey测试中的结果怎么分析
一. 初步分析方法:
Monkey测试出现错误后,一般的差错步骤为以下几步:
1、 找到是monkey里面的哪个地方出错
2、 查看Monkey里面出错前的一些事件动作,并手动执行该动作
3、 若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样
一般的测试结果分析:
1、 ANR问题:在日志中搜索“ANR”
2、 崩溃问题:在日志中搜索“Exception”
二. 详细分析monkey日志:
将执行Monkey生成的log,从手机中导出并打开查看该log;在log的最开始都会显示Monkey执行的seed值、执行次数和测试的包名。
首先我们需要查看Monkey测试中是否出现了ANR或者异常,具体方法如上述。
如何定义正在使用的通讯设备
LIBUSB是一款简单好用的USB通讯开发库,一般HID设备用该库通讯能大大降低开发周期,使用如下,首先需要为设备安装驱动
在libusb的bin目录下有一个inf_wirzed.exe的文件,该文件是生成驱动所用,具体步骤可以网上百度,很是傻瓜式操作,安装好驱动之后就可以使用其通讯函数了,
安装好驱动之后的情况如下

使用visual studio开发,将lib_msvc目录下的libusb.lib文件添加到工程目录并将lusb0_usb.h文件加入工程,如下

之后在MFC工程中如下操作
OnInitDialog方法中调用usb_init函数,这是初始化函数库的,每个工程需要而且仅仅需要初始化一次.
查找系统中全部USB的方法如下
usb_find_busses();
usb_find_devices();//重新寻找设备
for (bus = usb_get_busses(); bus; bus = bus-next)
{
for (dev = bus-devices; dev; dev = dev-next)
{
usbCount++;
deviceName.Empty();
handle = usb_open(dev);
usb_get_string_simple(handle,dev-descriptor.iProduct,nameBuffer,128);
usb_close(handle);
pidBuffer[usbCount-1] = dev-descriptor.idProduct;//枚举所有设备
vidBuffer[usbCount-1] = dev-descriptor.idVendor;
pvnBuffer[usbCount-1] = dev-descriptor.bcdDevice;
deviceName.AppendFormat("%s",nameBuffer);
((CComboBox*)GetDlgItem(IDC_COMBO_USB_DEVICE_ENMU))-AddString(deviceName);
}
}
打开usb设备的方法如下
//现在遍历全部设备,找到对应PID vid的设备打开
usb_find_busses();
usb_find_devices();//重新寻找设备
for (bus = usb_get_busses(); bus; bus = bus-next)
{
for (dev = bus-devices; dev; dev = dev-next)
{
if(dev-descriptor.idProduct == myPid dev-descriptor.idVendor)
{
//PID VID相同
usb_handle = usb_open(dev);
}
}
}
发送数据的方法
char sendBuffer[64] = {0};
CString sendString;
GetDlgItem(IDC_EDIT_USB_SEND_MESSAGE)-GetWindowText(sendString);
for(int i = 0; i 64; i++)
{
if(i = sendString.GetLength())sendBuffer[i] = 0;
else
{
sendBuffer[i] = sendString.GetAt(i);
}
}
usb_claim_interface(usb_handle, 0);//默认设备
usb_interrupt_write(usb_handle,0x01,sendBuffer,64,100);
usb_release_interface(usb_handle, 0);
接收数据的方法
char receiveBuffer[64] = {0};
CString receiveString;
int recvCount = 0;
usb_claim_interface(usb_handle, 0);//默认设备
recvCount = usb_interrupt_read(usb_handle,0x81,receiveBuffer,64,100);
usb_release_interface(usb_handle, 0);
if(recvCount 0)
{
GetDlgItem(IDC_EDIT_USB_RECV_SHOW)-GetWindowText(receiveString);
for(int i = 0; i recvCount; i++)
{
receiveString.AppendChar(receiveBuffer[i]);
}
GetDlgItem(IDC_EDIT_USB_RECV_SHOW)-SetWindowText(receiveString);
每次发送和接手之前需要调用usb_claim_interface将函数库和操作系统关联起来
有了这些基本方法,通讯应该就不成问题了
详细代码见链接
使用LIBUSB实现和自定义通讯设备通讯--MFC代码在末尾的更多相关文章
IOT设备通讯,MQTT物联网协议,MQTTnet
一.IOT设备的特性 硬件能力差(存储能力基本只有几MB,CPU频率低连使用HTTP请求都很奢侈) 系统千差万别(Brillo,mbedOS,RIOT等) 如使用电池供电,电量消耗敏感 如果是小设备, ...
厂商自定义USB设备固件程序及特性
通过前面的学习,大家应该对USB固件程序结构有了比较深的认识,现在再来详细说说固件里决定设备识别成厂商自定义USB设备的地方有哪些,或者说厂商自定义USB设备的固件特性有哪些. 之前不止一次说过学习U ...
厂商自定义USB设备类概述
USB协会将常用具有相同/相似功能的设备归为一类,并制定了相关的设备类规范,这样就能保障只要依照同样的规范标准,即使不同的厂商开发的USB设备也可以使用同样的驱动程序,而且操作系统中无须为每种设备提供 ...
JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是clas ...
Windows Phone:自定义字体在xaml和代码中使用
最近,我的小应用认字更新了一个能发声的版本,朋友对Speech做读音没有兴趣,反而对其中使用的楷体文字表示了兴趣,也许Speech的文章比较多,这次我对这个自定义字体在xaml和代码中 ...
C#自定义FTP访问类的代码
如下资料是关于C#自定义FTP访问类的代码,应该对各朋友有帮助. using System; using System.Collections.Generic; using System.Text; ...
springboot扫描自定义的servlet和filter代码详解_java - JAVA
文章来源:嗨学网 敏而好学论坛 欢迎大家相互学习 这几天使用spring boot编写公司一个应用,在编写了一个filter,用于指定编码的filter,如下: /** ...
设备通讯——RS232
RS232的接口有两种--一种公头.一种母头,两种头的引脚是有区别的 MAX232电路图: 注意:串口通讯需要交叉接线.
安卓MonkeyRunner源码分析之与Android设备通讯方式
如前文谁动了我的截图?--Monkeyrunner takeSnapshot方法源码跟踪分析所述,本文主要会尝试描述android的自动化测试框架MonkeyRunner究竟是如何和目 ...
随机推荐
织梦DEDECMS更新6月7日补丁后出现版权链接的删除办法
说最近网站底部多出了一个Power by DedeCms的超链接版权信息,但是该网友最近只是升级了0607更新补丁,其它的源代码并没有改动,而以前的文章页面并没有,看来是这次更新dedecms后才被加 ...
Converting between IEEE 754 and Float (Format related
The float can be converted to well known single-precision IEEE 754 number, why 754? It's the standar ...
HDU2199,HDU2899,HDU1969,HDU2141--(简单二分)
二分是一种很有效的减少时间开销的策略, 我觉得单列出二分专题有些不太合理, 二分应该作为一中优化方法来考虑 这几道题都是简单的使用了二分方法优化, 二分虽然看似很简单, 但一不注意就会犯错. 在写二分 ...
java 随机流
Example10_8.java import java.io.*; public class Example10_8 { public static void main(String args[]) ...
ListMap去重排序
数据格式 [ { "id":"d3e8a9d6-e4c6-4dd8-a94f-07733d3c1b59", "parentId":" ...
MQ日常维护操作手册
假设队列管理器为QMgrName,以下所有使用QMgrName的地方您都可以替换成您维护的mq队列管理器名称. 一.MQ的启动与停止 用root用户启/停需要root用户包含在mqm组中. 1.MQ的 ...
jquery控制audio的播放与暂停
audio id="audio" src='music.mp3'/audio script type="type/javascri ...
apt
今天单元测试看到巨长字符串被加了很多引号,想起以前可以用跳脱符断行,试了不行,google说java7可以,我操. ...
C# 经典入门12章-使用泛型类型-2
关于jdk环境变量配置成了1.6.0_39 32位jdk 的路径 cmd中java -version却还是显示 64位或者其他jdk 路径的解决方法
其实是c盘或者其他盘的 jdk 安装的太多了,把其他的都卸载掉就行了
monkey命令集成在android哪个目录
# shell.
#
base=/system
export CLASSPATH=$base/framework/monkey.jar
exec app_process $base/bin com.android.commands.monkey.Monkey $*exec 会运行起/system/framework/monkey.jar这只Java程序.后面我们还会用到这个脚本.
monkey源码:development\cmds\monkey\src\com\android\commands\monkey
1 adb shell monkey -help
行monkey可以采用两种方式:系统默认方式和script方式
显示monkey帮助信息:如下:
sh-3.2# monkey -help
monkey -help
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions]
Monkey报告整理工具开发(一)——需求分析v1.1
v1.0 2017.06.20 三笑奈何 初稿
v1.1 2017.06.27 三笑奈何 修改
一、工具开发背景
在日常测试中,我们经常需要用到monkey测试,隔几个小版本就需要进行一轮monkey测试,monkey测试可以是单个APK的测试,也可以是全测试。
每一次测试完成后,经常需要几个小时去整理报告,作者认为,这种类型的重复性工作,一定程度浪费monkey源码分析了人力物力,自认为是讨厌重复性的工作的人,这种类型的重复性工作,可以交给程序自动完成,用于解放人力。一个不会偷懒的测试,不是好测试,于是就想到了这个报告整理工具。
二、基本功能概况
以下功能为基本构想,在工具开发过程中,会根据需求进行修改
1、输入log文本,自动生成报告文本
2、自动判断monkey是否正常跑完全程
3、自动计算monkey跑测时长
4、自动整理CRASH、ANR、exception这三类问题内容,并统计其个数(主要功能)
三、基本功能需求分解
1、自动检测本目录下文件,输入文件为Stability_base_err.txt、Stability_base.txt
2、判断Stability_base_err.txt文件中是否有monkey test complete字样,用以判断是否跑完monkey全程
3、输入Stability_base_err.txt文件,查找CRASH关键字(匹配大小写)、查找ANR关键字(匹配大小写)、查找exception关键字(不匹配大小写)
4、对查找的结果进行替换、删除重复项等筛选操作
5、计算monkey时长(2017.06.27完善)
四、重要功能具体实现步骤
需求分解的第4点,主要借鉴Notepad++和Excel处理文本查找、替换、删除重复项等功能,来分解需求,以下为具体步骤实现,以下“ * ”符号代表全部的意思(如java.lang.RuntimeException:*代表java.lang.RuntimeException:abc,则*=abc)
将Stability_base_err.txt文本的输入内容,以“//”符号为标记,排列为一行
CRASH
1、将3中的CRASH查找结果写入到新生成的文件CRASH.txt
a.替换" // "为空
b.替换" (pid.*)"为空
c.全选删除重复项,只保留相同项中的第一项
ANR
1、将3中的ANR查找结果写入到新生成的文件ANR.txt
a.替换" // "为空
b.替换“ (*)”为空
c.全选删除重复项,只保留相同项中的第一项
exception
1、将3中的exception查找结果写入到新生成的文件exception.txt
a.替换" // "为空
b.全选删除重复项,只保留相同项中的第一项
c.替换" java.lang.RuntimeException:* ",保留java.lang.RuntimeException
d.全选删除重复项,只保留相同项中的第一项
e.替换Short Msg:为空
f.替换Long Msg:为空
g.替换Caused by:为空
h.替换:*为空
i.全选删除重复项,只保留相同项中的第一项
本工具开发未真正遵循软件工程开发过程,仅仅是用于测试,提高团队测试效率,要求的是快速开发,可能写得不大好,有好提议欢迎留言。
PSmonkey源码分析:工具开发进度需要视手上项目情况松紧程度而定,尽量争取早日完成