安卓自动化业务层测试接口

知识养成了思想,思想同时又在融化知识。这篇文章主要讲述安卓自动化业务层测试接口相关的知识,希望能为你提供帮助。
 
 
安卓自动化业务层测试接口阅读前需知的基本知识:
        1. uiautomator 脚本的执行通过shell命令调起执行,向执行的方法传递参数也是通过shell命令
        2   调起的执行方法所在类必须要继承UIATestCasel类
        3.   调起方法内部,职能通过bundle获取外部传递的参数,而不是通过函数参数的方式传递
 
抛出问题:
        在新的自动化测试框架中,业务层属于API层级,非继承于UIATestCasel类(com.android.uiautomator.testrunner.UiAutomatorTestCase)
        1. 业务API不支持外部通过命令或其他方式执行进行业务API,进行测试;如果每次都构造Case来进行业务API的测试,严重影响业务API的测试开发效率
        2. uiautomator执行只支持通过shell,通过bundle传递参数和获取参数;不支持业务API的直接传参方式
        3. shell执行uiautomator,传递参数只能传递字符串;而业务API的参数是多变的,包括int boolean string String[]等
   
解决方案:
        1. 针对第一个问题,业务API外部无法直接调起问题;使用java反射机制实现业务API的外部调起:
            新建一个统一的业务API访问类Agent,继承UIATestCasel类,使其可以通过外部shell命令调起
            在外部通过命令传递object和method这两个参数到bundle,在Agent类entry方法中获取bundle并解析出要测试的API的类路径和方法名
            根据类路径和方法名,通过反射在本地调用
       
      2.   针对uiautomator执行,传递参数只能传递字符串,不满足业务API的参数个数和类型不定问题;采用添加中间层,处理后传递到业务层API
            首先根据业务API方法,获取其参数类型列表
            根据每个参数的类型和参数的序号({index}),把bundle中‘p{index}’对应的value的值转化成对应类型
            把转化后的所有参数放到一个对象里,然后通过反射加载到业务API
              Demo: adb shell uiautomator runtest IQiyiAppAutomatedTest.jar -c com.qiyi.library.base.Agent#entry -e object ReaderBusiness -e method runtest0 -e p0 [0,1,3] -e p1 [rer,re,re]
 
        3.   bundle中的值通过shell命令传递,shell命令中有些字符使用,通过自建转义字符列表的方式来解决
            bundle在使用前,进行一次预处理,把当中的自定义转义字符替换掉;现在有的转义字符见下表

字符对应的转义字符
空格 {{SPACE}}
空字符 {{EMPTY}}
单引号 {{SINGLEQUOTES}}
双引号 {{DOUBLEQUOTES}}
左括号 {{LEFTPARENTHESIS}}
右括号 {{RIGHTPARENTHESIS}}
               
              Demo: adb shell uiautomator runtest IQiyiAppAutomatedTest.jar -c com.qiyi.library.base.Agent#entry -e object ReaderBusiness -e method runtest1 -e p0  {{LEFTPARENTHESIS}}who{{LEFTPARENTHESIS}}
 
  CODE LINK:  http://files.cnblogs.com/files/udld/Agent_Uiautomator.rar
【安卓自动化业务层测试接口】 
           

    推荐阅读