`
MyEyeOfJava
  • 浏览: 1125069 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7af2d6ca-4fe1-3e9a-be85-3f65f7120bd0
测试开发
浏览量:70178
533896eb-dd7b-3cde-b4d3-cc1ce02c1c14
晨记
浏览量:0
社区版块
存档分类
最新评论

[android]android自动化测试十三之monkeyRunner自动化框架

阅读更多
1.MonkeyRunner自动化遇到的问题
一、元素坐标不好定位
二、不利于代码复用
三、出现问题不好调试
四、无封装大量多余代码

针对以上四点问题,尝试了一些自动化测试框架,虽不尽如意,但是也把成果展示如下:


1.制作一个应用,该应用可以得到你应用上所点击的IP
$ ./andrec --help
Usage: andrec [options] apkfile

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -a ANDROID_SDK, --android-sdk=ANDROID_SDK
                        android sdk path
  -i, --interact        run in jdb interact mode
  -p PORT, --port=PORT  local debug port
  -o OUTPUT, --output=OUTPUT
                        output file
  -v, --verbose         print verbose info


实例:
$ ./andrec TestRecord.apk 
preparing apk...
installing apk...
starting...
connecting debugger...
start recording...

click com.example.R.button1
click com.example.R.submit
click com.example.R.button2
click item 2 in view -1
show menu for item 4 in view -1
click menu item "Edit"
show menu for item 5 in view -1
click menu item "Delete"
click item 18 in view -1
back pressed
show menu
click menu item "New game"
show menu
click menu item "Help"
back pressed
^C


结果导出:
若运行时传入-o参数,则会将结果存入指定文件:
$ ./andrec -o test TestRecord.apk 
.
.
.
^C
$ cat test 
{"type": "click", "target": "com.example.R.button1"}
{"type": "click", "target": "com.example.R.submit"}
{"type": "click", "target": "com.example.R.button2"}
{"position": 1, "type": "click", "target": -1}
{"position": 3, "type": "menu", "target": -1}
{"content": "\"Edit\"", "type": "click"}
{"position": 5, "type": "menu", "target": -1}
{"content": "\"Delete\"", "type": "click"}
{"type": "back"}
{"type": "menu"}
{"content": "\"New game\"", "type": "click"}
{"type": "menu"}
{"content": "\"Help\"", "type": "click"}
{"type": "back"}


支持的Event:
class Recorder(object):

    def click(self, view):
        print 'click', view

    def change_text(self, view, text):
        print 'text in view', view, 'changed to', text

    def click_list_item(self, view, position):
        print 'click item', position, 'in view', view

    def show_list_item_context_menu(self, view, position):
        print 'show menu for item', position, 'in view', view

    def show_menu(self):
        print 'show menu'

    def click_menu_item(self, text):
        print 'click menu item', text

    def back(self):
        print 'back pressed'


此应用只适合于拥有ID的应用,本人所在公司的APK大多数都是没有ID的都是动态生成的,所以此法不太适用。

2.若你的应用拥有大多数ID,那么可以进行第二步,此框架可以根据ID获取该元素在布局中的坐标位置(X,Y)

其中example为例子,src中是对布局树的解析以及封装,此框架可以配合python的UnitTest进行适用


3.调式的问题,若你的第2部也已经完成,那么可以导入python的logging来进行log解析,而且可以把项目导入到Eclipse中进行调式,此处唯一需要注意的是,python的解释拦截器转为monkeyrunner即可

4.另附带1个MonkeyRunner脚本

# coding=UTF-8
import time
import string
import random
import os
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
device = MonkeyRunner.waitForConnection(61)

device.wake()
ImagePath="/home/eamon/tmp_tmp/"
device.removePackage("cn.opda.a.phonoalbumshoushou")
device.installPackage("DXAndroidOptimizer_DXD_2.6.0.425.apk")
time.sleep(5)
device.startActivity(action='android.intent.action.MAIN',component='cn.opda.a.phonoalbumshoushou/cn.com.opda.android.mainui.MainActivity')
time.sleep(10)
#进入功能列表
device.drag((110,400),(10,400),0.1,5)
time.sleep(5)
device.touch(90,140,MonkeyDevice.DOWN_AND_UP)
time.sleep(2)
device.touch(160,240,MonkeyDevice.DOWN_AND_UP)
time.sleep(5)
device.takeSnapshot().writeToFile(ImagePath+"cpu.png","png")
device.press("KEYCODE_BACK",MonkeyDevice.DOWN_AND_UP)
time.sleep(5)
device.touch(160,300,MonkeyDevice.DOWN_AND_UP)
device.takeSnapshot().writeToFile(ImagePath+"memory.png","png")
device.press("KEYCODE_BACK",MonkeyDevice.DOWN_AND_UP)

#功能验证界面
device.touch(200,160,MonkeyDevice.DOWN_AND_UP)
time.sleep(5)
device.takeSnapshot().writeToFile(ImagePath+"functionCheckButton.png","png")
time.sleep(5)
device.touch(160,240,MonkeyDevice.DOWN_AND_UP)
time.sleep(5)
device.takeSnapshot().writeToFile(ImagePath+"functionBlack.png","png")
time.sleep(5)



分享到:
评论
10 楼 a455642158 2013-01-07  
MyEyeOfJava 写道
a455642158 写道
脚本运行一段时间后会提示Unable to take snapshot,该怎么在脚本里监听并且解决呢……

查看设备是否连接上了,查看sdcard是否满了,查看内存以及cpu的使用情况,当不能截图时是否抛出异常,如果有是否能够捕捉的到

有一种是设备断开了 kill后重启都不管用只能拔掉数据线重来,操作又不知道到哪一步了,不好保存操作的步骤。
还有一种是超时,com.android.ddmlib.TimeoutException,请问这种情况我该怎么捕捉这个异常,每个操作都去捕捉的话,脚本会很冗长啊……
9 楼 MyEyeOfJava 2012-12-27  
a455642158 写道
脚本运行一段时间后会提示Unable to take snapshot,该怎么在脚本里监听并且解决呢……

查看设备是否连接上了,查看sdcard是否满了,查看内存以及cpu的使用情况,当不能截图时是否抛出异常,如果有是否能够捕捉的到
8 楼 a455642158 2012-12-26  
脚本运行一段时间后会提示Unable to take snapshot,该怎么在脚本里监听并且解决呢……
7 楼 MyEyeOfJava 2012-10-28  
178890290 写道
你好,请教下:
device.startActivity函数里的action和component的值的根据什么来确定的。
一直没找到打开应用程序的命令。

adb logcat
打开你的应用程序,然后你就看到相关的日志了,那里面有这个值
6 楼 178890290 2012-10-27  
你好,请教下:
device.startActivity函数里的action和component的值的根据什么来确定的。
一直没找到打开应用程序的命令。
5 楼 htdx0101 2012-08-21  
有密码,让下载个JB啊。
4 楼 MyEyeOfJava 2012-08-14  
gxy781895802 写道
如果没有ID  都是代码动态生成的话,那该怎么测才好呢?

没有ID,现在也只能用坐标,在android4.0平台上,可以很轻松地知道每个位置的坐标。
3 楼 gxy781895802 2012-08-13  
如果没有ID  都是代码动态生成的话,那该怎么测才好呢?
2 楼 MyEyeOfJava 2012-07-16  
rollerxlz 写道
怎么还有密码呀?能不能告诉密码?

公司内部框架,不好意思暂时只对外公开实现机制以及思路
1 楼 rollerxlz 2012-07-16  
怎么还有密码呀?能不能告诉密码?

相关推荐

    Android UiAutomator 自动化测试

    Instrumentation是早期Google提供的Android自动化测试工具类 UiAutomator也是Android提供的自动化测试框架,基本上支持所有的Android事件操作 Espresso,Android Studio工程,以apk的形式执行测试 UiAutomator2,...

    Android 自动化测试框架

    Android常用的自动化测试工具框架: Monkey,MonkeyRunner,UIAutomator,Robotium,Appium,Monkey Talk 一、Monkey  是Android SDK自带的测试工具,是一个命令行工具,可以运行在模拟器中或者实际设备中,它向...

    安卓MonkeyRunner自动化测试Lowen.zip

    lowen 基于monkeyrunner的android应用的自动化测试,并输出测试结果到html的框架 仿腾讯utest测试框架 代码有待完善,欢迎有兴趣的朋友一起讨论(目前报表里面使用echarts部分没有写数据处理逻辑,框架已搭好) ...

    Android自动测试之monkeyrunner工具

    前言:最近开始研究Android自动化测试方法,对其中的一些工具、方法和框架做了一些简单的整理,其中包括android测试框架、CTS、Monkey、Monkeyrunner、benchmark、其它testtool等等。因接触时间很短,很多地方有不足...

    android monkey自动化测试改为java调用monkeyrunner Api

    众所周知,一般情况下我们使用android中的monkeyrunner进行自动化测试时,使用的是python语言来写测试脚本。不过,最近发现可以用java调用monkeyrunner Api,用java语言写测试脚本。   于是,就简单研究了一下。...

    lowen:android monkeyrunner自动测试系统

    ###说明洛文基于monkeyrunner的安卓应用的自动化测试,并输出测试结果到HTML的框架仿腾讯测试框架 ## lowen3版本稳定支持多个设备(最多40个USB连接)同时执行脚本 代码有待完善,欢迎有兴趣的朋友一起讨论(目前...

    Android自动测试之Monkey工具

    前言:最近开始研究Android自动化测试方法,对其中的一些工具、方法和框架做了一些简单的整理,其中包括android测试框架、CTS、Monkey、Monkeyrunner、benchmark、其它testtool等等。因接触时间很短,很多地方有不足...

    Android自动测试工具Monkey

    最近开始研究Android自动化测试方法,对其中的一些工具、方法和框架做了一些简单的整理,其中包括android测试框架、CTS、Monkey、Monkeyrunner、benchmark、其它test tool等等。因接触时间很短,很多地方有不足之处...

    Android平台自动测试之Monkey测试工具

    最近开始研究Android自动化测试方法,对其中的一些工具、方法和框架做了一些简单的整理,其中包括android测试框架、CTS、Monkey、Monkeyrunner、benchmark、其它testtool等等。因接触时间很短,很多地方有不足之处,...

    Android自动测试工具Monkey的实现方法

    1. Android Monkey 实现操作流程: 准备:在eclipse里安装Phyon插件...插件准备就绪就重启eclipse,检验PyDev是否正常工作,然后开始MonkeyRunner测试: 第一步: gufeitekiMacBook-Pro:~ gufei$ cd /personal/softwa

Global site tag (gtag.js) - Google Analytics