移动性能测试 用 appium 获取页面加载时间,几个问题请教大家

陆云达 · 2015年08月31日 · 最后由 hellcat 回复于 2019年01月31日 · 1603 次阅读

目前在自己的产品和竞品上,使用appium来获取页面加载时间,想法很简单,就是点击入口元素,埋点,然后定位一个目标元素再埋点,通过两个埋点时间差来计算页面加载时间。
现在做下来发现做出的时间比实际时间要长比较多,研究了下,大概有2个原因:

  1. 页面dump时间无法省去
  2. 遍历元素的时候会有等待

其中第一个问题,暂时没有比较好的解决方法,不知道大家有没有什么建议?

第二个问题,现在的想法是更改uiautomator的源码来解决,可以看到下面的源码中,在查找匹配元素的时候,每次找不到会有个固定等待时间,这个值默认是1s
但是第二个问题来了,改完以后,怎么打uiautomator.jar包。。。

protected AccessibilityNodeInfo findAccessibilityNodeInfo(long timeout) {
AccessibilityNodeInfo node = null;
long startMills = SystemClock.uptimeMillis();
long currentMills = 0;
while (currentMills <= timeout) {
node = getQueryController().findAccessibilityNodeInfo(getSelector());
if (node != null) {
break;
} else {
// does nothing if we're reentering another runWatchers()
UiDevice.getInstance().runWatchers();
}
currentMills = SystemClock.uptimeMillis() - startMills;
if(timeout > 0) {
SystemClock.sleep(WAIT_FOR_SELECTOR_POLL);
}
}
return node;
}
共收到 19 条回复 时间 点赞

我觉得不能在源码里埋点,下一个考虑是从 logcat 日志获取时间,为什么要用 appium 这种呀?

你这是在case里面埋点吧。应该在app的源码里埋点。

#1楼 @sanlengjingvv 我是在我写的测试case里面埋点的,用appium方便自动化获取时间,logcat的话,我是H5页面,很难获得准确的页面加载完成的那个时间点吧?

#2楼 @doctorq 要做竞品的对比,所以没法在app里面埋点

H5是不是可以在JS里面埋点?重写部分LOAD?WEBVIEW应该是可以从CONSOLE LOG取日志的。可能需要同时修改H5和手机端的代码。
没试过。。。要不你试试看呢?~不动源码的话,个人感觉都不怎么靠谱。
PS:要求不高的话,拿个秒表掐掐算了。。。网络条件不一样,时间也会不同么。。。~~~

秒表时间误差还是存在,换录像数帧吧^_^

#5楼 @yangchengtest 我们做自己的产品是在js里面埋点的,不过为了和竞品比较,所以计算方法就要统一。。。各位说的方法其实都有考虑过,但是要用到竞品,现在只有觉得appium还能做做看

#6楼 @kasi 嗯。。。iOS目前是高速摄像机,不过做的同学表示太无聊,不想一直做- -,想拓展一个自动化的方法。。。

GT应该可以

#9楼 @917930921 GT是啥啊~

#10楼 @eurekasaber 百度一下 腾讯GT

有想出解决的方法吗?我最近也在想这方面的实践,数帧实在太无聊了……

#12楼 @verainmay 最后就是按照帖子里面描述的做了,我自己觉得和肉眼比是差不多的。。。

#13楼 @eurekasaber 最后做法还是dump下来做的吗?目前我们这边也要做这个。。

#14楼 @neyo 不是,就是点击入口后在uiautomator源码里面埋个点,然后寻找元素的方法里面再埋个点这样做的

您好,我们是高速摄像机研发制造企业---合肥富煌君达高科信息技术有限公司,我公司的高速相机几百----一百万帧的相机都有覆盖,我们自己研发了图像采集软件和图像分析软件与相机进行匹配工作。欢迎来电咨询交流。13856506123

陆云达 回复

老铁,这个问题我们最近也在做。。有新的方法吗

hellcat 如何计算 app 页面加载的时间? 中提及了此贴 12月05日 18:10
hellcat 回复

我这问题太早了,现在用adb自带的录像,然后把录下来的视频分帧处理后,用图像处理算法计算第一帧和最后一帧就可以了
图像处理算法没啥难度的,很多库都提供了方法,调用组合下就可以了

陆云达 回复

用的PY还是java做的?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册