实战--传音预装

大纲

1
2
3
4
确认需要覆盖的场景;
场景的指标监控;
构建脚本;
分析监控数据,采集异常数据定位问题;
  • 确认需要覆盖的场景:

一般需要覆盖功能/性能/兼容/耗电/升级这几块,功能一般覆盖app的主功能

  • 方案:
1
2
3
4
5
6
7
8
9
10
11
12
启动app,点击播放栏播放按钮播放music,在切换到后台,在切换回前台;
treding页上下滑动,在切换到music页上下滑动,在切换回treding页;
music页点击歌单,进入歌单,歌单上下滑动两页,然后返回music页;在点击进入chart页,上下滑动两页,在返回;在点击进入艺人页,上下滑动两页,在返回;在点击进入曲风页,上下滑动,在进入第一个曲风,上下滑动,然后返回music首页;在次进入歌单页,上下滑动,然后在次点击第一个歌单进入歌单详情页,然后返回music首页;点击进入视频页,上下滑动,然后返回music首页;点击进入bbc,上下滑动,然后返回music首页;
treding页播放music,然后返回treding;进入music页,点击歌单上浮按钮,进行全部播放,点击歌单详情页的全部播放按钮进行播放,点击歌单详情页的music播放,返回music后;进入播放列表,点击music播放;在进入播放详情页,切歌播放,在返回music首页,点击进入video页,点击视频进行播放,返回treding页;
treding页进行music下载,music首页歌单全局下载按钮进行下载,点击进入歌单详情页,通过全部下载按钮进行下载,进入播放详情页,下载music;
library页,通过localmusic或者下载music对本地下载的music进行播放,播放和后台循环切换;
后台播放music时,分别同时打开,Facebook,WhatsApp,Twitter,Instagram,chrome;在切换回前台;
music页/library页/buzz页/account页进行循环切换;
buzz页,一二级页面循环切换,且每个页面均进行上下滑动;buzz页,点击评论和点赞按键;
account页,进行登录,退出应用,切换回前台,退出登录;
notification,页面循环切换,且每个页面进行上下滑动;
前台常驻10分钟,切换到后台常驻10分钟,在切换回前台;
  • 场景的指标监控:

    由于渠道方未提供确切的合规标准,因此选用网易云音乐作为对比范本;在相同场景下,资源消耗超出网易云10%-30%判定为合规,否则判断为异常

    • 监控性能工具:

    支付宝:solopi

    • 监控指标:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CPU:cpu_max,cpu_ave;需要区分进程cpu和系统cpu
    ROM:需要监控pps/privatedirty-main/全局内存/activity的内存泄露/是否有oom问题,同时需要提供hprof文件;
    带宽:环境带宽,最大占用的带宽;
    响应耗时:前端渲染耗时;
    启动耗时:应用启动耗时,activity启动耗时;
    电量:前台/高频/后台常驻电量消耗;
    流量:前台/高频/后台常驻消耗,升级,下载时的资源消耗;
    app抛出的异常堆栈:监控adb日志获取;
    场景数据:查看工具报告,和工具收集的异常数据;
    线程状态:监控app创建的所有线程及状态;
    • 网易指标
      • 场景1: 启动app,点击播放栏播放按钮播放music,在切换到后台,在切换回前台;
        1
        2
        3
        4
        5
        6
        7
        8
        进程cpu:31.04/20.68/22.62/28.35/35.68(max)=27.33	11.22/10.30/10.65/9.11/13.36(ave)=10.72
        总cpu:86.08/79.02/78.69/91.11/87(max)=84.03 45.80/44.40/41.81/40.14/48.35(ave)=44
        private-ram:196.40/243.39/168.5/157.63/168.03(max)=177.64 186.76/231.17/158.1/144.2/141.02(ave)=163.02
        pss-ram:267.32/177.49/234.1/221.47/235.23(max)=230.27 256.2/163.50/219.3/211.83/206.29(ave)=212.47
        系统总ram:3453/3365/3372/3457/3421(max)=3415.33 3410.91/3349.44/3335.2/3325.13/3377.08(ave)=3353.91
        全局上行流量:449.13/383.05/423.08/629.68/4627=500.63
        全局下行流量:1768.87/1732.48/1862.45/3001.82/33997.12=2211.05
        响应耗时:
      • 场景2: 启动耗时;
        1
        2
        3
        4
        5
        cpu:41.86/40/54.73/41.79/43.54
        rom:2977/3007/3028/2986/2924
        上行流量:32.34/9.72/11.13/11.74/20.76
        下行流量:138.13/61.34/32.75/76.30/54.90
        启动耗时:771ms/2431ms/1080ms/781/748ms
      • 场景3: treding页上下滑动,在切换到music页上下滑动,在切换回treding页;;
        1
        2
        3
        4
        5
        6
        7
        8
        总cpu:56.28/69.59/65.96/54.79/75.57(max)=	40.32/39.65/40.95/36.15/38.25(ave)
        进程cpu:21.84/23.71/22.19/20.37/24.17(max)==22.58 11.64/11.6/12.07/9.35/10.64(ave)=11.29
        pss-ram:403.67/361.57/359.02/375.05/339.13(max)=365.21 388.28/349/340.59/359.07/320.53(ave)=349.55
        private-ram:327.68/288.42/284.15/300.31/265.09(max) =290.96 313.29/275.5/266.61/284/248.88(ave)=275.37
        系统总ram:3635/3578/3587/3571/3500(max)=3578.67 3623/3563.6/3570.09/3560.56/3484.78(ave)=3564.75
        全局上行流量:281.49/351.88/342.72/256.57/320.48=341.90
        全局下行流量:1406.78/1530.86/1694.41/1208.77/1678.10=1538.58
        响应耗时:
      • 场景4: music页点击歌单,进入歌单,歌单上下滑动两页,然后返回music页;在点击进入chart页,上下滑动两页,在返回;在点击进入艺人页,上下滑动两页,在返回;在点击进入曲风页,上下滑动,在进入第一个曲风,上下滑动,然后返回music首页;在次进入歌单页,上下滑动,然后在次点击第一个歌单进入歌单详情页,然后返回music首页;点击进入视频页,上下滑动,然后返回music首页;点击进入bbc,上下滑动,然后返回music首页;
        1
        2
        3
        4
        5
        6
        7
        8
        总cpu:75.71/80.96/89.29/87.47/91.79(max)=85.91	39.67/40.07/44.62/43.97/39.84(ave)=41.29
        进程cpu:49.75/51.24/62.76/50.77/63.49(max)=54.92 14.63/14.62/16.87/16.06/13.35(ave)=15.10
        pss-ram:267.17/271.73/265.97/262.30/314.29(max)=268.29 216.92/222.82/220.84/218.53/281.03(ave)=220.73
        private-ram:204.31/209.68/205.87/202/240.15(max)=206.62 157.54/163.98/161.26/159.72/206.50(ave)=161.65
        系统总ram:3415/3414/3428/3394/3412(max)=3413.67 3371.28/3379.18/3383.33/3337.13/3374.4(ave)=3374.95
        全局上行流量:809.21/896.26/810.98/858.86/827.16=832.33
        全局下行流量:4067.93/4459.75/3786.03/3666.64/5148.2=4104.57
        响应耗时:
      • 场景5: treding页播放music,然后返回treding;进入music页,点击歌单上浮按钮,进行全部播放,点击歌单详情页的全部播放按钮进行播放,点击歌单详情页的music播放,返回music后;进入播放列表,点击music播放;在进入播放详情页,切歌播放,在返回music首页,点击进入video页,点击视频进行播放,返回treding页;
        1
        2
        3
        4
        5
        6
        7
        8
        总cpu:82.99/73.3/79.35(max)=78.55	45.87/45.57/44.19(ave)=45.21
        进程cpu:28.88/33.77/30.33(max)=30.99 12.87/11.60/11.34(ave)=11.94
        pss-ram:360.44/339.74/348.03(max)=349.4 332/313.36/314.22(ave)=319.86
        private-ram:262.51/250.52/259.28(max)=257.44 233.83/224.32/228.88(ave)=229.01
        系统总ram:3449/3485/3462(max)=3465.33 3407.38/3431.68/3427.11(ave)=3422.06
        全局上行流量:14914.79/6908.25/11193.83=11005.62
        全局下行流量:35355.44/17913.15/28217.16=27161.92
        响应耗时:
      • 场景6: treding页进行music下载,music首页歌单全局下载按钮进行下载,点击进入歌单详情页,通过全部下载按钮进行下载,进入播放详情页,下载music;
        1
        2
        3
        4
        5
        6
        7
        8
        总cpu:73.77/83.13/77.37/51.35/72.18(max)	46.94/49.59/46.94/29.66/41.61(ave)
        进程cpu:20.62/21.09/21.91/15.18/10.79(max) 11.91/13.48/10.14/7.87/10.31(ave)
        pss-ram:351.01/301.85/307.79/(max) 339.44/291.96/297.10(ave)
        private-ram:269.26/222.66/228.95(max) 259.39/212.57/217.98(ave)
        系统总ram:2765/2813/2676(max) 2738.27/2770.88/2667.55(ave)
        全局上行流量:16531.35/21262.26/9539.49/3160.78/4068.34
        全局下行流量:32460.28/43211.35/18512.41/6134.98/7870.63
        响应耗时:
      • 场景7: library页,通过localmusic或者下载music对本地下载的music进行播放,播放和后台循环切换;
        1
        2
        3
        4
        5
        6
        7
        8
        总cpu:(max)	(ave)
        进程cpu:(max) (ave)
        pss-ram:(max) (ave)
        private-ram:(max) (ave)
        系统总ram:(max) (ave)
        全局上行流量:
        全局下行流量:
        响应耗时:
      • 场景8: 后台播放music时,分别同时打开,Facebook,WhatsApp,Twitter,Instagram,chrome;在切换回前台;
        1
        2
        3
        4
        5
        6
        7
        8
        总cpu:(max)	(ave)
        进程cpu:(max) (ave)
        pss-ram:(max) (ave)
        private-ram:(max) (ave)
        系统总ram:(max) (ave)
        全局上行流量:
        全局下行流量:
        响应耗时:
      • 场景9: music页/library页/buzz页/account页进行循环切换;
        1
        2
        3
        4
        5
        6
        7
        8
        总cpu:(max)	(ave)
        进程cpu:(max) (ave)
        pss-ram:(max) (ave)
        private-ram:(max) (ave)
        系统总ram:(max) (ave)
        全局上行流量:
        全局下行流量:
        响应耗时:
      • 场景10: buzz页,一二级页面循环切换,且每个页面均进行上下滑动;buzz页,点击评论和点赞按键;
        1
        2
        3
        4
        5
        6
        7
        8
        总cpu:(max)	(ave)
        进程cpu:(max) (ave)
        pss-ram:(max) (ave)
        private-ram:(max) (ave)
        系统总ram:(max) (ave)
        全局上行流量:
        全局下行流量:
        响应耗时:
      • 场景11: account页,进行登录,退出应用,切换回前台,退出登录(无法登录);
        1
        2
        3
        4
        5
        6
        7
        8
        总cpu:94.5/100/82.71/92.37(max)=93.44	37.83/45.15/39.34/32.20(ave)=35.02
        进程cpu:42.78/19.69/23.83/43.29(max)=32.40 11.17/9.02/10.08/9.10(ave)=9.84
        pss-ram:263.71/240.92/125.89(max)=252.315 206.20/236.28/120.34(ave)=221.24
        private-ram:205/184.32/75.10(max)=194.66 150.55/179.58/68.81(ave)=165.07
        系统总ram:2753/2785/2529(max)=2689 2699.31/2752.05/2483.05(ave)=2644.80
        全局上行流量:1157.70/1290.43/730.34/1402.62=1283.59
        全局下行流量:2662.21/2518.72/556.74/6012.13=2590.47
        响应耗时:
      • 场景12: notification,页面循环切换,且每个页面进行上下滑动;
        1
        2
        3
        4
        5
        6
        7
        8
        进程cpu:(max)	(ave)
        总cpu:(max) (ave)
        private-ram:(max) (ave)
        pss-ram:(max) (ave)
        系统总ram:(max) (ave)
        全局上行流量:
        全局下行流量:
        响应耗时:
      • 场景12: 首次进入页面的资源消耗;
        1
        2
        3
        4
        5
        6
        7
        8
        总cpu:(max)	(ave)
        进程cpu:(max) (ave)
        pss-ram:(max) (ave)
        private-ram:(max) (ave)
        系统总ram:(max) (ave)
        全局上行流量:
        全局下行流量:
        响应耗时:
      • 场景13: 前台常驻10分钟,切换到后台常驻10分钟,在切换回前台;
        1
        2
        3
        4
        5
        6
        7
        8
        总cpu:(max)	(ave)
        进程cpu:(max) (ave)
        pss-ram:(max) (ave)
        private-ram:(max) (ave)
        系统总ram:(max) (ave)
        全局上行流量:
        全局下行流量:
        响应耗时:
  • 构建脚本:

  • 方案:

    使用solopi构建脚本;录制脚本时,需要保证时间尽量长,且需要规避无效操作,需要保证脚本尽量简单;在批量执行前,需要先进行三次循环调试,以保证脚本无异常,可批量回放和单脚本循环执行,短时间执行,建议单脚本,跑全维度稳定性,建议批量执行;
    注意实际执行时,需要保证覆盖的机型,尽量接近真实场景;且用solopi进行多次重复执行的压测场景时,建议不要选择重复播放选项来重复播放多次,这种会生成多个性能文件,且一次只能执行一个用例,可以使用批量执行,选择多个用例,一个用例要执行几次,就选中几次,具体看我的教学视频

