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

 

 

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

阅读前需知的基本知识:

        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: https://files.cnblogs.com/files/udld/Agent_Uiautomator.rar

 

          

posted @ 2016-11-14 16:21  UDLD  阅读(532)  评论(0编辑  收藏  举报