利用AM命令制作自己的自动化工具

原创湛腾科技2016-05-02

当我做移动外场入库测试的时候,使用惠捷朗的自动化测试软件CMDC tester,心里在想,自己能不能做一个类似的软件,因为外场某些测试中是不能用自动化软件或者根本没有自动化软件,而一部分用例就是属于压力测试,e.g.打CSFB电话N次(真是again and again),心里告诫自己我们是IT行业(假装是吧)的测试人员,不是流水线的生产工,不能闷头重复一个工序。把一些低端性,重复量大的任务交给软件来执行。

Android本身支持原生的自动化测试工具——Monkey,可以它是无序的、用于压力测试,可惜无法指定执行特定的Action,不是我们想要的结果。 经过大量搜索,终于找到符合初步要求的工具——AM命令,正确来说因该是ADB AM命令,AM的意思是activity manager,你能使用am去模拟各种系统的行为,例如去启动一个activity,发送广播进程等等。 输入AM –help看下命令的参数构成

am命令在系统中的具体应用:

Music 和 Video(音乐和视频)的启动方法为:

# am start -n com.android.music/com.android.music.MusicBrowserActivity

Camera(照相机)的启动方法为:

# am start -n com.android.camera/com.android.camera.Camera

Browser(浏览器)的启动方法为:

# am start -n com.android.browser/com.android.browser.BrowserActivity

启动浏览器 :

am start -a android.intent.action.VIEW -d http://www.google.cn/

拨打电话 :

am start -a android.intent.action.CALL -d tel:xxxxx

以拨打电话为例

没有返回值,Action是发出去了,究竟执行的结果如何我们无从得知。 需要另外的工具检查终端的状态,判断Action执行与否。 查询Android的开发文档得知 PhoneStateListener类中有一个onCallStateChanged方法可以检测终端的通话状态 途径是有了,但ADB无法直接使用,那是提供给application的方法,那只好写APK。

要使用onCallStateChanged()方法需要继承PhoneStateListener类并重写它的方法 ,调用方法TelephonyManager.listen()

这个APK至少要实现PhoneStateListener和TelephonyManager这2个类,而使用TelephonyManager.listen()监听模式,可以让电话状态发生改变的时候,系统通知程序,无需主动查询。

放干货——APK代码实现

清单文件中记得加入READ_PHONE_STATE、WRITE_EXTERNAL_STORAGE、MOUNT_UNMOUNT_FILESYSTEMS权限;ListenerServer类标记为服务。

APK实现方式:

1、ListenerServer.Class继承Service,好处是后台可以监听电话状态;

2、TM.listen(listener, PhoneStateListener.LISTEN_CALL_STATE)是Start监听;

TM.listen(listener,PhoneStateListener.LISTEN_NONE)是停止监听;

3、writeFileSdcardFile()方法用于保存监听到的结果,下面会用到;

4、MainActivity.Class用于启动/停止监听服务,还有接收监听结果;

说说PC端怎么查询APK保存的电话状态,代码中我将状态保存在内置存储中的2个TXT文件:TerminalInfo1.txt和TerminalInfo2.txt 使用下面的命令就可以查看TXT的内容

结合APK和ADB_AM批处理可以做出简单的自动化脚本

批处理代码

具体运行情况:

以这样的方式实现自动拨打/挂断电话,需要的权限较小,据我所知惠捷朗的CMDC tester要正常运行要么签名安装要么系统ROOT,前者无法做到,因为不是系统发布者,后者会破坏系统安全性,诱发不可知的问题,不是我们想要的;但这种脚本缺点比较明显,功能弱小,无法统计数据,作为一种辅助测试手段,我认为可行。


来自湛腾科技 广州FT胡嘉权的分享

(本文为湛腾科技员工原创)

利用AM命令制作自己的自动化工具

原创湛腾科技2016-05-02

当我做移动外场入库测试的时候,使用惠捷朗的自动化测试软件CMDC tester,心里在想,自己能不能做一个类似的软件,因为外场某些测试中是不能用自动化软件或者根本没有自动化软件,而一部分用例就是属于压力测试,e.g.打CSFB电话N次(真是again and again),心里告诫自己我们是IT行业(假装是吧)的测试人员,不是流水线的生产工,不能闷头重复一个工序。把一些低端性,重复量大的任务交给软件来执行。

Android本身支持原生的自动化测试工具——Monkey,可以它是无序的、用于压力测试,可惜无法指定执行特定的Action,不是我们想要的结果。 经过大量搜索,终于找到符合初步要求的工具——AM命令,正确来说因该是ADB AM命令,AM的意思是activity manager,你能使用am去模拟各种系统的行为,例如去启动一个activity,发送广播进程等等。 输入AM –help看下命令的参数构成

am命令在系统中的具体应用:

Music 和 Video(音乐和视频)的启动方法为:

# am start -n com.android.music/com.android.music.MusicBrowserActivity

Camera(照相机)的启动方法为:

# am start -n com.android.camera/com.android.camera.Camera

Browser(浏览器)的启动方法为:

# am start -n com.android.browser/com.android.browser.BrowserActivity

启动浏览器 :

am start -a android.intent.action.VIEW -d http://www.google.cn/

拨打电话 :

am start -a android.intent.action.CALL -d tel:xxxxx

以拨打电话为例

没有返回值,Action是发出去了,究竟执行的结果如何我们无从得知。 需要另外的工具检查终端的状态,判断Action执行与否。 查询Android的开发文档得知 PhoneStateListener类中有一个onCallStateChanged方法可以检测终端的通话状态 途径是有了,但ADB无法直接使用,那是提供给application的方法,那只好写APK。

要使用onCallStateChanged()方法需要继承PhoneStateListener类并重写它的方法 ,调用方法TelephonyManager.listen()

这个APK至少要实现PhoneStateListener和TelephonyManager这2个类,而使用TelephonyManager.listen()监听模式,可以让电话状态发生改变的时候,系统通知程序,无需主动查询。

放干货——APK代码实现

清单文件中记得加入READ_PHONE_STATE、WRITE_EXTERNAL_STORAGE、MOUNT_UNMOUNT_FILESYSTEMS权限;ListenerServer类标记为服务。

APK实现方式:

1、ListenerServer.Class继承Service,好处是后台可以监听电话状态;

2、TM.listen(listener, PhoneStateListener.LISTEN_CALL_STATE)是Start监听;

TM.listen(listener,PhoneStateListener.LISTEN_NONE)是停止监听;

3、writeFileSdcardFile()方法用于保存监听到的结果,下面会用到;

4、MainActivity.Class用于启动/停止监听服务,还有接收监听结果;

说说PC端怎么查询APK保存的电话状态,代码中我将状态保存在内置存储中的2个TXT文件:TerminalInfo1.txt和TerminalInfo2.txt 使用下面的命令就可以查看TXT的内容

结合APK和ADB_AM批处理可以做出简单的自动化脚本

批处理代码

具体运行情况:

以这样的方式实现自动拨打/挂断电话,需要的权限较小,据我所知惠捷朗的CMDC tester要正常运行要么签名安装要么系统ROOT,前者无法做到,因为不是系统发布者,后者会破坏系统安全性,诱发不可知的问题,不是我们想要的;但这种脚本缺点比较明显,功能弱小,无法统计数据,作为一种辅助测试手段,我认为可行。


来自湛腾科技 广州FT胡嘉权的分享

(本文为湛腾科技员工原创)