腾讯Android自动化测试实战
上QQ阅读APP看书,第一时间看更新

2.1 自动化测试框架介绍

2.1.1 一个简单的Android App自动化测试过程

在了解相关的Android App的自动化测试框架之前,先来看一个常用的自动化测试实例,这里先不讨论框架,主要是测试用户操作的模拟、执行结果的判断,以便获得对测试自动化的感性认识。

案例需求如下:QQ浏览器打开手机存储卡的文件,通过自动化测试获取其打开某一文件的响应时间,这里首先需要做细分,把需求拆分为几个关键点,即进入浏览器、文件打开操作、获取手机屏幕、截图分析、结果统计输出。自动化测试就是实现机器完成这些关键点的一系列操作,并且在脚本的实际运行中添加需要的业务逻辑判断,实现测试自动化。根据脚本的具体实现,整理出打开文件测试流程图,如图2-2所示。

图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汉明距离相似度对比算法得到图片相似度来判定打开的结果,代码相对要复杂一些,后面的案例中也有类似的代码实现,这里就不再细述。