App压力测试整理 Alan

摘要:
压力测试结果:碰撞:碰撞。应用程序在使用过程中异常退出ANR:ApplicationNotResponsingMonkeyRunnerAPIsMonkeyRunner:用于连接设备或仿真器MonkeyDevice:提供应用程序的安装和卸载,发送模拟事件MonkeyImage:完成图像保存,并比较操作Monkey:为adbshell MonkeyRunner中的用户或系统生成伪随机事件

压力测试结果
CRASH:崩溃,应用程序在使用过程中,非正常退出
ANR:Application Not Responding


MonkeyRunner APIs
MonkeyRunner:用来连接设备或模拟器
MonkeyDevice:提供安装、卸载应用,发送模拟事件
MonkeyImage :完成图像保存,及对比的操作

Monkey:在adb shell中,生成用户或系统的伪随机事件
MonkeyRunner:通过API定义特定命令和事件控制设备

MonkeyRunner提供了一系列的API
可以完成模拟事件及截图操作
MonkeyScript
是一组可以被Monkey识别的命令集合
可以完成重复固定的操作

1.为什么要进行压力测试?
App不稳定
提高产品的留存率

2.什么时候开展压力测试
首轮功能测试通过后
下班后的夜间进行

如何实现自动化测试:
模拟各种事件流

adb:Android Debug Bridge
adb与手机里的monkey进行通讯
adb调试应用的入口

adb shell monkey 1000
activityResuming(com.android.documentsui)
表示app从前台调入后台...又从后台恢复到前台的过程

获取App包名
adb logcat|findstr START (cmp后面的是app的包名)

给指定包打压力
adb shell monkey -p package 1000

-v
作用:命令行上的每一个-v都将增加反馈信息的详细级别
比较常用的是-v -v -v ,即最多详细,一般会保存到指定
文件中供开发人员查找bug原因时使用

--throttle参数
指定事件之间的间隔
adb shell monkey -p packagename --throttle 间隔毫秒 执行次数

seed参数
指定随机生成数的seed值
如果用相同的seed值再次运行monkey,将生成相同的事件序列
adb shell monkey -s<seed><event-count>
adb shell monkey -p com.bit_health.android -s 7672 1000

触摸事件
设定触摸事件百分比
adb shell monkey --pct-touch <percent>
adb shell monkey -v -p com.bit_health.android --pct-touch 100 1000
可以在输出结果中的Event percentages中查看是否是
触摸事件百分百,0表示触摸事件

动作事件
设定动作事件百分比
adb shell monkey --pct-motion <percent>
这里设定的百分比要与其他事件的百分比之和等于100
adb shell monkey -v -p com.bit_health.android --pct-touch 50 --pct-motion 30 500

轨迹球事件
设定轨迹球事件百分比
adb shell monkey --pct-trackball <percent>

基本导航事件
设定基本导肮事件百分比,输入设备的上、下、左、右
adb shell monkey --pct-nav <percent>

主要导航事件
设定主要导航事件百分比,兼容中间键、返回键、菜单按键
adb shell monkey --pct-majornav <percent>

系统导航事件
设定系统导航事件百分比,HOME、Back、拨号、音量键
adb shell monkey --pct-syskeys <percent>

启动Activity事件
设定启动Activity的事件百分比
adb shell monkey --pct-appswitch <percent>

不常用事件
设定不常用事件的百分比
adb shell monkey --pct-anyevent <percent>

崩溃事件
忽略崩溃和异常
adb shell monkey --ignore-crashes <event-count>

超时事件
忽略超时事件
adb shell monkey --ignore-timeouts <event-count>
如果发生了ANR事件,可以在手机中查看
1.输入adb shell命令,进入到手机
2.跳转anr目录,cd /data/anr/
3.在anr目录中,more traces.txt 查看报错信息

Monkey Script
1.DispatchTrackball命令
轨迹球事件
DispatchTrackball(long downtime,long eventide,
int action,float x,float y,float pressure,
float size,int metastate,float xprecision,
float ypercision,int device,int edgeflags)

action 0代表按下,1代表谈起,x和y代表坐标点

2.DispatchPointer命令
点击事件
DispatchPointer(long downtime,long eventide,
int action,float x,float y,float pressure,
float size,int metastate,float xprecision,
float ypercision,int device,int edgeflags)
action 0代表按下,1代表谈起,x和y代表坐标点

3.DispatchString命令
输入字符串事件
DispatchString(String text)

4.LaunchActivity命令
启动应用
LaunchActivity(package,Activity)

