APP专项测试实战2

 

综合性能

针对所有APP的性能,从大局观去看性能数据。

 

 命令:adb shell vmstat

r:表示运行队列

b:阻塞的进程

swpd:虚拟内存使用的大小

free:空闲的物理内存的大小

buff:缓存

cache:缓冲

si:每秒从磁盘读入虚拟内存的大小

so:每秒虚拟内存写入磁盘的大小

bi:块设备每秒接收的块数量

bo:块设备每秒发送的块数量

in:每秒CPU的中断次数

cs:每秒上下文切换次数

us:用户CPU时间

sy:系统CPU时间

id:空闲CPU时间

wt:等待IO CPU时间

使用bash提取指标

adb shell vmstat | tail -1 | awk '{print $15}'

反复提取:while true; do adb shell vmstat | tail -1 | awk '{print $15}';done

 虚拟内存的运行速度要比正常内存慢一百倍以上。

appium使用vmstat

 

cmd = 'adb shell vmstat'

res = subprocess.Popen(cmd,shell =true,sdout=subprocess.PIPE,stderr=subprocess.PIPE)

print(res.stdout.read().decode("utf-8").split("\r\n")[2].split()[3]

webview性能

 每一个web操作都有操作码,根据操作码来分析

window.performance.navigation.type

刷新--1

跳转--0

后退--2

可以进行js自动化模拟上述操作

window.location.href="https://www.baidu.com/"

windows.location.reload()

windows.location.back()

利用Appium

def test_navigation():

    caps = {}
caps["platformName"] = "Android"
caps["deviceName"] = "127.0.0.1:7555"
caps["appPackage"] = "com.xueqiu.android"
caps["appActivity"] = ".view.WelcomeActivityAlias"
caps["noReset"] = "true"
caps["chromedriverExectable"] = "D:/develop/chromedriver/2.20.exe"
driver = webdriver.Remote("http://localhost:4723/wd/hub",caps)
driver.implicitly_wait(15)
driver.find_element(By.XPATH,"//*[@text='交易']").click()
webview = driver.contexts[-1]
driver.switch_to.context(webview)
print(driver.execut_script("return window.performance.navigation.type"))
url=driver.execute_script("window.location.herf='https://www.baidu.com'")
  driver.execute_script("window.location.reload()")
   driver.execute_script("return window.performance.navigation.type")
   print(url)

 使用location.herf查看前端代码位置

driver.execute_script("return window.location.herf")

把内容存入本地:adb pull  文件路径

adb logcat | grep "http://danjuanapp.com"

耗电量

 电量问题和检测

只从应用和操作看,是不知道为什么耗电量的增加

常见的电量问题

唤醒锁(acquire)

  • 关闭屏幕显示,让CPU后台运行
  • APP长期获取唤醒锁,不释放
  • 阻止设备进入低电量模块

唤醒锁

电池会话:再次充满电之间

  • 消耗整个电池会话的0.7%
  • 在后台运行时,消耗整个电池会话的0.1%

利用工具Google play,我的开发的应用会反馈唤醒锁

问题代码:void doSomethingAndRelease() throws MyException{

   wakeLock.acquire();

  doSomethingThatThrows();

  wakeLock.release();

}

代码改进:

void doSomethingAndRelease() throws MyException{

  try{

    wakeLock.acquire();

    doSomethingThatThrows();

  }finally{

  wakeLock.release();

  }

}

#最后都会释放锁   ,异常处理

查看唤醒锁

  • play console
  • Battery Historian   可视化的,锁屏电量查看
  • dumpsys       adb shell dumpsys power
  •  

     

建议:唤醒锁改进

  • 使用前台服务
  • 确保锁的获取和释放简单

有些应用渲染问题,CPU和GPU,内存占用都比较高。导致耗电量比较高,是正常的。

dumpsys

查看所有服务

adb shell dumpsys

查看可用服务

adb shell dumpsys -l

adb shell dumpsys -l | wc -l

adb shell dumpsys input

 

卡顿检测

 

奔溃问题

 

Amdahl

 

posted @ 2021-05-27 17:01  丝瓜呆呆  阅读(114)  评论(0编辑  收藏  举报