app性能测试

环境准备:android

一、安装jdkshell

二、安装安卓sdk网络

三、配置环境变量:app

ANDROID_HOME=../sdk(sdk的目录下)tcp

PATH=%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\build-tools\android-4.4.2;测试

注意:jdk和sdk的版本必须一致(要么都是32位,要么都是64位)ui

 

安装genymotionspa

一、双击genymotion-2.8.0.exe开始软件的安装,默认显示English指针

二、点击OK,设置选择软件的安装位置,默认为C:\Program Files\Genymobile\Genymotion,也能够选择别的位置日志

三、设置开始菜单文件的名称,默认为Genymotion

四、创建桌面快捷方式图标

五、继续下一步安装便可

六、完成后将将translations文件夹放到安装目录下,覆盖原来的文件,默认安装文件夹位置在:
C:\Program Files\Genymobile\Genymotion

七、运行程序就是中文版了

 

使用教程

一、在主界面上点击Add按钮

二、而后在弹出来的界面输入你注册的帐号和密码而后点击connect按钮,在咱们下载的时候填写的邮箱中你们能够看到两个邮件,在里面的连接能够激活,应该是Genymotion那个邮件,点击里面的Click here,而后帐号就是你的邮箱,密码就是咱们填写的密码,而后会选择手机型号,看你们本身的选择啦

三、而后再添加虚拟机设备,基本都会自动跳出来,不须要你们本身手动点击的,记住修更名称

四、点击next,一直next,等模拟器安装完成

五、而后再给已经建立好的模拟器命名

六、名好了之后再回到模拟器的主窗口,选择→添加的模拟器,这就看咱们刚才是怎么命名的了,好比Nexus 7,而后点击Play启动模拟器

七、启动Nexus 7,几秒钟的事,速度很是快

八、打开genymotion,切换到Use custom Android SDK tools,而后选择本身安装的sdk的路径,而后重启genymotion

九、把百度助手的ListenerApk.apk拖到genymotion里,打开百度助手,,进入以下的页面

十、点击建立测试按钮,进入建立项目页面,输入任务名称,点击查看安装的app的按钮,选择一个须要测试的apk,cpu正常区间和内存正常区间勾选到一个合适的范围(视频类、直播类的cpu必定很高),点击提交按钮,以下图设置

十一、提交后会自动启动apk,而后点击点击测试按钮,而后选择一个视频或者业务场景,跑一会而后中止,跳转到以下图所示

十二、点击查看详情按钮,能够看到下图

1三、点击内存右侧的大于号,能够看到三条线,分别是Pss、Uss和Dss,若是没有Pss,看Iss,Pss是实际占用的物理内存,再点击cpu右侧的大于号,能够看到一条曲线,把异常次数的标记出来,cpu和内存的范围是在第10步里设置的范围,20%和20M,再点击电量右侧的大于号,电量正常,什么都不显示,再看流量,正常有两条线,上传和接收,全部的图表均可以保存到本地,而后生成报告

 

下面过滤语句只显示优先级为warning或更高的日志信息

adb logcat *:W > 1.txt

 

monkey的特色

一、运行时机:通常是产品稳定后(首轮功能测试完成的夜间进行)

二、须要知道packageName

三、目的:主要测试产品是否存在崩溃问题和ANR问题

 

Monkey的基本命令

一、标准monkey命令:adb shell monkey -p com.android.calculator2 -v 50

         -p:packageName

         -v:日志级别

        50:事件数

二、adb shell monkey -p com.android.calculator2 -v -v --pct-touch 50 --throttle 500 100

        --pct-touch 50:设置整个过程当中点击操做所占的百分比

        --throttle 500:每一个事件间隔500ms

三、adb shell monkey -p packagename --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000 > monkey_test.txt

 

adb shell monkey 100,100个事件,未指定包名,monkey执行出现错误就中止了不会往下进行

adb shell monkey -p 包名 100,100个事件,若是没有问题会出现Events injected 100,输入adb shell "logcat|grep START",再点击要测试的app就能够找到包名和activity

