[本文出自天外归云的博客园]

简介

APP性能测试一般对以下几个方面进行测试:
1.启动时间(可以通过本工具测试);
2.CPU的占用(可以通过本工具测试);
3.内存的占用(可以通过本工具测试);
4.流量的耗用(可以通过本工具测试);
5.电量的耗用(用户实际使用中感知即可)。
 
除了可以做以上这几个专项测试外,本工具还能进行monkey测试等等。
可以结合工作需要灵活自定义脚本,封装成自己工作中常用的工具。
工具的实现是基于adb和PowerShell的,支持adb通过USB和WIFI两种方式连接手机进行操作。

前置工作

1. 需要安装adb

2. 需要本机设置PowerShell脚本运行策略

脚本示例

PowerShell例子如下(不断更新):

#获取当前app包名和活动名
Function GetPkgAndActName () {
#确保app处于激活状态
$a = adb shell dumpsys window windows|findstr Focu
$b = $a -like "*mCurrentFocus*"
$b = $b.Trim()
$startIndex = $b.IndexOf("{")
$endIndex = $b.IndexOf("}")
$pkgAndActName = (($b.Substring($startIndex+1,$endIndex-$startIndex-1)).split(" "))[2]
return $pkgAndActName
} #获取当前流量统计信息
Function GetCurrFlow () {
#确保app处于激活状态
$pkgAndActName = GetPkgAndActName
$pkgName = ($pkgAndActName.split("/"))[0]
$activityName = ($pkgAndActName.split("/"))[1]
$userId = (((((adb shell dumpsys package $pkgName | findstr userId).Trim()).split("="))[1]).split(" "))[0]
$rets = adb shell cat /proc/net/xt_qtaguid/stats | findstr $userId
foreach ($ret in $rets)
{
$spices = ($ret.Split(" "))
$flow += [int]$spices[5]+[int]$spices[7]
}
$flow/1000
} #转换文件大小单位
function Convert-Size {
[cmdletbinding()]
param(
[validateset("Bytes","KB","MB","GB","TB")]
[string]$From,
[validateset("Bytes","KB","MB","GB","TB")]
[string]$To,
[Parameter(Mandatory=$true)]
[double]$Value,
[int]$Precision = 4
)
switch($From) {
"Bytes" {$value = $Value }
"KB" {$value = $Value * 1024 }
"MB" {$value = $Value * 1024 * 1024}
"GB" {$value = $Value * 1024 * 1024 * 1024}
"TB" {$value = $Value * 1024 * 1024 * 1024 * 1024}
}
switch ($To) {
"Bytes" {return $value}
"KB" {$Value = $Value/1KB}
"MB" {$Value = $Value/1MB}
"GB" {$Value = $Value/1GB}
"TB" {$Value = $Value/1TB} }
return [Math]::Round($value,$Precision,[MidPointRounding]::AwayFromZero)
} #获取当前安卓app的启动耗时
function CalcStartUpTime () {
#确保app处于激活状态
$packageInfo = adb shell dumpsys activity | findstr mFocusedActivity
$regex = [regex]"\s??(\S*)/(\S*)??\s"
$s = $regex.Matches($packageInfo).Value
$info = $s.SubString(1,$s.Length-1)
$packageName = $info.split("/")[0]
$activityName = $info.split("/")[1]
adb shell am force-stop $packageName
$result = adb shell am start -W $info | findstr WaitTime
$result.replace("WaitTime","当前app启动耗时")
} #获取当前安卓app的CPU占用情况(持续20次)
function GetAppCPU () {
#确保app处于激活状态
$pkgAndActName = GetPkgAndActName
$pkgName = ($pkgAndActName.split("/"))[0]
$count = 0
while ($count -lt 20) {
adb shell top -n 1 | findstr $pkgName
Start-Sleep -Seconds 1
$count++
}
} #获取当前安卓app的内存占用情况(持续20次)
function GetAppMem () {
#确保app处于激活状态
$pkgAndActName = GetPkgAndActName
$pkgName = ($pkgAndActName.split("/"))[0]
$count = 0
while ($count -lt 20) {
$appUsageRAMInfo = adb shell dumpsys meminfo $pkgName | findstr "TOTAL:"
$infoRegex = [regex]"TOTAL:\s*(\d)*"
$numRegex = [regex]"(\d)+"
$appUsageRAM = $numRegex.Matches($infoRegex.Matches($appUsageRAMInfo).Value).Value
$totalRAMInfo = (adb shell dumpsys meminfo | findstr "RAM" | findstr "Total").replace(",","")
$totalRAM = $numRegex.Matches($totalRAMInfo).Value
"当前app占用内存:"+$appUsageRAM+",占用率为:"+([int]$appUsageRAM/[int]$totalRAM)*100+"%"
Start-Sleep -Seconds 1
$count++
}
} #开启ADB-WIFI模式
function AdbWifiConnect () {
#确保手机连上usb(成功开启ADB-WIFI模式后方可以拔线)
$ipText = adb shell ifconfig | findstr "Bcast"
$ipInfoReg = [regex]"inet addr:\s*(\d)+`.(\d)+`.(\d)+`.(\d)+"
$ipInfo = $ipInfoReg.Matches($ipText).Value
$ipReg = [regex]"(\d)+`.(\d)+`.(\d)+`.(\d)+"
$ip = $ipReg.Matches($ipInfo).Value
adb disconnect $ip
adb tcpip 5555
adb connect $ip
} #重连ADB-WIFI到指定ip
function ReconnectAdbWifi () {
$ip= Read-Host "请输入手机ip"
adb connect $ip
} #主程序入口
while($true){
Write-Host "输入数字进行选择" -ForegroundColor Green
Write-Host "1 唤醒屏幕" -ForegroundColor Yellow
Write-Host "2 输入文字" -ForegroundColor Yellow
Write-Host "3 触发事件" -ForegroundColor Yellow
Write-Host "4 向上滑动" -ForegroundColor Yellow
Write-Host "5 向下滑动" -ForegroundColor Yellow
Write-Host "6 向左滑动" -ForegroundColor Yellow
Write-Host "7 向右滑动" -ForegroundColor Yellow
Write-Host "8 删除输入" -ForegroundColor Yellow
Write-Host "9 屏幕截图" -ForegroundColor Yellow
Write-Host "10 获取手机分辨率" -ForegroundColor Yellow
Write-Host "11 获取手机系统版本" -ForegroundColor Yellow
Write-Host "12 获取当前app包名和活动名" -ForegroundColor Yellow
Write-Host "13 流量统计" -ForegroundColor Yellow
Write-Host "14 进行简单monkey测试" -ForegroundColor Yellow
Write-Host "15 计算当前app的启动时间" -ForegroundColor Yellow
Write-Host "16 获取当前安卓app的CPU占用情况(持续20次)" -ForegroundColor Yellow
Write-Host "17 获取当前安卓app的内存占用情况(持续20次)" -ForegroundColor Yellow
Write-Host "18 开启ADB-WIFI模式" -ForegroundColor Yellow
Write-Host "19 重连ADB-WIFI" -ForegroundColor Yellow
$choice = Read-Host "请选择"
switch($choice)
{
1 { adb shell input keyevent 26 }
2 { $text = Read-Host "输入文字";adb shell input text $text }
3 { $event = Read-Host "输入事件代号";adb shell input keyevent $event }
4 { adb shell input swipe 200 800 200 100 }
5 { adb shell input swipe 200 100 200 800 }
6 { adb shell input swipe 500 100 100 100 }
7 { adb shell input swipe 100 100 500 100 }
8 {
[int]$amount = Read-Host "输入要删除的字符数量"
for($i=0;$i -lt $amount;$i++)
{
adb shell input keyevent 67
}
}
9 {
$result = adb devices
$device_id = $result[1].Split()[0]
adb -s $device_id shell /system/bin/screencap -p /sdcard/screenshot.png
adb -s $device_id pull /sdcard/screenshot.png d:/screenshot.png
D:\screenshot.png
}
10 { adb shell wm size }
11 { adb shell getprop ro.build.version.release }
12 {
$pkgAndActName = GetPkgAndActName
$pkgName = ($pkgAndActName.split("/"))[0]
$activityName = ($pkgAndActName.split("/"))[1]
"包名:"+$pkgName
"活动名:"+$activityName
}
13 {
Read-Host "按任意键开始统计"
$startFlow = GetCurrFlow
Write-Host "流量监控中……`n" -ForegroundColor DarkMagenta
Read-Host "按任意键结束统计"
$endFlow = GetCurrFlow
$consumedFlow = [int]$endFlow-[int]$startFlow
$consumedFlowKb = Convert-Size -From KB -To KB -Value $consumedFlow
$consumedFlowMb = Convert-Size -From KB -To MB -Value $consumedFlow
"共消耗流量:"+$consumedFlowKb+"kb("+$consumedFlowMb+"mb)"
}
14 {
$count = Read-Host "请指定随机事件数"
$pkgAndActName = GetPkgAndActName
$pkgName = ($pkgAndActName.split("/"))[0]
adb shell monkey -p $pkgName -v $count
}
15 {
CalcStartUpTime
}
16 {
GetAppCPU
}
17 {
GetAppMem
}
18 {
AdbWifiConnect
}
19 {
ReconnectAdbWifi
}
}
}

