测量webView页面性能技术方案

测量webView页面性能(使用UiAutomator和性能监控工具)

背景:

俺双11会场测试的总指挥想要确认,在猫客的webview中填多少坑位合适,所以进行了如下操作并获取性能:

1,进入webview页面滑动到底部,然后再快速回到顶部,

2,点击顶部的banner进入下级页面,

3,页面深度3层,即重复1,2该操作3次。

采用的技术

需求拆分为2部分,webview控制脚本和性能监控。

脚本 UiAutomator

因为猫客的自动化采用UiAutomator实现,已经提供了很多封装方法,修改起来比较快。

缺点: UiAutomator 不能识别webview的元素,所以判断滑动到底部,滑动到顶部,点击顶部banner这几个操作难点需要突破。

性能数据采集

有3种方案:

1,猫客内嵌入了性能测试模块,打包时配置MONITOR_OPEN=true,然后让监控开启即可。不方便之处是不能实时显示

2,请参见 http://blog.csdn.net/kittyboy0001/article/details/47317855

3, 安装易测客户端或者其他第三方能够监控性能的app或者工具取数据

webview 控制脚本

进入webview

通过am start进入webview

am start -a android.intent.action.VIEW -d urixxxx

滑动操作

因为页面上没有支持 UiScrollable 元素,所以没法使用如下方式:

        UiScrollable scrollable = new UiScrollable(new UiSelector().scrollable(true));
        if (scrollable.exists()) {
            boolean isScrolled = scrollable.scrollForward(maxSteps);
        }

采用土办法,但是更有效的:

        ScreenWidth = mDevice.getDisplayWidth();
        ScreenHeight = mDevice.getDisplayHeight();

         public void swipeUp() {
            int startX = ScreenWidth/2;
            int endX = startX;
            int startY = ScreenHeight/2;
            int endY = ScreenHeight/4;
            mDevice.swipe(startX, startY, endX, endY, STEP_NUM);
        }

判断到达顶部和底部

因为取得不到webview的元素,所以采用了一个笨办法,截屏。在滑动操作前后保存截屏数据,当2次的内容相同,则认为滑动到头了。

但是遇到一个问题,webview页面填的内容很多,滑动过程会出现卡顿。当在卡顿时滑动是不起作用的,因此前后2次截屏内容相同,都是卡住的页面,会导致判断错误。

为了解决这个问题,最初采用了延长每次操作后的等待时间来解决,但是这样太浪费时间…

     public void scrollDown() {
        log("下拉");

        while(true){
            swipeUp();
            sleep(5000);
            if(isSame()) break;
         }
     }

后来优化采用了判断3次是否相同来解决,效果不错

     public void scrollDown() {
        log("下拉");
        while(true){
            swipeUp();
            sleep(1000);
            if(isSame()){     // 进行截屏,判断两次截屏是否相同,
                sleep(1500);  // 如果相同,做滑动操作,然后重新判断
                swipeUp();    // 重复3次
                sleep(1500);  // 如果3次判断都是相同,则不是卡顿
                if(isSame()){ // 经验值,卡顿达不到这么长时间
                    swipeUp();
                    sleep(1500);
                    if(isSame()){
                        break;
                    }
                }
            }
         }
     }

截屏和判断的程序如下:

     public void takeScreenshot(String path){
         File pic = new File(path);
         boolean ret = mDevice.takeScreenshot(pic);
     }

     public boolean isSame(){
         String path = "/data/local/tmp/Screenshot.png";

         takeScreenshot(path);

         if(bmp0!=null)
         bmp1 = bmp0.copy(Bitmap.Config.ARGB_8888, true);;

         bmp0 = BitmapFactory.decodeFile(path);
         bmp0 = bmp0.copy(Bitmap.Config.ARGB_8888, true);

         if(bmp0!=null && bmp1!= null && bmp0.sameAs(bmp1))
             return true;

         return false;
     }

点击顶部 banner

还是因为取得不到webview的元素,所以采用了一个笨办法。因为banner 是webview上的第一个元素,所以先判断顶部工具条的高度,然后再加上页面布局元素的间隙的大小,就是banner 的位置。点击这个位置!

    public void clickBanner() {
         UiCollection colls = new UiCollection(new UiSelector().className("android.widget.LinearLayout"));
         try {
            UiObject topCat = colls.getChildByInstance(new UiSelector().className("android.widget.LinearLayout"),2);
            Rect rect = topCat.getBounds(); //获取顶部工具条的位置

            mDevice.click(ScreenWidth/2,rect.bottom + 30); //点击下面30像素中间位置
        } catch (UiObjectNotFoundException e) {
            e.printStackTrace();
        }
         mDevice.waitForIdle();
    }

第一部分 OK了

取得性能数据

有3种方案:

1,猫客内嵌入了性能测试模块,打包时配置MONITOR_OPEN=true,然后让监控开启即可。不方便之处是不能实时显示成图表~

2,请参见http://blog.csdn.net/kittyboy0001/article/details/47317855

3, 安装易测客户端 http://easytest.taobao.com

这里只对第一种方案做说明,剩下2种方案大家自己看。。。

(当然,我自己更喜欢用第2种方案,因为这个是我自己做的,哈哈哈)

性能监控方案一