adb shell monkey -p 包名 --throttle 500 100,100个事件,--throttle 500是指事件和事件之间的间隔是500ms

adb shell monkey -p 包名 --throttle 500  -v 100,100个事件 -v是表明日志等级,3个v是日志最全的

adb shell monkey -p 包名 --throttle 500  -v -v --pct-touch 50 100,--pct-touch是触摸事件占50%

ignore是忽略,能够忽略crashes,也能够忽略timeouts等,由于只要遇到crashes就会中止,因此要加上ignore crashes

 

Monkey的日志级别
参数:-v,用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数以下表所示:

一、日志级别 Level 0

       示例:adb shell monkey -p com.htc.Weather -v 100

       说明:缺省值,仅提供启动提示、测试完成和最终结果等少许信息

二、日志级别 Level 1

        示例:adb shell monkey -p com.htc.Weather -v -v 100

       说明:提供较为详细的日志,包括每一个发送到Activity的事件信息

三、日志级别 Level 2

        示例:adb shell monkey -p com.htc.Weather -v -v -v 100

       说明:最详细的日志,包括了测试中选中/未选中的Activity信息

 

 

Monkey的其余参数

--ignore-crashes 用于指定当应用程序崩溃时(Force&Close错误),Monkey是否中止运行。若是使用此参数,即便应用程序崩溃,Monkey依然会发送事件,直到事件计数完成

--ignore-timeouts 用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否中止运行。若是使用此参数,即便应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成

--ignore-security-exceptions 用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否中止运行。若是使用此参数,即便应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成

--kill-process-after-error 用于指定当应用程序发生错误时,是否中止其运行。若是指定此参数,当应用程序发生错误时,应用程序中止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)

--monitor-native-crashes 用于指定是否监视并报告应用程序发生崩溃的本地代码

 

Monkey的参数 -s

参数:-s用于指定伪随机数生成器的seed值,若是seed相同,则两次Monkey测试所产生的事件序列也相同的

示例:

   Monkey测试1:adb shell monkey -p com.htc.Weather -s 10 100

   Monkey测试2:adb shell monkey -p com.htc.Weather -s 10 100

     两次测试的效果是相同的,由于模拟的用户操做序列(每次操做按照必定的前后顺序所组成的一系列操做,即一个序列)是同样的,操做序列虽然是随机生成的,可是只要咱们指定了相同的Seed值,就能够保证两次测试产生的随机操做序列是彻底相同的,因此这个操做序列伪随机的

在输出的日志里能够看到seed值,-s指定一个seed值,若是开发让回归测试的话,就用设置的这个值,adb shell monkey -p 包名 -s 1234561 100

 

Monkey的日志分析

一、按关键字进行搜索,ANR、Exception、Crash、Error

二、找到有问题的地方,查看上下文信息

三、注意第一个switch上下文信息

四、查看monkey里面出错前的一些事件动做,能够手动执行该动做

五、进行问题复现,可使用以前执行的monkey命令在执行一遍,注意seed值要同样

touch有ACTION_DOWN和ACTION_UP的操做,就是按下和抬起,后面括号里的数字是坐标

crashTest.apk,ANRTest.apk,crashTest-normal.apk,ANRTest-normal.apk四个apk,主要测试crashTest.apk和ANRTest.apk(包名cn.besttest.anrtest),在模拟器上安装crashTest.apk,而后找到包名cn.besttest.crashtest

adb shell monkey -p cn.besttest.crashtest -v -v -v --ignore-crashes 1000 > crash.txt

 

Crash专项

一、安装可能引发Crash的app

二、执行压力测试

三、分析Crash的Exception信息

查看Exception的三种方式:

一、查看monkey的log

二、/data/com.swftcoin.client.android/cache/crash/traces.txt

三、查看logcat日志Crash

 

 

MonkeyScript

MonkeyScript是一组能够被Monkey识别的命令集合

优势:MonkeyScript能够完成重复固定的操做

使用:adb shell monkey -f <scriptfile> <event-count>

 

MonkeyScript命令1

DispatchTrackball

轨迹球事件