可以根据实际测试过程中反复手点的过程进行组装调配。比如在反复测试登录的情况下,就要反复输入密码,如果来回用手点就比较麻烦,用这个小工具的话就非常轻松了,按一下上再敲一下回车就搞定了。

以下是进行统计指定时间内android应用流量的消耗:

计算当前app的内存占用情况:

退出:ctrl+c

用adb命令组装PowerShell实用小工具——Android测试小助手的更多相关文章

  1. 使用adb命令启查看已安装的Android应用的versionCode、versionName

    列出已经安装的应用 adb shell pm list package C:\Users\CJTDEV003>adb shell pm list package package:com.sams ...

  2. 这些小工具让你的Android 开发更高效

    在做Android 开发过程中,会遇到一些小的问题.尽管自己动手也能解决.可是有了一些小工具,解决这些问题就得心应手了,今天就为大家推荐一下Android 开发遇到的小工具,来让你的开发更高效. Vy ...

  3. python学习之——调用adb命令完成移动端界面测试

    实现原理 Hierarchy Viewer:获得当前手机实时的UI信息,方便用于手机的自动化测试: python中的subprocess.Popen():调用系统命令: uiautomator工具:获 ...

  4. axis2 利用小工具cat.aar

    Axis2: Web Service是现在最适合实现SOAP的技术,而Axis2是实现Web Service的一种技术框架(架构). 昨天把把菜刀脚本打包发现<>在xml会被转义,导致菜刀 ...

  5. Android adb命令,linux中各种命令

    常用的ADB命令 1. 显示系统中全部Android平台: android list targets 2. 显示系统中全部AVD(模拟器): android list avd 3. 创建AVD(模拟器 ...

  6. 几个可以提高工作效率的Python内置小工具

    在这篇文章里,我们将会介绍4个Python解释器自身提供的小工具.这些小工具在笔者的日常工作中经常用到,减少了各种时间的浪费,然而,却很容易被大家忽略.每当有新来的同事看到我这么使用时,都忍不住感叹, ...

  7. 【xmind converse excel】测试用例定制化小工具

    背景 公司使用jira, jira写测试用例,jira可以通过execl导入进jira, 生成测试用例,但是模板很不统一,如果只是再execl中修改,又觉得及其的麻烦,所以写了一个xmind 转化为定 ...

  8. Confluence 6 从外部小工具中注册访问

    希望从 Confluence 中删除一个小工具,你可以选择小工具边上的 URL ,然后单击删除(Delete). 如果你希望取消订阅一个应用的小工具,你需要删除整个订阅.你不能仅仅删除你订阅中的某一个 ...

  9. Confluence 6 注册单一小工具

    如果你不能订阅一个应用的小工具,你需要将小工具一个一个的添加进来.针对网站不支持小工具订阅和你的应用和你的 Confluence 不能建立信任连接的情况,你就只能这样添加了. 首先你需要获得小工具的 ...

随机推荐

  1. HDU 3820 Golden Eggs (SAP | Dinic)

    Golden Eggs Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. android 获取view在屏幕中的位置

    使用view中的getLocationOnScreen方法,即可: final int[] locations = new int[2]; Button btn = (Button) findView ...

  3. 【ASP.NET】第一个ASP.NET MVC应用程序

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 开发流程 新建Controller 创建Action 根据Action创建View 在Action获取数据并生产ActionResult传递 ...

  4. Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER 解决方案

    主要是由于调试的环境中已有一个同名的Provider存在. 解决方法是修改AndroidManifest.xml中的 <provider android:name=".apps.App ...

  5. css浮动中避免包含元素高度为0的4种解决方法

    问题:当子元素中使用了float时,如果其父元素不指定高度,其高度将为0 解决:清除(闭合)浮动元素,使其父div高度自适应 方法一:额外标签+clear:both     (W3C推荐方法,兼容性较 ...

  6. python 实验环境

    python 实验环境的搭建 刚开始在windows环境下尝试过komodo ,eclispse pydev,swing,spyder甚至limodou的编辑器,之后ipython,安装很多科学计算包 ...

  7. ARGB和PARGB

    原文链接: http://blog.csdn.net/lnwaycool/article/details/8610313 ARGB和PARGB是针对32位图像而言的,Windows下图像可以是1位.4 ...

  8. 【转载并整理】Linux - centOS 6 SVN服务器安装、配置及开机启动

    以前在windows上安装svn服务器,用的是VisualSVN-Server用起来还不错,但只能用在windows,在linux上部署使用是 subversion,具体说明如下 参考原文:http: ...

  9. php使用CURL不依赖COOKIEJAR获取COOKIE的方法

    本文实例讲述了php使用CURL不依赖COOKIEJAR获取COOKIE的方法.分享给大家供大家参考.具体分析如下: PHP中CURL类是一个非常牛逼的工具类,具体怎么牛逼就不啰嗦了. 对于COOKI ...

  10. WCF 有零个操作;协定必须至少有一个操作

    转自 http://www.cnblogs.com/bdqlaccp/archive/2011/12/31/2308905.html 建立WCF服务后, 服务类中写上了相应的操作,并且方法上加上了[O ...