5.UserWait命令
等待事件
UserWait(1000)

6.DispatchPress命令
按下键值
DispatchPress(int keycode)#keycode 66 回车键

实例:重复点击搜索100次
1.启动App
2.点击输入框
3.输入查询词
4.点击键盘的回车
5.点击搜索按钮
6.等待结果的出现
7.点击clear按钮

手机不能执行电脑上的脚本
将脚本push到手机中
adb push mook.script /data/local/tmp/

之后执行adb shell monkey -f mook.script 2
执行的效果是无法正确启动app
(!!!)需要在mainfest清单文件中声明android:exported="true"
意思是允许该activity被外部调用

使用monkey script编写脚本最大的困难是没有调试功能
也没有截屏操作

MonkeyRunner
1.MonkeyRunnner API-alert
警告框
void alert(String message,String title,String okTitle)

2.MonkeyRunner Api-waitForConnection
等待设备连接,有多个device id,需要指明具体哪个设备
waitForConnection(float timeout,String deviceid)

3.MonkeyDevice API -drag
拖动
drag(tuple start,tuple end ,float duration,integer steps)
start 起点位置
end 终点位置
duration手势持续的时间
steps 插值点的步数,默认10

4.MonkeyDevice API -press
按键
press(String keycode,dictionary type)
keycode名,Down,UP,DOWN_AND_UP

5.MonkeyDevice API -startActivity
启动应用
startActivity(package+'/'+activity)
6.MonkeyDevice API - touch
点击
touch(integer x,integer y,integer type)
x 坐标值, y坐标值
type:DOWN,UP,DOWN_AND_UP

7.MonkeyDevice API - type
输入
type(String message)

8.MonkeyDevice API - takeSnapshot
截屏
MonkeyImage takeSnapshot()

9.MonkeyImage API - sameAs
图像对比
boolean sameAS(MonkeyImage other,float percent)

10.MonkeyImage API - writetoFile
保存图像文件
void writetoFile(String path,String format)

免责声明:文章转载自《App压力测试整理 Alan》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java几种常用JSON库性能比较iOS 项目优化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

软件设计的十二个最佳步骤

     软件设计的十二个最佳步骤    许多公司理解不了为何自己设计的软件没有达到预期的效果,也理解不了为何用户会遇到预料不到的错误。据微软加拿大公司的可用性顾问David Crow和多伦多的软件开发公司Radiant Core总裁Jay Goldman介绍,没有比醒来后才发现需要可用性测试更糟糕的了。近日在加拿大辛尼加学院举行的自由软件和开源软件讨论...

配置管理工具比較

配置管理工具比較怎样选择配置管理工具  每一个软件项目,不管是project类项目,还是产品类项目,都必须经历需求分析、系统设计、编码实现、集成測试、部署、交付、维护和支持的过程。在这个过程中,将生成各种各样不同的工件,包含文档、源程序、可执行代码、支持库。更可怕的是,频繁出现的变更是不可避免的,因此面向如此庞大且不断变动的信息集,怎样使其有序、高效地存...

用HTML,CSS和JavaScript创建iPhone/iPad应用程序

象大多数iPad粉丝和程序员一样,我有一个梦想,那就是如果不需要昂贵的Apple设备,不要繁琐的审批程序,不要为发布应用交钱就能开发iPad 应用程序该多好.现在这个梦想就要实现了,那就是网页应用程序. 那么,怎样才能让网页象看起来象本机程序一样呢?你需要做这些工作: 全屏幕:(去掉浏览器的地址栏和按钮栏);防止窗口滚动和缩放; 响应多点触摸和手势事件;...

Linux环境下常用软件(个人笔记编辑更改中)

近期使用CentOS,就在这里记录一下。首先,个人版本是CentOS6.5,属于centos系列,Fedora系列的理论上也可以用。 工欲善其事,必先利其器,这里介绍我的软件包配置: 1、vim(增强版vi)和Emacs(PS:有人说他们是神的编辑器和编辑器的神) 对vim: # yum -y install vim*或者 #apt-get install...

实验五 团队作业1:软件研发团队组建与软件案例分析

项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 这个作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/12709461.html 团队名称 秃头小宝贝 团队的课程学习目标 通过团队合作学习的方法,掌握团队开发的要点,理解团...

nodejs中使用node-sass

在原生nodejs中使用Sass 1.创建根目录文件名称为demo,运行 cnpm install(淘宝源安装)安装node_modules 2.安装express:cnpm install express 3.创建js文件命名为 app.js 并编写如下代码 var express = require('express'); var app = expr...