监控指标:见上方监控指标

  • 分析监控数据,采集异常数据定位问题 :

    本方案,主要是为了实现APP稳定性的评测;因此分析时,主要关注终端性能,消耗资源,是否有异常

  • 资源路径:

    该路径下包含有终端资源数据(CPU/MEN/带宽/响应耗时/fps..)和消耗资源数据(电量/流量),具体数据按勾选的监控对象来落地;

alt_text

  • 工具各路径说明:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
      solopi/error:工具的错误日志;
    solopi/logcat:整个工具的logcat;
    solopi/patch:扩展/补丁,可实现对solopi工具的功能扩展;
    solopi/records:最重要的文件夹,测试对象(app)的所有数据放在此路径下;
    solopi\records\error:app执行,adb监控到的异常会记录在这个目录下;
    solopi\records\export:导出的用例,会放在这个路径下,从这里复制出来给其他人用
    solopi\records\import:从export导出的用例,放在这个路径下,然后在solopi配置里点导入按钮,这样就成功导入了;
    solopi\records\replay:存放solopi用例执行的保存结果,必须点保存,才会落地;否则存放在cpu中,退出会话就会清空,以json格式存放,可以解析看下;
    solopi\records\logcat:存放app的,所有adb日志,和工具的adb日志差不多;
    solopi\records\records\20220217183647_20220218093514:见上图,为资源路径,文件名为时间戳;
    solopi\records\screenshot:存放app录屏的路径;
    solopi\records\screenshots:脚本执行失败时会截图,此为存放失败截图的路径;
    solopi\records\tmp:临时目录,用以存放一些临时文件,如强制结束时,所处页面的截图;
    solopi/ScreenCaptures:存放录屏的目录,通过录屏分帧,可以计算每页的启动耗时;
    solopi/screenshots:脚本故障截图的存放路径,脚本故障时会截图;


  • 分析数据:

    执行操作且确认结束后,需要按照以下顺序来进行分析,上一步失败,下一步中断:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     1、先确认本次脚本,是否执行成功;先查看执行结果,仅当执行成功后,将执行结果导出,归档;
    2、查看下工具的error路径,查看是否有异常抛出,确认与APP无关,则过滤,否则记录;
    3、通过工具,查看录制的性能结果,观察有无异常值,主要关注以下几点:
    cpu:单独执行app时,cpu峰值是否超过80-90%,且cpu超过75%占比是否过大,对比相同场景下网易云的数据,是否超出网易指标20-30%;
    men:查看内存是否存在一直增长,不随场景释放的内存泄露问题;查看内存是否存在oom问题,查看hprof文件,结合内存曲线配合场景,分析内存消耗是否合理;同时需要关注相同场景下网易云音乐的资源消耗对比是否比我们的APP具有明显的优势;
    带宽:带宽,主要考虑,下载资源和实际消耗的流量比,是否实际消耗的在一个合理区间内;以及最大占有带宽,和分配带宽比,分析带宽资源能否得到合理的利用;
    响应耗时:响应耗时,是用户感知最明显的指标;需要符合业界的规范;
    启动耗时:activity启动耗时,通过数帧的方式计算,也是用户能直接感知到的,结合响应耗时,需要符合业界规范;
    流量:流量,主要考虑升级场景流量消耗,后台常驻/前台常驻的流量消耗,活跃及下载场景下的流量消耗;
    电量:电量考虑用户活跃场景/后台常驻/前台常驻时的电量消耗;
    异常日志监控:主要是关注工具solopi\records\error或solopi\error及solopi\records\logcat路径下,查看有无异常抛出;
    anr/crash收集:关注APP的crash和anr目录下是否有响应的异常收集文件;

扩展:有时开发需要dump文件来分析,内存的消耗,此时就需要下载hprf文件提供给开发,低于win10版本,可使用下图方案:
alt_text
高于win10版本,可通过,以下方式获取:

1
2
3
1、ps -ef|grep com.afmobi.boomplayer			--获取pid
2、 kill -10 pid
3、adb bugreport

欢迎关注我的其它发布渠道