当前位置: 首页 > news >正文

安卓Android压力测试与性能测试详解!

App本身性能数据获取(cpu 内存 帧率 启动时间 流量 电量)

Monkey随机压力测试(android手机压测)

01 Android SDK

Android SDK,即Android Software Development Kit,是android的软件开发工具包。

它提供了在Windows/Linux/Mac平台上开发Android应用的开发组件。包含了在Android平台上开发移动应用程序的各种工具集。

02 解压并配置SDK

使用解压工具(如360压缩,好压,快压等)解压AndroidSDK.rar到没有中文的目录下

配置环境变量:

* 新建ANDROID_HOME : G:\software\Android\sdk

* path添加三个变量

   %ANDROID_HOME%

   %ANDROID_HOME%\platform-tools

   %ANDROID_HOME%\tools

验证:adb(只要不提示不是内部或外部命令,表示配置成功

03 安卓adb

ADB全称Android Debug调试 Bridge桥, 是android sdk里的一个工具,用这个工具可以直接操作管理android模拟器或者真实的andriod设备(手机 平板 电视 智能导航...)

它的主要功能有:

  • 运行设备的shell(命令行)

  • 管理模拟器或设备的端口映射

  • 计算机和设备之间上传/下载文件

  • 将本地apk软件安装至模拟器或android设备

ADB常用指令

查看设备:adb devices

这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示

安装软件

adb install <apk文件路径>

adb install -r apk文件路径 --覆盖安装

这个命令将指定的apk文件安装到设备上.

卸载软件

adb uninstall <软件名> 问开发

adb uninstall -k <软件名>

如果加 -k 参数,为卸载软件但是保留配置和缓存文件

问程序员--com.example.test

登录设备shell

adb shell

adb shell <command命令>

这个命令将登录设备的shell.

后面加<command命令>将是直接运行设备命令, 相当于执行远程命令

查看手机日志:adb logcat

获取某个应用的日志输出到本地文件中

adb logcat -v time process | findstr 包名> C:/log/aa.txt(v表示详细程度-v –v -v)

有多台设备时adb选择设备

adb -s 设备名称 logcat -v time process | findstr 包名>C:/log/aa.txt

显示所有优先级大于等于“warning”的日志

adb logcat *:W 

日志等级:

-- V : Verbose (明细);

-- D : Debug (调试);

-- I : Info (信息);

-- W : Warn (警告);

-- E : Error (错误);

-- F: Fatal (严重错误);

-- S : Silent(Super all output) (最高的优先级, 可能不会记载东西)

图片

随机压力测试-Monkey

Monkey介绍

Monkey就是猴子,Monkey测试,就像一只猴子在电脑面前,乱敲键盘在测试。猴子什么都不懂,只知道乱敲(随机测试)

通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试(足够多次),检测程序多久的时间会发生异常

Monkey用来做什么

Monkey 主要用于Android 的随机压力测试,是一个自动的压力测试小工具,主要目的就是为了测试android app是否会Crash(崩溃).

Monkey 命令

使用monkey测试手机所有程序

adb shell monkey 100 执行monkey测试100次 针对rom测试或者

Monkey实例

用monkey 命令 对登录apk进行 性能测试

adb shell monkey -p com.example.login --ignore-crashes --ignore-timeouts --throttle 100 --pct-touch 50 --pct-motion 50 -v -v -v -s 666 1000 >c:\login\c.txt

Monkey异常日志分析

Monkey 测试出现错误后,一般的分析步骤

看Monkey的日志

  • 程序无响应的问题: 在日志中搜索 “ANR”

  • 崩溃问题:在日志中搜索 CRASH/Exception(例如果出现空指针NullPointerException)

Monkey 执行中断,在log最后也能看到当前执行次数

获取app性能数据

CPU

adb shell top 获取全部cpu

  • PID  : progress identification,应用程序ID

  • S    : 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数

  • #THR : 程序当前所用的线程数 thread

  • VSS  : Virtual Set Size虚拟耗用内存(包含共享库占用的内存)

  • RSS  : Resident Set Size实际使用物理内存(包含共享库占用的内存)

  • PCY  : 前台(foreground)和后台(background)进程

  • UID  : User Identification,用户身份ID

  • Name : 应用程序名称

查看手机整个cpu消耗情况

adb shell dumpsys cpuinfo

查看某一个应用的cpu使用情况

adb shell dumpsys cpuinfo | findstr com.jingdong.app.mall

内存

查看某个应用内存使用情况

adb shell dumpsys meminfo 包名

  • dalvik : dalvik使用的内存

  • native : native堆上的内存,指C\C++堆的内存(android 3.0以后bitmap就是放在这儿)

  • other  : 除了dalvik和native的内存,包含C\C++非堆内存······

  • Pss    : 该内存指将共享内存按比例分配到使用了共享内存的进程

  • allocated : 已使用的内存

  • free      : 空闲的内存

  • private dirty : 非共享,又不能被换页出去的内存(比如linux系统中为了提高分配内存速度而缓冲的小对象,即使你的进程已经退出,该内存也不会被释放)

  • share dirty   : 共享,但有不能被换页出去的内存

启动时间

手机APP的启动时长是一个很容易被用户感知的性能指标,启动时长过长会让用户极不愿意继续等待。因此启动时长是一项比较靠前的性能指标。

APP的启时长分为两种情况,

  • 一种是冷启动时间

    (通常是系统重启,即在启动前没有该App进程的情况)

  • 一种是热启动,即App从后台被切换到前台

    (点back退出后再点击图标启动)

adb指令启动

adb shell dumpsys activity | findstr mFocusedActivity 查看当前显示的界面名字及所属包名

adb shell am start -W com.jingdong.app.mall/.main.MainActivity

WaitTime 就是总的耗时,包括前一个应用Activity pause的时间和新应用启动的时间;

ThisTime 表示一连串启动Activity 的最后一个 Activity 的启动耗时  

TotalTime表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用Activity pause 的耗时。也就是说,一般只要关心 TotalTime 即可,这个时间才是自己应用真正启动的耗时。

总结:

这种测试方法简单容易,并且可以准确的计算出系统启动这个Activity的时间。但是缺点是不包括点击icon到系统接收到消息的时间,也就是说这个时间并不能完整的模拟用户操作场景的启动时间

电量

有的手机设置菜单里面会有流量和电量统计类,只需在测试前后记录下电量值,便可获取消耗电量数值。

帧率--有无卡顿

进入开发者选项 开启GPU呈现分析

各种颜色的线表示渲染这一帧用了多长时间,时间越长表示卡顿明显,绿色横线为标准线,app流畅运行应该在标准线以下

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

相关文章:

  • 什么是SQL注入?
  • Linux 学习笔记(十五)—— 基础IO
  • OpenCV_自定义线性滤波(filter2D)应用详解
  • C# CS1612 尝试修改集合中值类型的情况
  • Android常用C++特性之std::equal
  • TCP\IP标准与OSI标准
  • Springboot项目在win系统开发部署到linux服务器出现上传文件编码问题
  • Linux下的git开篇第一文:git的意义
  • 探索基于知识图谱和 ChatGPT 结合制造服务推荐前沿
  • MyBatis 动态 SQL 使用指南
  • react 常用hooks封装--useReactive
  • 【Y004】基于springboot+vue实现的图书管理系统
  • 利用 Page Visibility API 优化网页性能与用户体验
  • babylon.js-1:入门篇
  • 活体检测标签之2.4G有源RFID--SI24R2F+
  • 深入了解以太坊
  • 〔开发系列〕一次关于小程序开发的深度总结
  • avalon2.2的VM生成过程
  • Django 博客开发教程 16 - 统计文章阅读量
  • HTTP那些事
  • Javascript设计模式学习之Observer(观察者)模式
  • laravel with 查询列表限制条数
  • leetcode388. Longest Absolute File Path
  • Mac转Windows的拯救指南
  • MYSQL 的 IF 函数
  • React-redux的原理以及使用
  • 理清楚Vue的结构
  • 前端技术周刊 2019-01-14:客户端存储
  • 前端相关框架总和
  • 突破自己的技术思维
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​Java并发新构件之Exchanger
  • # Panda3d 碰撞检测系统介绍
  • #HarmonyOS:基础语法
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)计算机毕业设计大学生兼职系统
  • (理论篇)httpmoudle和httphandler一览
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (四) 虚拟摄像头vivi体验
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • (转)Sublime Text3配置Lua运行环境
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Core WebAPI中封装Swagger配置
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .NET项目中存在多个web.config文件时的加载顺序
  • .sdf和.msp文件读取
  • @ConditionalOnProperty注解使用说明
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务