2.1 自动化测试框架介绍
2.1.1 一个简单的Android App自动化测试过程
在了解相关的Android App的自动化测试框架之前,先来看一个常用的自动化测试实例,这里先不讨论框架,主要是测试用户操作的模拟、执行结果的判断,以便获得对测试自动化的感性认识。
案例需求如下:QQ浏览器打开手机存储卡的文件,通过自动化测试获取其打开某一文件的响应时间,这里首先需要做细分,把需求拆分为几个关键点,即进入浏览器、文件打开操作、获取手机屏幕、截图分析、结果统计输出。自动化测试就是实现机器完成这些关键点的一系列操作,并且在脚本的实际运行中添加需要的业务逻辑判断,实现测试自动化。根据脚本的具体实现,整理出打开文件测试流程图,如图2-2所示。
1. 准备测试工具
下载record和replay的脚本录制工具,有很多工具可以实现,比如本书中的MonkeyRunner、UIAutomator等,在这个案例里从网上下载record /replay可执行工具,直接复制至手机硬盘。
2. 录制测试脚本
在PC上连接手机,打开adb shell命令,进入record工具存放目录,用shell命令运行record工具启动用户脚本录制,并给录制命名,如wps(打开wps文件)。工具运行成功之后,手工完成所需要的业务操作(如手机主页→选择QQ浏览器→文件目录→双击wps文件),操作结束后,按Ctrl+C键结束脚本的录制工作。录制脚本过程如图2-3所示。
图2-3 录制脚本过程
3. 执行测试脚本
这里以Java语言进行测试脚本的编写作为示范,通过Java的ProcessBuilder类在PC上创造并启动一个cmd命令行的进程,并执行“adb shell replay”操作进行脚本回放,这样打开文件的功能就可以通过脚本完成相应的操作执行,如代码清单2-1所示。
代码清单2-1 实现浏览器中打开wps文件
public static synchronized void enterWPS()
{
ProcessBuilder pb = new ProcessBuilder("cmd.exe");//ProcessBuilder("/system/bin/sh");
// java.lang.ProcessBuilder: Creates operating system processes.
pb.directory(new File("C:\\"));
// 设置shell的当前目录。
try {
Process proc = pb.start();
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
// 获取输入流,可以通过它获取SHELL的输出。
BufferedReader err = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter (proc.getOutputStream())), true);
// 获取输出流,可以通过它向SHELL发送命令。
out.println("adb shell replay enter wps");
//打开WPS文件
out.println("exit");
String line;
while ((line = in.readLine()) != null)
{
System.out.println(line);
}
while ((line = err.readLine()) != null)
{
System.out.println(line);
}
in.close();
out.close();
proc.destroy();
}
catch (Exception e)
{
System.out.println("exception:" + e);
}
}
}
这里的录制脚本存放路径需要读者在实践时进行更改,或者把录制的脚本放置在/system/bin/。
4. 结果判断
这里通过测试脚本完成了用户操作的模拟实现,但是正常的测试还需要结果的验证,需要编码脚本进行测试结果的判断,本案例可以通过截屏和图片分析wps文件是否打开成功,可以通过Google汉明距离相似度对比算法得到图片相似度来判定打开的结果,代码相对要复杂一些,后面的案例中也有类似的代码实现,这里就不再细述。