zoukankan      html  css  js  c++  java
  • app性能测试

    环境准备:

    1、安装jdk

    2、安装安卓sdk

    3、配置环境变量:

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

    PATH=%ANDROID_HOME% ools;%ANDROID_HOME%platform-tools;%ANDROID_HOME%uild-toolsandroid-4.4.2;

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

     

    安装genymotion

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

    2、点击OK,设置选择软件的安装位置,默认为C:Program FilesGenymobileGenymotion,也可以选择别的位置

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

    4、建立桌面快捷方式图标

    5、继续下一步安装即可

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

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

     

    使用教程

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

    2、然后在弹出来的界面输入你注册的账号和密码然后点击connect按钮,在我们下载的时候填写的邮箱中大家可以看到两个邮件,在里面的链接可以激活,应该是Genymotion那个邮件,点击里面的Click here,然后账号就是你的邮箱,密码就是我们填写的密码,然后会选择手机型号,看大家自己的选择啦

    3、然后再添加虚拟机设备,基本都会自动跳出来,不需要大家自己手动点击的,记住修改名称

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

    5、然后再给已经创建好的模拟器命名

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

    7、启动Nexus 7,几秒钟的事,速度非常快

    8、打开genymotion,切换到Use custom Android SDK tools,然后选择自己安装的sdk的路径,然后重启genymotion

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

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

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

    12、点击查看详情按钮,可以看到下图

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

     

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

    adb logcat *:W > 1.txt

     

    monkey的特点

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

    2、需要知道packageName

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

     

    Monkey的基本命令

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

             -p:packageName

             -v:日志级别

            50:事件数

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

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

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

    3、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个级别,分别对应的参数如下表所示:

    1、日志级别 Level 0

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

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

    2、日志级别 Level 1

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

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

    3、日志级别 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的日志分析

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

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

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

    4、查看monkey里面出错前的一些事件动作,可以手动执行该动作

    5、进行问题复现,可以使用之前执行的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专项

    1、安装可能引起Crash的app

    2、执行压力测试

    3、分析Crash的Exception信息

    查看Exception的三种方式:

    1、查看monkey的log

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

    3、查看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 # 执行两次

  • 相关阅读:
    [转]wireshark 实用过滤表达式(针对ip、协议、端口、长度和内容) 实例介绍
    [转]HTTPS连接的前几毫秒发生了什么
    将生成的数据写入文件
    linux查看网络监听端口
    [转] Linux下移动virtualbox虚拟硬盘丢失eth0
    sockaddr结构体
    以十六进制形式打印字符串
    pta5-9 Huffman Codes (30分)
    pat1068. Find More Coins (30)
    hduoj 2955Robberies
  • 原文地址:https://www.cnblogs.com/laosun0204/p/11804862.html
Copyright © 2011-2022 走看看