• 漫谈:从APP崩溃率标准,到Monkey介绍拓展Maxim,及Jenkins自动化配置,持续集成获取崩溃monkey日志


    漫谈:
    从APP崩溃率标准,到Monkey介绍拓展Maxim,及Jenkins自动化配置,持续集成获取崩溃日志

    1、APP崩溃率标准

    开发或测试app的同学,对于app崩溃肯定非常熟悉,频繁的线上崩溃属极度严重事故,肯定会给团队和个人带来KPI的低下,防患于未然就成了重中之重

    1.1 常见的检测崩溃手段

    1. 业务测试,普通测试,环境版本兼容性测试,开发调试中遇到
    2. 健壮性测试:【数据状态异常、http请求状态异常、网络状态异常(网络波动)、大数据、特殊场景、等等】
    3. monkey测试
    4. 友盟等线上检测工具监控错误率、错误日志

    1.2 崩溃率标准

     这是听云2016年提出的移动应用崩溃率标准,也是行业目前参考最多的标准

    2、Monkey介绍拓展Maxim

    常规的测试并不能完全使app的崩溃率达标时,这时候往往需要借助monkey进行一些压力测试

    2.1 Monkey介绍

    Monkey是android系统自带的一个测试小工具,原理是存在一个事件库,并随机进行对事件进行随机操作

    Monkey 程序是由 Android 系统自带,使用 Java 语言写成。在Android文件系统中的存放路径是: /system/framework/monkey.jar;

    Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;

    执行命令

    $ adb shell monkey [options] <event-count>

    官方文档:http://www.android-doc.com/tools/help/monkey.html   官网描述部分截图如下 

     常用参数:

    $ adb shell monkey -p packagename -s 12345 --throttle 500 -v -v  500
    -p 包名-s 随机生成器seed值--throttle 每个事件固定延迟毫秒-v -v 日志级别 500:500次

    其他参数和调试见官方文档

     2.2 Monkey拓展Maxim

    Maxim是基于 Android Monkey 二次开发,实现高速点击的 Android Monkey 自动化工具 fastmonkey - 代号 Maxim,maxim介绍地址

    testhome:https://testerhome.com/topics/11719

    github:https://github.com/zhangzhao4444/Maxim

    2.2.1 对比monkey优势特性

    a. 速度快 每秒10-15个Action事件

    b. Android全平台兼容

    c. 防跳出

    d. 防休眠

    e. 熔断机制

    f. 场景细粒度

    g. 随机自动输入

    h. 崩溃堆栈自动保存

    2.2.2 运用使用

    1、环境预备: 在github上下载framework.jar , monkey.jar 这两个文件

    • 支持 Android 5,6,7,8,9,10真机及模拟器; Android 5不支持 dfs mode
    • 将 framework.jar , monkey.jar push 到手机上某个目录中,建议/sdcard
    adb push framework.jar /sdcard
    adb push monkey.jar /sdcard

    2、执行

    cmd 命令 : 
    adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.panda.videoliveplatform --uiautomatormix --running-minutes 60 -v -v tv.panda.test.monkey.Monkey: monkey入口类,不要修改 com.panda.videoliveplatform: 被测app包名,需要修改 --uiautomatormix: 遍历策略

     注:Maxim实质还是monkey,所以很多monkey的基础参数同样适用

    3、Jenkins自动化配置持续集成获取崩溃日志

    通过服务器远程adb connect ip 连接到手机,将新包安装到该手机,并执行monkey脚本后,将崩溃日志上传到workspace,生成构建后文档,直接下载此文件即可获得崩溃日志

    3.1 关于服务器远程adb connect ip连接到手机

    先本地通过usb连接到手机,

    运行 adb devices {查询是否usb连接到该手机,请打开手机调试开关}当能够获取到devices id时

    运行 adb tcpip 5555  {重置端口5555}  重置后 断开usb数据线

    运行 adb connect 10.180.xx.xx:5555 {通过wifi局域网网连接adb 连接该手机,必须手机的wifi和执行命令的电脑在同一局域网} 连接成功后下方会提示

    运行 adb disconnect 10.180.xx.xx:5555 {断开adb 远程连接,方便服务器连接,一个端口只能连接一个,服务器同时连接需要输入其他端口}

    #连接设备
    device_ip=10.180.xxx.xxx:5556
    
    #检查adb
    echo -e "--->检查adb"
    which adb
    adb kill-server
    adb start-server
    
    #wifi连接设备
    echo -e "--->wifi连接设备"
    adb connect ${device_ip}
    adb devices | grep ${device_ip}
    exitCode=$?
    if [[ $exitCode -ne 0 ]]; then
        echo -e "设备${deivce_ip}连接失败,请检查设备无线调试状态"
        echo -e "设备${deivce_ip}连接失败,请检查设备无线调试状态" > ${WORKSPACE}/results.txt
        exit 1
    fi

    # 唤醒屏幕&解锁屏幕
    echo -e "--->唤醒屏幕&解锁屏幕"
    adb shell input keyevent 224
    sleep 3

    3.2 关于测试包的卸载安装及初始化处理

    1、最好选用提供android打包的那台机器,比较容易获取到打出来的测试包,也可通过其他方式运行前去取最新的测试包

    2、adb 卸载老app,并安装新的app

    3、可以直接使用现有的自动化脚本启动app后的一系列数据准备工作:如登录账号,权限确认,自定义协助进入目标模块

    3.3 执行Maxim的monkey命令脚本

    拿QQ app举个例子

    com.tencent.mobileqq

    adb shell "CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.tencent.mobileqq --running-minutes 30 --throttle 200  --pct-uiautomatormix 80 --uiautomatormix -v -v  --output-directory /sdcard/max-output"
    --output-directory /sdcard/max-output  这是崩溃日志的输出路径,每次拿这个目录即可,历史的文件会自动变成max-output1,不用担心重复还是历史文件
    adb pull /sdcard/max-output/ $WORKSPACE 将崩溃日志上传到工作空间

     3.4 上传日志

    Jenkins配置

    最后下次文件即可获取到崩溃日志

    这样每次想获取崩溃日志时,无论身边有没有测试手机都可以获取到崩溃日志,但必须有一部测试手机一直充电放在公司,最好是设置定时任务,隔一段时间就跑一次。

    4、写在最后

    这篇博客只是非常简单的抛砖引玉把一系列串联整合起来了,并没有任何难点,各个环境详细了解需查看官方文档或其他资料,欢迎大家一起讨论和交流一些新的idea

    科技飞速发展的今天,公司的竞争压力也会越来越大,app的稳定性尤为重要,出现崩溃的差评很是刺眼

    除了跑monkey预防还需要靠周期性获取线上崩溃靠前的日志排名,将崩溃修复,如果那个迭代放松,就很有可能崩溃率上升明显,影响kpi,这是一个漫长持续的过程,所以将脚本配置到Jenkins非常合拍。

    最近团队变化有点多,线上问题层出不穷,团队的APP结合了Native、H5、RN、Flutter、mPaaS小程序,目前mPaaS快要成为主流,很多同学都在调整和转岗,在变动阶段需求少了不少,然后空下来有时间把东西整理一下了

    最后,开发也好,运维也好,测试也好,一定要对质量有敬畏之心~~~

     

  • 相关阅读:
    旋转数组中的最小数字
    二叉树的遍历:先序,中序,后序,递归,非递归,层次遍历
    重建二叉树
    Combination Sum II
    Combination Sum
    红黑树
    python 时间模块
    docker 常用命令
    python request 和requests 的区别
    python 面试题1
  • 原文地址:https://www.cnblogs.com/-lisunman/p/13932642.html
Copyright © 2020-2023  润新知