需求:统计手机app几种场景的响应时间,包括前后台,这里简化为统计某个手机app登录的时间
分析:为么不能手工统计?
1:场景多;2:压测情况多;3:希望借助模拟器多开;两两组合情况较多
方案:使用自动化来实现,点击登录按钮开始计时,登录完毕查找元素出现再次计时,从而得到时间差
实践:
//前方已省略app配置相关
//登录输入用户名密码
driver.findElement(By.id("com.lc.oaplus:id/username")).sendKeys("username");
driver.findElement(By.id("com.lc.oaplus:id/password")).sendKeys("1");
long startTime=0,endTime=0;
String psStr="";
//获取开始时间,点击登录按钮
startTime=System.currentTimeMillis();
driver.findElement(By.id("com.lc.oaplus:id/btn_login")).click();
//成功点击待办发文这几个字后,获取结束时间
driver.findElement(By.xpath("//android.widget.TextView[@text='待办发文']")).click();
endTime=System.currentTimeMillis();
System.out.println("登录所需要的时间为:"+(endTime-startTime)/1000.00+"秒");
运行结果:登录所需要的时间为:6.024秒
结果分析:运行结果6秒,人工预估大约1秒,所以程序存在问题,推测因程序需要通过appium操作app,推测定位花费时间,进行验证,将获取开始时间放在登录点击之后,即
//获取开始时间,点击登录按钮
driver.findElement(By.id("com.lc.oaplus:id/btn_login")).click();
startTime=System.currentTimeMillis();
再次运行查看结果:登录所需要的时间为:2.713秒
结果分析:时间减少一半多,故而定位花费时间较多,需要优化当前代码,登录场景开始时间的获取可以放在登录按钮定位点击之后,结束时间使用getpagesource()查看是否有相关内容进行获取
优化代码如下:
//点击登录按钮计时,因为登录按钮查询花费时间,所以点击完按钮后开始计时
driver.findElement(By.id("com.lc.oaplus:id/btn_login")).click();
startTime=System.currentTimeMillis();
System.out.println(startTime);
//若是通过找元素click来查找,因为定位要花费时间,明显比人眼查看时间花费多,所以使用循环查询源码
for (int i = 0; i < 10000; i++) {
psStr=driver.getPageSource();
if(psStr.contains(psStr.contains("待办发文")){
endTime=System.currentTimeMillis();
break;
}
}
System.out.println(endTime);
System.out.println("登录所需要的时间为:"+(endTime-startTime)/1000.00+"秒");
运行查看结果:登录所需要的时间为:2.48秒
这个时间个人以为可能会稍微准确点,到底是否准确还需要后期进行实践比对,请各位大神指正。若各位有更好统计手机app前台响应时间的方法,请指教。