在猫客的测试模块中嵌入了一个性能监控的服务,可以监控app运行时的各种参数,在业界有很多独立的app可以做这种动作,嵌入的好处是可以直接使用不用再独立安装。打包时配置MONITOR_OPEN=true 可以让该模块能够生效。

通过如下命令启动服务

    am startservice -a com.xxx.action.AUTOTEST --ei frequency 1 --es caseId
    xxxCaseId  --es caseName xxxCaseName  --es reportIp xx.xx.xx.xx --ez socketMethod false --ei reportPort 80

监控结束时调用如下命令,将测试数据回传到服务器查看

    am startservice -a com.xxx.action.SHUTDOWN

在我们的测试用例中封装了一个测试类PerformanceTest来负责这个动作。

有想了解使用的请联系 XXX

done

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-24 22:08:26

测量webView页面性能技术方案的相关文章

雅虎团队经验:网站页面性能优化的34条黄金守则

1.尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数.这是提高网页速度的关键步骤. 减少页面组件的方法其实就是简化页面设计.那么有没有一种方法既能保持页面内容的丰富性又能达到加快响应时间的目的呢?这里有几条减少HTTP请求次数同时又可能保持页面内容丰富的技术. 合并文件是通过把所有的脚本放到一个文件中来减少HTTP请求的方法,如可以简单地把所有的CSS文件都放入一个

雅虎团队经验:网站页面性能优化的 34条黄金守则

1.尽量减少HTTP请求次数      终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数.这是提高网页速度的关键步骤.      减少页面组件的方法其实就是简化页面设计.那么有没有一种方法既能保持页面内容的丰富性又能达到加快响应时间的目的呢?这里有几条减少HTTP请求次数同时又可能保持页面内容丰富的技术. 合并文件是通过把所有的脚本放到一个文件中来减少HTTP请求的方法,如可以简单地把所有的

雅虎网站页面性能优化的34条黄金守则(转)

雅虎团队经验:网站页面性能优化的34条黄金守则1.尽量减少HTTP请求次数      终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数.这是提高网页速度的关键步骤.      减少页面组件的方法其实就是简化页面设计.那么有没有一种方法既能保持页面内容的丰富性又能达到加快响应时间的目的呢?这里有几条减少HTTP请求次数同时又可能保持页面内容丰富的技术. 合并文件是通过把所有的脚本放到一个文件中

雅虎网站页面性能优化的34条黄金守则

雅虎团队经验:网站页面性能优化的34条黄金守则 1.尽量减少HTTP请求次数      终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数.这是提高网页速度的关键步骤.      减少页面组件的方法其实就是简化页面设计.那么有没有一种方法既能保持页面内容的丰富性又能达到加快响应时间的目的呢?这里有几条减少HTTP请求次数同时又可能保持页面内容丰富的技术. 合并文件是通过把所有的脚本放到一个文件

网站页面性能优化的34条黄金守则

雅虎团队经验:网站页面性能优化的34条黄金守则1.尽量减少HTTP请求次数      终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数.这是提高网页速度的关键步骤.      减少页面组件的方法其实就是简化页面设计.那么有没有一种方法既能保持页面内容的丰富性又能达到加快响应时间的目的呢?这里有几条减少HTTP请求次数同时又可能保持页面内容丰富的技术. 合并文件是通过把所有的脚本放到一个文件中

雅虎网站页面性能优化的34条黄金守则(转载)

老是有人问我 关于优化问题我就每次和他们说雅虎性能优化(有些人不会百度 汗..于是我转载过来啊 不是自己写的 不会因为版权被人家打吧!) 雅虎团队经验:网站页面性能优化的34条黄金守则 1.尽量减少HTTP请求次数      终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数.这是提高网页速度的关键步骤.      减少页面组件的方法其实就是简化页面设计.那么有没有一种方法既能保持页面内容的丰

分布式锁1 Java常用技术方案

前言:       由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.所以自己结合实际工作中的一些经验和网上看到的一些资料,做一个讲解和总结.希望这篇文章可以方便自己以后查阅,同时要是能帮助到他人那也是很好的. ===============================================================长长的分割线===================================

web前端页面性能优化小结

转自blueidear:http://bbs.blueidea.com/thread-2936073-1-1.html PS:结合了精英的思想和自己的一些小小的总结~ 影响用户访问的最大部分是前端的页面.网站的划分一般为二:前端和后台.我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,用户能够为文章发表评论等等.而前端呢?其实应该是属于功能的表现. 而我们建设网站的目的是什么呢?不就是为了让目标人群来访问吗?所以我们可以理解成前端才是真正和用户接触的. 除了后台需要在性能上做优化外,

web 前端页面性能优化总结

影响用户访问的最大部分是前端的页面.网站的划分一般为二:前端和后台.我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,用户能够为文章发表评论等等.而前端呢?其实应该是属于功能的表现. 而我们建设网站的目的是什么呢?不就是为了让目标人群来访问吗?所以我们可以理解成前端才是真正和用户接触的. 除了后台需要在性能上做优化外,其实前端的页面更需要在性能优化上下功夫,只有这样才能给我们的用户带来更好的用户体验.不仅仅如此,如果前端优化 得好,他不仅可以为企业节约成本,他还能给用户带来更多的用户