前面的文章中基本的case及数据准备工作都已经完成了,现在我们就进行的工作:日志本地化。这里我们要进行两个数据进行本地话,一个就是操作日志,一个就是性能日志。这里我们将分别用两中文本载体记录:text+xls。这样有助于我们对性能数据的分析。
第一步:我们要建一个日志写入的方法在每次操作的时候将操作信息写入
这里我们需要考虑到两点:一个日志命名问题;第二个操作日志信息格式怎么展示。这里我们需要获取到日期与时间
public static String getCurrentTime() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
String str = sdf.format(date);
return str;
}
public static String getCurrentDate() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String str = sdf.format(date);
return str;
}
定义文件名称:
String fileName =getCurrentDate()+"_log.txt"
定义日志内容:其中Text要写入的信息;"\r\n"为换行
String content =getCurrentTime()+"||"+text+ "\r\n";
之后我们要做的就是创建文件写入就好了:这里我们需要注意的是文件类型需要是持续写入的
public void writeLog(String text){
File file =new File(Environment.getExternalStorageDirectory(),getCurrentDate()+fileName);
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file,true);
String content =getCurrentTime()+"||"+text+ "\r\n";
outputStream.write(content.getBytes());
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
其中Environment.getExternalStorageDirectory()是获取到中sdcard的目录;outputStream = new FileOutputStream(file,true);的true就是判定为可持续写入,下一步就可以 直接在操作中直接进行在点击事件后面调用了!参考:uiautomator 2.0 模拟monkey性能测试 基础工作
writeLog("Click"+clickTrueBut.get(b).getText().toString()+" ID:"+clickTrueBut.get(b).getResourceName().toString());
到这里操作日志的写入完成啦!
第二步:我们创建一个写入指定性能数据到xls文件中的方法
这里我们需要考虑到两点:一个文件命名问题;第二个性能数据传入的格式问题及怎么展示。我们依旧需要沿用上面时间及日期的数据:
文件名称:
String fileName =getCurrentDate()+"_Capability.xls"
文件格式:
时间 | Memory | Dalvik | CPU(%) |
。。。 | 。。。 | 。。。 | 。。。 |
。。。 | 。。。 | 。。。 | 。。。 |
性能数据及传入格式,数据包含pssMemory;dalvikMemory;cpuAccounting:参考 uiautomator 2.0 模拟monkey性能测试 性能数据
List<Integer> s =getMemorys();
if(s.size()>5){
pssMemory=s.get(0)+s.get(1)+s.get(2);
dalvikMemory=s.get(3)+s.get(4);
}
String[] capability={String.valueOf(pssMemory), String.valueOf(dalvikMemory), String.valueOf(cpuAccounting)};
我们先要的是创建文件并写入一个表头的方法:
public void writeFrist() throws IOException, WriteException {
File file =new File(Environment.getExternalStorageDirectory(),fileName);
WritableWorkbook wwb = Workbook.createWorkbook(file);
WritableSheet sheet = wwb.createSheet("Capability", 0);
sheet.addCell(new Label(0,0,"时间"));
sheet.addCell(new Label(1,0,"Memory"));
sheet.addCell(new Label(2,0,"Dalvik"));
sheet.addCell(new Label(3,0,"CPU(%)"));
wwb.write();
wwb.close();
}
里面有几个点是需要注意的第一个就是WritableSheet sheet = wwb.createSheet("Capability", 0);中Capability是在xls文件中创建第一个表单的命名;Label(0,0,"时间")中的方法Label(行,列,内容),之后我们同一进行写入并关闭流 wwb.write();wwb.close();这里需要注意的是每次流的写ude单位都是一行,如果你在写入同行的的任意一个列都会将其它的内容覆盖掉。
第一行写入完成了,我们就要准备后面不停的向文件中写入数据了。
1.找到这个文件,判断判断这个文件是否存在了如果不存在需要重新将第一行表头写入:
File xlsFile = new File(Environment.getExternalStorageDirectory().toString() + "/"+fileName);
if(!xlsFile.exists()){
writeFrise();
}
2.找到第一个表单
Workbook workbook = Workbook.getWorkbook(xlsFile);
WritableWorkbook writableWorkbook = workbook.createWorkbook(xlsFile,workbook);
WritableSheet writableSheet = writableWorkbook.getSheet(0);
3.现在我们要进行一个处理如果这个文件中已有数据,我们需要在已有数据后面写入,所以我需要知道已写了多少行。
int rows = writableSheet.getRows();
4.之后就是写入第一列中的时间了
writableSheet.addCell(new Label(0,rows,getCurrentTime()));
5.之后就是将性能数据非别写入第234列了
for(int col=0;col<capability.length;col++){
label = new Label(col+1,rows,text[col]);
writableSheet.addCell(label);
}
writableWorkbook.write();
writableWorkbook.close();
那到现在性能数据的也完成了记录到本地的工作。但是当我们将这个全部写完了你会发现主程序程序运行很慢,那是因为无论是性能数据获取还是日志的写入都是需要时间的。对此我们需要做的多线程去做这个事情,之后的文章中会进行多线程的处理,及扩展到APP自动化测试框架的搭建,慢慢完善自己的小工具。