霍格沃兹测试学院 第九期_移动端性能测试_20190703

思寒_seveniruby for 霍格沃兹测试学院外部交流圈 · July 03, 2019 · Last by lvlv0.0 replied at July 23, 2019 · 2831 hits

课前准备

启动时间

Cold startup takes 5 seconds or longer.
Warm startup takes 2 seconds or longer.
Hot startup takes 1.5 seconds or longer.
07-03 20:59:24.427  1126  1696 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.xueqiu.android/.view.WelcomeActivityAlias bnds=[276,1240][540,1529]} from uid 10050
07-03 20:59:24.435 1126 1696 I ActivityManager: ActivityRecord info: ActivityInfo{3f5e7aa com.xueqiu.android.view.WelcomeActivityAlias}
07-03 20:59:24.455 1126 2640 V ActivityManager: startProcess: name=com.xueqiu.android app=null knownToBeDead=true thread=null pid=-1
07-03 20:59:24.465 1126 2640 I ActivityManager: Start proc 11962:com.xueqiu.android/u0a208 for activity com.xueqiu.android/.view.WelcomeActivityAlias
07-03 20:59:24.467 1126 2640 V ActivityManager: startProcess: name=com.xueqiu.android app=ProcessRecord{c9074d 11962:com.xueqiu.android/u0a208} knownToBeDead=true thread=null pid=11962
07-03 20:59:24.487 1126 1696 D ActivityManager: ActivityManagerService,attachApplication,callingPid = 11962
07-03 20:59:24.569 1126 1696 D ActivityManager: Skipping, home or recents stack task: TaskRecord{cb84498 #1 A=com.huawei.android.launcher U=0 StackId=0 sz=1}
07-03 20:59:24.570 1126 1696 D ActivityManager: Skipping intent:flg=0x10804000 cmp=com.android.systemui/.recents.RecentsActivity bnds=[48,1316][1032,2576]
07-03 20:59:24.570 1126 1696 D ActivityManager: Skipping intent:flg=0x10800000 cmp=com.android.systemui/.usb.HwUsbDebuggingActivity
07-03 20:59:24.570 1126 1696 D ActivityManager: Skipping intent:flg=0x18800000 hwFlg=0x100 cmp=com.huawei.hifolder/.MainProxyActivity
07-03 20:59:24.721 1126 2644 V ActivityManager: startProcess: name=com.xueqiu.android:pushservice app=null knownToBeDead=true thread=null pid=-1
07-03 20:59:24.729 1126 2644 I ActivityManager: Start proc 12038:com.xueqiu.android:pushservice/u0a208 for service com.xueqiu.android/com.xiaomi.push.service.XMPushService
07-03 20:59:24.744 1126 2644 D ActivityManager: ActivityManagerService,attachApplication,callingPid = 12038
07-03 20:59:24.789 1126 1151 I ActivityManager: Displayed com.xueqiu.android/.view.WelcomeActivityAlias: +330ms
07-03 20:59:27.749 1126 2640 I ActivityManager: START u0 {flg=0x100000 pkg=com.xueqiu.android cmp=com.xueqiu.android/.common.MainActivity} from uid 10208
07-03 20:59:27.750 1126 2640 I ActivityManager: ActivityRecord info: ActivityInfo{70b3322 com.xueqiu.android.common.MainActivity}
07-03 20:59:27.918 1126 2640 D ActivityManager: Skipping, home or recents stack task: TaskRecord{cb84498 #1 A=com.huawei.android.launcher U=0 StackId=0 sz=1}
07-03 20:59:27.918 1126 2640 D ActivityManager: Skipping intent:flg=0x10804000 cmp=com.android.systemui/.recents.RecentsActivity bnds=[48,1316][1032,2576]
07-03 20:59:27.918 1126 2640 D ActivityManager: Skipping intent:flg=0x10800000 cmp=com.android.systemui/.usb.HwUsbDebuggingActivity
07-03 20:59:27.918 1126 2640 D ActivityManager: Skipping intent:flg=0x18800000 hwFlg=0x100 cmp=com.huawei.hifolder/.MainProxyActivity
07-03 20:59:28.297 1126 1151 I ActivityManager: Displayed com.xueqiu.android/.common.MainActivity: +461ms
07-03 20:59:33.032 1126 2640 V ActivityManager: startProcess: name=com.google.android.webview:sandboxed_process0 app=null knownToBeDead=true thread=null pid=-1
07-03 20:59:33.043 1126 2640 I ActivityManager: Start proc 12210:com.google.android.webview:sandboxed_process0/u0i16 for webview_service com.xueqiu.android/org.chromium.content.app.SandboxedProcessService0
07-03 20:59:33.062 1126 2046 D ActivityManager: ActivityManagerService,attachApplication,callingPid = 12210

查看activity的创建时间

package=com.xueqiu.android
清理缓存数据:adb shell pm clear $package
停止进程:adb shell am force-stop $package
启动appadb shell am start -S -W $package/.view.WelcomeActivityAlias
获取数据:
localhost:~ seveniruby$ adb logcat |grep "Displayed "
07-03 21:08:54.054 1126 1151 I ActivityManager: Displayed com.xueqiu.android/.view.WelcomeActivityAlias: +345ms
07-03 21:08:57.542 1126 1151 I ActivityManager: Displayed com.xueqiu.android/.common.UpdateDialogActivity: +357ms (total +462ms)

录屏+拆帧

录屏

  • screenrecord android自带的工具,但华为手机上没有
  • 手机自带的录屏
  • 摄像机独立录屏,比如很多公司的高速摄像机,不建议,设备昂贵而且自动化成本高
ffmpeg -i SVID_20190703_211522_1.mp4 -r 20 img-%03d.png
ffmpeg -i SVID_20190703_211522_1.mp4 -ss 00:00:09.85 -to 00:00:12.70 xueqiu.gif

手机浏览器测试

webview

  • 需要代理
  • 需要chrome 62版本 高版本在一定情况下会有bug
  • 找一个默认开启webview debug属性的模拟器,网易mumu就不行,genymotion、as自带的模拟器是可以的
  • 真机上需要研发配合打开debug开关
  • sdk版本要对

性能监控系统

  • 生产环境 注入performance api
  • 测试环境 appium selenium execute_script 注入

课后作业1

  • 录制自己公司app的主界面的启动过程,给出启动时间统计,并把启动过程转成git动图贴到回复里

课后作业2

  • 找出自己的公司官网,或者学院官网https://testing-studio.com/, 加载最慢的一个资源的timing数据贴到回复里并给出说明
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 22 条回复 时间 点赞

webview 一定要 Chrome吗? 不能用别的浏览器么?

先占个位置

作业二


第一种方法得到的时间是不是仅包含Activity.onCreate()到onResume的时间,不包含Application创建时间?

ffmpeg分帧之后呢,人工筛选发生变化的图片,计算时间吗?

404 是没用代理么?

JZ 回复
  • 首屏时间、重要的业务流程,录屏
  • w3c performance api用的非常多
  • 后面课程里会用到白盒测试方法,比如cpu profile,比较重要,可以分析更深入的函数级别的性能问题
kaitlyn 回复

opencv可以解决重复图片的筛选去重

作业1

作业2

等待响应的时间过长,没有做CDN缓存

10Floor has been deleted

webview 一定要 Chrome么? 不能用别的浏览器么?

助教说的UC应该是这个吧
https://plus.ucweb.com/docs/pwa/docs-zh/xy3whu

软件层面的录屏实际上并不可靠,fps不稳定,这种误差除了外部录制似乎没有办法解决呀,不知道这边有好的建议吗?

williamfzc 回复

上面也回答了,除了一些严格的测试体系外,不建议使用录屏。更多的要使用代码级别的度量方法,比如埋点或者cpu profile去分析

公开课也是只能试听一部分吗😂 😂 😂

作业1

因为公司APP需要结合硬件,手边没有公司的硬件,所以借genymotion和雪球来完成,不要以为是图片,它只是卡而已
第一次冷启时间19.6s

作业2

最慢的一个资源下载,MP4文件

作业一:
用的iphone录制 -->

作业二:

作业1
录制自己公司app的主界面的启动过程,给出启动时间统计,并把启动过程转成git动图贴到回复里

作业2
找出自己的公司官网,或者学院官网https://testing-studio.com/timing数据贴到回复里并给出说明,加载最慢的一个资源的

作业1:在genymotion模拟器中打开雪球app,总共app主界面启动时间是(725-55)* 50毫秒 = 33500毫秒
1.adb shell screenrecord /storage/emulated/demorecord.mp4
2.adb pull /storage/emulated/demorecord.mp4
3.ffmpeg -i /home/syang/demorecord.mp4 -r 20 img-%3d.png
4.ffmpeg -i /home/syang/demorecord.mp4 -ss 00:00:02.55 -to 00:00:36.30 xueqiu.gif


作业2:
最慢的资源

1.第一个原因可能是因为发送请求到服务器之间的时间太长,建议用CDN
2.第二个原因可能是因为服务器生成响应请求的时间太长,因为response status code是404,所以才怀疑这点,找了很久的文件,没找到,花费时间太长

adb shell screenrecord /sdcard/startup-time.mp4
adb pull /sdcard/startup-time.mp4 ~/Downloads

ffmpeg -i ~/Downloads/startup-time.mp4 -r 50 -ss 00:00:09 -to 00:00:19 ~/Downloads/startup/img-%3d.png

暖启动时间:270*0.02秒 - 3秒广告 = 2.4秒

作业一:录制自己公司app的主界面的启动过程,给出启动时间统计,并把启动过程转成git动图贴到回复里

设备:mumu模拟器
app:雪球
启动时间:(338-228)帧* 50毫秒 = 5500毫秒 = 5.5秒

作业二:找出自己的公司官网,或者学院官网 https://testing-studio.com timing数据贴到回复里并给出说明,加载最慢的一个资源的

网页:https://testing-studio.com
加载慢的资源:%E8%85%BE%E8%AE%AF%E8%AF%BE%E5%A0%82%E8%AF%84%E4%BB%B7-2-1024x1016.png
加载慢的Content Download时间:1.74s

加载慢的timing数据:

JSON.stringify(window.performance.getEntriesByName(document.querySelector(".wp-image-345").src), null, 2)

作业1
171~257帧,启动时间约是4.3秒

作业2
TTFB时间过长

作业二

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up