python软件启动时间_Python3 结合 adb 测试应用启动时间

该博客介绍了一个Python脚本,用于自动化测试Android应用的冷启动和热启动时间。通过`adb`命令,脚本能启动和停止应用,检查活动是否在前台,并计算平均启动时间。它对`com.tencent.mobileqq`应用进行了10次测试,以展示如何获取和分析启动性能数据。
摘要由CSDN通过智能技术生成

!/usr/bin/python

# -*- coding: utf-8 -*-

# @author: xiaoxiao

# @date : 2018/12/13

import subprocess

import time

# 执行shell

def shell(cmd):

p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)

(stdout_output, err_output) = p.communicate()

if err_output != None and len(err_output) != 0:

print("Shell err_output: " + str(err_output))

# print("stdout_output: " + str(stdout_output))

return stdout_output

# 启动app应用

def app_start(package_name, launch_activity, device_id = ''):

if device_id != '':

cmd_start = "adb -s %s shell am start -n %s" % (device_id, package_name + "/" + launch_activity)

else:

cmd_start = "adb shell am start -n %s" % (package_name + "/" + launch_activity)

shell(cmd_start)

time.sleep(3)

# print("App start success: " + str(cmd_start))

# 退出app应用

def app_stop(package_name, device_id = ''):

if device_id != '':

cmd_stop = "adb -s %s shell am force-stop %s" % (device_id, package_name)

else:

cmd_stop = "adb shell am force-stop %s" % (package_name)

shell(cmd_stop)

time.sleep(1)

# print("App stop finishes: " + str(cmd_stop))

# 判断app应用是否在前台

def is_activity_started(package_name, device_id = ''):

if device_id != '':

cmd_current_activity = "adb -s %s shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'" % device_id

else:

cmd_current_activity = "adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'"

cmd_result = str(shell(cmd_current_activity))

# 如果当前应用处于前台或resume后台状态,返回True

if package_name in cmd_result:

return True

else:

return False

# 设置app应用后台运行

def set_activity_backup(package_name, launch_activity, device_id = ''):

if device_id != '':

if not is_activity_started(package_name, device_id):

app_start(package_name, launch_activity, device_id)

cmd = 'adb -s %s shell input keyevent key 3' % device_id

else:

if not is_activity_started(package_name):

app_start(package_name, launch_activity)

cmd = 'adb shell input keyevent key 3'

shell(cmd)

# 获取冷启动时间

def get_cold_boot_time(package_name, launch_activity, device_id = ''):

if is_activity_started(package_name, device_id):

app_stop(package_name, device_id)

if device_id != '':

cmd_start = "adb -s %s shell am start -W %s | grep 'WaitTime'" % (device_id, package_name + "/" + launch_activity)

else:

cmd_start = "adb shell am start -W %s | grep 'WaitTime'" % (package_name + "/" + launch_activity)

cold_boot_time = shell(cmd_start)[10:].strip()

return int(cold_boot_time)

# 获取热启动时间

def get_hot_boot_time(package_name, launch_activity, device_id = ''):

set_activity_backup(package_name, launch_activity, device_id)

if device_id != '':

cmd_start = "adb -s %s shell am start -W %s | grep 'WaitTime'" % (device_id, package_name + "/" + launch_activity)

else:

cmd_start = "adb shell am start -W %s | grep 'WaitTime'" % (package_name + "/" + launch_activity)

cold_boot_time = shell(cmd_start)[10:].strip()

return int(cold_boot_time)

# 执行测试,times为次数,结果取平均值

def run_test(times):

cold_time = []

hot_time = []

for i in range(times):

cold_time.append(get_cold_boot_time('com.tencent.mobileqq', '.activity.SplashActivity'))

hot_time.append(get_hot_boot_time('com.tencent.mobileqq', '.activity.SplashActivity', 'abbed25'))

res_cold_time = 0

res_hot_time = 0

print("cold_time = " + str(cold_time))

print("hot_time = " + str(hot_time))

for i in cold_time:

res_cold_time = res_cold_time + i

print('average cold_time: ' + str(res_cold_time / times) + ' ms')

for i in hot_time:

res_hot_time = res_hot_time + i

print('average hot_time: ' + str(res_hot_time/times) + ' ms')

# 执行10次

run_test(10)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值