"""
__author__ = '霍格沃兹测试开发学社'
__desc__ = '更多测试开发技术探讨,请访问:https://ceshiren.com/t/topic/15860'
"""
import time
from utils.cmd_handle import cmd_handle
from utils.decorator_handle import thread_run
from utils.log_handle import CommonLog
class PerfHandle:
"""
性能方法
"""
log = CommonLog("PerfHandle").add_handle()
device = None
def get_cpu(self, package, device=None):
"""
获取cpu数据
:return:
"""
c_cpu = 0
cmd = "top -m 20 -n 1 -d 1"
results = cmd_handle.cmd_adb_shell_start(cmd, device=self.device)
for result in results:
result = result.decode('UTF-8')
if package in result:
c_cpu = result.strip().split('%')[0].split(' ')[-1]
self.log.info(f'get_cpu: {device}, c_cpu: {c_cpu}')
return c_cpu
def get_mem(self, package, device=None):
"""
获取cpu数据
:return:
"""
c_mem = 0
cmd = f"dumpsys meminfo {package}"
results = cmd_handle.cmd_adb_shell_start(cmd, device=self.device)
for result in results:
result = result.decode('UTF-8')
if "TOTAL" in result:
c_mem = int(int(result.strip().split(' ')[3]) / 1024)
self.log.info(f'get_mem: {device}, c_mem: {c_mem}')
return c_mem
def get_fps(self):
"""
获取surface数据
:return:
"""
cmd = "service call SurfaceFlinger 1013"
results = cmd_handle.cmd_adb_shell_start(cmd, device=self.device)
c_fps = int(results[0].decode('UTF-8').split('(')[1].split(' ')[0], 16)
self.log.info(f'get_fps: , c_fps: {c_fps}')
return c_fps
@thread_run
def get_perf(self, package):
"""
获取cpu,内存和帧率
:param package:
:return:
"""
fps_a = self.get_fps()
time_a = time.time()
while True:
time.sleep(1)
fps_b = self.get_fps()
time_b = time.time()
cpu = self.get_cpu(package)
mem = self.get_mem(package)
fps = int((fps_b - fps_a) / int(time_b - time_a))
fps_a = fps_b
time_a = time_b
self.log.info(f'cpu--{cpu}, mem--{mem}, fps--{fps}')
def start_perf(self):
self.get_perf('com.xueqiu.android')
perf_handle = PerfHandle()
if __name__ == '__main__':
perf_handle.start_perf()
print('开始用例执行,线程统计性能数据')
time.sleep(10)
print('结束')