zoukankan      html  css  js  c++  java
  • Android UiAutomator

      UiAutomator是一个做UI测试的自动化框架。《Android自动化测试框架》中已有详细介绍,这里就不再累赘了。

    一、首先了解自动化测试流程

    • 自动化需求分析
    • 测试用例设计
    • 自动化框架搭建
    • 脚本编写
    • 测试运行
    • 结果分析

    二、自动化测试框架的搭建

    1.JDK 1.6以上

    2.SDK (android sdk tools  revision21 or higher;android sdk platform API 16 or higher )

    3.Eclipse (adt)

    4.ANT 

      接下来环境变量配置。1-3的环境变量配置详见《搭建Android开发环境》。这里讲一下ANT的环境变量配置。博主使用的eclipse是adt-bundle,也就是已经集成好的工具。先在Eclipse目录下搜索ant.bat,找到文件的位置。配置好变量之后,运行ant -h显示如图即配置成功。

    变量名:ANT_HOME  变量值:ant.bat的路径,例如:E:adteclipsepluginsorg.apache.ant_1.8.3.v201301120609

    变量名:Path      变量值:%ANT_HOME%in;

    三、新建测试工程

    1.打开eclipse,新建一个java工程->Package->Class

    2.导入android.jar和uiautomator.jar包(路径:sdkplatformsandroid-20)

    在libs文件中选择这两个jar包,点击右键出现Add to Build Path->点击即可

    注:新建一个libs文件夹的目的是:将工程拷贝别人时,防止两个jar包的路径错误。

    或者可以在工程名上点击右键->Properties->Java Build Path->Libraries

    四、编写脚本

    用例:唤醒设备->打开设置->点击显示->设置字体->超大->截图->回到home界面

    1.在SDK的tools目录下找到uiautomatorviewer.bat文件

    2.Android设备通过USB连接电脑

    3.运行uiautomatorviewer.bat文件,点击Device ScreenShot进行查看详情

    4.新建一个类继承UiAutomatorTestCase

    5.编写脚本测试用例,方法名必须以test开头

     附上脚本实例(比较简单):

    package com.change.display;
    
    import java.io.IOException;
    import android.os.RemoteException;
    import com.android.uiautomator.core.UiDevice;
    import com.android.uiautomator.core.UiObject;
    import com.android.uiautomator.core.UiObjectNotFoundException;
    import com.android.uiautomator.core.UiSelector;
    import com.android.uiautomator.testrunner.UiAutomatorTestCase;
    
    public class Display extends UiAutomatorTestCase{
        public void test1 () throws UiObjectNotFoundException, RemoteException, IOException{
            //Device wake up
            UiDevice.getInstance().wakeUp();
            //sleep 3s
            sleep(3000);
            //Open the settings
            Runtime.getRuntime().exec("am start -n com.android.settings/.Settings");
            //Click on display
            try{
                UiObject display = new UiObject(new UiSelector().text("显示"));
                display.click();
                sleep(3000);
            }catch(Exception e){
                e.printStackTrace();
            }
            //Select font
            UiObject fs = new UiObject(new UiSelector().text("字体大小"));
            fs.clickAndWaitForNewWindow();
            //Change font
            UiObject size = new UiObject(new UiSelector().text("超大"));
            size.click();
            //Screen shot
            sleep(3000);
            Runtime.getRuntime().exec("screencap -p /sdcard/test.png");    
            //Enter Home interface
            sleep(3000);
            getUiDevice().pressHome();                
            
        }
    
    }

    注意:在代码有中文。首先需要改编码格式(UTF-8),否则会出乱码现象且不能运行。(右键点击工程名-propertise-Resource)

     

    五、编译运行脚本

    1.创建编译文件:android create uitest-project -n <name> -t <target> -p <path>

     -n <name>: name是指要生成的jar包的名字,自己定义的

     -t <target>: target指的是android-sdk的ID。通过android list 查看id。

     -p <path>指的是将要进行编译的工程路径。例如E:adtworkspaceAutoTest

    注:id 所对应的API (sdk)尽量与导入的android.jar包和uiautomator.jar所在的SDK版本一致。

    实例:android create uitest-project -n ChangeFont.jar -t 1 -p E:adtworkspaceAutoTest

    运行后会在AutoTest目录下生成如下图的3个文件。

    注:这里生成build.xml文件可能会出现如下图问题..Error:Could not access ....

    解决:可删除已存在的build.xml文件,再进行编译

    2.编译:在AutoTest目录下cmd 中运行ant build。若编译成功,最后会显示BUILD SUCCESS且在AutoTestin目录下生成ChangeFont.jar文件;

    反之显示BUILD FAILED。

    本实例在此步骤出现的问题:显示Class not found:javac 1.8

    分析:Ant版本太低,可能与jdk 1.8不匹配。

    解决:下载较新版本的Ant,配置好环境变量,重新运行ant build。编译成功

    3.将打包好的jar包push到android设备中

    adb  push E:adtworkspaceAutoTestinChangeFont.jar  data/local/tmp

    注:运行脚本时设备会优先到data/local/tmp下寻找jar包

    4.运行,命令详解《Android “Command” from work summary

    adb shell uiautomator runtest <jars> --nohup -c <packagename.classname>

    实例:adb shell uiautomator runtest ChangeFont.jar --nohup -c com.change.display.Display

    六、结果分析

    先上图看下运行后显示的信息

     

    解释:numtests 运行的所有用例数量  stream 信息流与错误流

    id 运行框架  test 用例名字  class 用例完整类名

    current 当前正在运行第几条  CODE 状态信息

    1.运行前打印当前用例信息

    INSTRUMENTATION_STATUS: numtests=1  

    INSTRUMENTATION_STATUS: stream=

    com.change.display.Display:

    INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner

    INSTRUMENTATION_STATUS: test=test1

    INSTRUMENTATION_STATUS: class="com".change.display.Display

    INSTRUMENTATION_STATUS: current=1

    INSTRUMENTATION_STATUS_CODE: 1

    2.运行时打印运行信息

    INSTRUMENTATION_STATUS: numtests=1

    INSTRUMENTATION_STATUS: stream=.

    INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner

    INSTRUMENTATION_STATUS: test=test1

    INSTRUMENTATION_STATUS: class="com".change.display.Display

    INSTRUMENTATION_STATUS: current=1

    INSTRUMENTATION_STATUS_CODE: 0

    3.运行后打印结果信息

    INSTRUMENTATION_STATUS: stream=

    Test results for WatcherResultPrinter=.

    Time: 13.147

    OK (1 test)

    INSTRUMENTATION_STATUS_CODE: -1

    附:如果要终止测试该怎么实现呢?

    @echo off
    for /f "tokens=2 " %%a in ('adb shell ps -A^| findstr uiautomator') do (
        adb shell kill %%a > nul
    )
    
    pause

    UI Testing

  • 相关阅读:
    C# 读取 vCard 格式
    C#自动选择出系统中最合适的IP地址
    WPF专业编程指南
    WPF专业编程指南
    随手复习一下委托:delegate
    迟到的 WPF 学习 —— 控件
    迟到的 WPF 学习 —— 路由事件
    迟到的 WPF 学习 —— 依赖项属性
    迟到的 WPF 学习 —— 布局
    JavaScript 左右上下自动晃动,自动移动。
  • 原文地址:https://www.cnblogs.com/zeo-to-one/p/6807274.html
Copyright © 2011-2022 走看看