重复执行
  对于有些场景,我们为了减少误差,通常需要重复执行多次取平均值。因此,我们在新建测试任务的时候,增加了设置重复次数的参数。测试任务会根据设置的参数,重复执行相应的次数。
  
设置重复次数
  响应时间的测试
  页面时间是通过计算开始加载到某个关键元素出现的时间差来作为衡量的,具体实现方式如下:
@BeforeMethod
public void beforeTest() {
createDriver();
stepStartTime = System.currentTimeMillis();
Log.logger.debug("hello");
}
@Test
public void runStep(){
stepTestTime = System.currentTimeMillis() - stepStartTime;
if(loadingtime == 0)
loadingtime = stepTestTime;
//设置结果
if(task.getTasktype().equals("Android 性能测试")){
JSONObject stepResult = new JSONObject();
stepResult.put("uielement", testStep.getUi_element().find_method_value);
stepResult.put("stepname", testStep.getUi_element().name);
stepResult.put("steptime", stepTestTime);
stepResult.put("stepresult", "success");
stepResultList.add(stepResult);
//taskService.setTaskResultInfo(taskId, stepResultList.toJSONString());
}
}
  数据汇总与统计
  性能测试结束后,我们将数据汇总并进行简单的统计,终写入文件,保存为测试报告的数据支持。这里简单列举下CPU的统计代码:
ArrayList cpuInfos = androidPerformanceData.getCpuinfolist();
JSONArray cpuTimeJsonArray = new JSONArray();
JSONArray cpuDataJsonArray = new JSONArray();
double avgCPU = 0.0;
long total = 0;
for (CPUInfo cpuInfo : cpuInfos) {
total += cpuInfo.cpuUsage;
cpuTimeJsonArray.add(cpuInfo.time);
cpuDataJsonArray.add(cpuInfo.cpuUsage);
}
avgCPU = total/cpuInfos.size();
  成果展示
  整体性能报告
  

整体性能报告
  详细性能报告
  详细性能报告主要显示每次执行的响应时间结果,CPU,内存,流量消耗以及FPS的分布曲线。这里简单列举其中两项数据的截图如下。

 

  总结
  至此,我们通过UI自动化与性能测试结合的方式解决了Android App自动化性能测试的问题。而且从脚本的录制,到测试执行,报告的生成都已经平台化。测试人员只需要录制非常简单的脚本,即可一键得到相应的性能测试报告。当然,这种方式也有其缺点,比如响应时间的测试有些小误差,录制脚本有一定的学习成本。这些都是我们未来要优化的方向,欢迎大家提出改进建议。