DispatchTrackball(long downtime,long eventtime,int action,float x,float y,float pressure,float size,int metastate,float xprecision,float yprecision,int device,int edgeflags)

注意:按一个键须要两个轨迹球事件

 

DispatchTrackball参数详解

# long downtime 指按键最初被按下的时间

# long eventtime 指事件发生的时间

# int action 指具体操做的动做,如按下(记住这个就行,别的能够不动)

# float x,float y 指x和y的坐标(记住这个就行,别的能够不动)

# float pressure 压力事件的大小(0-1)

# float size 触摸近似值(0-1)

# int metastate 指当前按下meta键的标识

# float xprecision,float yprecision 指x和y坐标的精确值

# int device 事件的来源(0~x)

# int edgeflags 指超出了屏幕范围

action:0表明按下,1表明弹起

 

MonkeyScript命令2

DispatchPointer

点击事件,上边有参数详解

DispatchPointer(long downtime,long eventtime,int action,float x,float y,float pressure,float size,int metastate,float xprecision,float yprecision,int device,int edgeflags)

注意:按一个键须要两个点击事件,点击事件和轨迹球是同样的

 

MonkeyScript命令3

DispatchString

输入字符串命令

DispatchString(String text)

 

MonkeyScript命令4

LaunchActivity

启动应用

LaunchActivity(package,Activity)

 

MonkeyScript命令5

UserWait

等待事件

UserWait(1000),单位:ms

 

MonkeyScript命令6

DispatchPress

按下键值

DispatchPress(int keycode)

keycode 66 回车键

 

 

上面四行记住了就行,固定格式

adb push 本地路径\monkey-aisi.script /data/local/tmp # 先把脚本上传到手机上

adb shell monkey -f /data/local/tmp/monkey-aisi.script 2 # 执行两次

 

 

找坐标步骤:设置->关于手机->版本号连续点击,直到显示您已处于开发者模式,无需进行此操做为止,退出进入开发者选项,找到指针位置,开启后点击屏幕便可看到坐标

先输入from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage,再输入MonkeyRunner.alert("hello","hi","OK"),就会弹出

能够在sdk/tools/monkeyrunner.bat里进行输入

 

 

 

 

 

 

 

 

 

 

 

把上面脚本保存成py文件,而后在cmd里输入monkeyrunner xx.py文件,必定要输入绝对路径,也能够在monkeyrunner.bat里输入相对路径(这里的相对路径是相对于monkeyrunner.bat)

img2=MonkeyRunner.loadImageFromFile('c:\\files\\test_1234.png','png') #

MonkeyRunner.sleep(3)

flag=image.sameAs(img2,0.65) # 图像对比

MonkeyRunner.sleep(1)

print flag # true或者false

 

 

RSS是每一个app都是一个内存,如10M,PSS是每一个app都乘以10M的比例

adb shell "top -d 1 | grep packageName"是1s显示一次

倒数第一列+倒数第二列<=倒数第三列

 

 

 

 

 

 

手机重启之后tcp_rcv和tcp_snd文件中的数据被清空

4554的单位是B,换算成KB,B换成KB/1024

 

流量是不经过什么方式来的,不管是无线,仍是4G,若是出现多行就多行累加

后一秒-前一秒的差值仍是比较准确的,后面的相加-前面的相加

 

 

取TotalTime的值

 

用的最多就是第一条,执行monkey前执行一次,执行monkey后执行一次,两个level值相减就是消耗的电量(连着电脑就是电脑的电量,断开链接就是手机的电量)

 

 

电量设为100,level就是100,模拟器上电量是满格的

 

看status是1和不是1的状态

 

首先在模拟器上安装MyMemoryDemo.apk

 

 

关注data object里的Total Size的数据,而后在模拟器里打开MyMemoryDemo.apk,点击点我啊点我啊按钮11次,10屡次就行,以下图:

 

点完后跳出模拟器,发现Total Size一直增长,怀疑它是内存泄漏,因而点击Dump HPROF file按钮,把这个文件dump下来

 

出现下面这个图证实文件dump下来了,保存一下

相关文章
相关标签/搜索