记录一下公司中对于app启动时长的做法

公司最近要做启动时长,需求是在每次周版本分别记录一下
app的整体功耗(耗电量以后更新),和app的启动时长

前置条件:

一.app启动没有广告,闪屏,特殊弹窗

有广告:猎豹清理大师,首页开屏会出广告,可以使用ssp聚合过滤,把渠道置为0关闭
app大多数弹窗有云控,以安卓aid尾号做下发,也可以通过adb命令修改aid
特殊弹窗:权限给足,首先要至少启动一次检查无误后kill掉,保持第一次冷启动

二.使用wifi连接(可选)

1.保持电脑和设备在同一个网段能够ping通
2.插线,adb tcpip 5555

三.常规启动时长测试方法

使用adb命令
adb shell am start -W -n com.cleanmaster.mguard_cn/com.keniu.security.main.MainActivity
包名/第一个activity
app冷启动后检查到最上面activity出现后结束,会记录三个时间
分别是

记录一下公司中对于app启动时长的做法_第1张图片
使用totaltime 即为adb启动时长

四.使用图像识别计算启动时间(符合用户习惯)

1.思路

通过图像识别的像素对比,选取app启动后首页的某一个区域模块,app每次启动后图像识别到这一个区域,就说明启动完成,记录这一段的时间

注意事项

1.这段区域为截图,比对时候上传这一块的图片。
截图必须使用当前设备来截取,不可以使用外置截图,比如裁剪,微信截图之类的,会影响图片质量分辨率
2.选取的区域不能有颜色、样式等的变化,不然识别不到
3.默认从屏幕的左上角为(0,0)坐标开始检索,理论上有速度差异,但是差异不大

2.步骤

先代码截图icon

  • 使用adb命令录屏,把视频文件保存下来
def video_recording(time_limit=10, fime_name='demo.mp4'):
    """视频录制.
    """
    adb = ADB()
    cmd = 'screenrecord --time-limit %d /sdcard/%s' % (time_limit, fime_name)
    return adb.shell(cmd)
  • 使用python 的cv2模块,将视频分帧,然后选取一张首页的清晰图
def video_separate_to_frame(video_file, pic_path):
    """
    视频分帧
    @ video_file: 视频文件
    @ pic_path: 分帧后图片存储目录
    """
    if os.path.exists(pic_path):
        os.system('rm -rf ' + pic_path)
    os.system('mkdir ' + pic_path)
    print('开始视频分帧')
    cap = cv2.VideoCapture(video_file)
    frame_count = 1
    total_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
    while 1:
        success, frame = cap.read()
        if not success:
            break
        cv2.imwrite(pic_path + '/' + "%d.jpg" %(frame_count), frame)
        frame_count += 1

    return int(total_frames)
  • 开始截取
def capture_target_image(args):
    """截取模版.

    :return:
    """
    serial, main_activity, flag, src_pic, pos = args
    des_pic = os.path.join(os.path.dirname(__file__), 'lib', serial, main_activity.split('/')[0].strip(' ') + '.png')
    if not os.path.exists(os.path.dirname(des_pic)):
        os.makedirs(os.path.dirname(des_pic))
    print(des_pic)
    image = cv2.imread(src_pic)

    def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
        if event == cv2.EVENT_LBUTTONDOWN:
            xy = "%d,%d" % (x, y)
            print(xy)
            cv2.circle(image, (x, y), 1, (255, 0, 0), thickness=-1)
            cv2.putText(image, xy, (x, y), cv2.FONT_HERSHEY_PLAIN,
                        1.0, (0, 0, 0), thickness=1)
            cv2.imshow("img", image)

    cv2.namedWindow("img", 0)
    cv2.setMouseCallback("img", on_EVENT_LBUTTONDOWN)

    if flag == 'see':
        cv2.imshow('img', image)
        cv2.waitKey(0)
    elif flag == 'save':
        x1, y1, x2, y2 = pos
        img = image[y1: y2, x1: x2]
        cv2.imwrite(des_pic, img)
``
后续操作可以参考:
https://github.com/williamfzc/stagesepx
https://blog.csdn.net/longlong2015/article/details/88825956

你可能感兴趣的:(互联网搬砖)