跳出Robotium单进程限制,实现跨进程调用的两种方式浅谈

用过Robotium做Android自动化测试的同学都知道,Robotium因为继承了instrumentation而无法进行跨进程的调用,比如模拟按键点击(据说4.3以后instrumentation有了getUIAutomator的入口,然后就木有然后了,本人没有亲试且不在本文讨论中)。

本人亲试了两种实现方式,经实验均能实现简单的事件,比如:发送按键、点击、长按、拖动等,最终的调用方式都采用4.1以后的input命令实现,当然你得是root。具体命令如下:

shell@android:/ $ input

input

usage: input ...

       input text <string>

       input keyevent <key code number or name>

       input tap <x> <y>

       input swipe <x1> <y1> <x2> <y2>

跨应用方式一:关键字:Broadcasting

跨应用方式二:关键字:aidl

下面具体来说说如何实现:

第一种方式比较简单,一句话描述一下就是,通过在测试setup中启动一个service,在service中动态注册一个广播监听从客户端发送过来的文本命令,接收到之后通过Runtime去执行。实现步骤如下:

1、新建一个service,在service创建的时候动态注册一个广播(至于为啥要动态注册,其实静态也可以,但静态的话不能主动解除),在onReceive方法中实现执行命令的方法。如:

device.sendKeyEvent(intent.getStringExtra("cmd"));

2、安装这个service项目到手机;

3、在robotium的setup中start这个service,再到用例发送命令到service中执行;

4、最后可以清理service和广播。

第二种方式,简单说,通过建立aidl文件,实现其接口通过IPC通道跨应用,原理跟第一种是一样的,客户端发送命令到服务端执行。(这里不详细说了,aidl按照官网一步步做就好了)

posted @ 2014-11-14 09:29  xiao.kkp  阅读(514)  评论(0编辑  收藏  举报