[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)

时间: 2024-09-17 04:14:14

[android]android自动化测试十三之monkeyRunner自动化框架的相关文章

创建一个有效的GUI自动化框架

一个良好的自动化测试框架应该具备灵活的,与应用程序无关的,与技术无关和不过时的特点.本文强调的准则可以帮助开发者深层分析测试方案中的代码.这种能力已经被证明在多个自动化项目上是有效的. "自动化框架"这个术语已经为软件测试领域所熟知.尽管很多人都把它与应用在基于UI自动化的技术联系起来,但是它几乎总是被滥用于那些参与测试领域.这大部分的原因是由于大家对自动化框架的应用领域有误解.它应该不仅仅像Coded UI那样,只是一个单纯的UI技术. 现在,市场上有很多商业性的和开源的测试自动化框

Android使用Fragment打造万能页面切换框架_Android

首先我们来回忆一下传统用Activity进行的页面切换,activity之间切换,首先需要新建intent对象,给该对象设置一些必须的参数,然后调用startActivity方法进行页面跳转.如果需要activity返回结果,则调用startActivityForResult方法,在onActivityResult方法中获得返回结果.此外,每一个要展示的activity需要在AndroidManifest.xml文件中注册.而且,如果在某些特定的情况下(比如65536方法数爆炸)要动态加载dex

[android]android自动化测试十之单元测试实例

android源代码中每个app下中都自带了一个test用例,下面主要介绍下camra单元测试用例  在AndroidManifest.xml中标明了测试用例instrumentation函数入口  Java代码 <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2008 The Android Open Source Project Licensed under the Apach

[Android]Android端ORM框架——RapidORM(v2.0)

以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5626716.html [Android]Android端ORM框架--RapidORM(v2.0) RapidORM:Android端轻量高性能的ORM框架 GitHub: https://github.com/wangjiegulu/RapidORM 1. RapidORM v1.0 v1.0博客文档:http://www.cnblogs.com/tiant

[Android]Android端ORM框架——RapidORM(v2.1)

以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6020412.html [Android]Android端ORM框架--RapidORM(v2.1) RapidORM:Android端轻量高性能的ORM框架 GitHub: https://github.com/wangjiegulu/RapidORM RapidORM v2.1 feature 在执行SQL和创建表时提升性能. 提升bind参数时的性能 In

Android使用Fragment打造万能页面切换框架

首先我们来回忆一下传统用Activity进行的页面切换,activity之间切换,首先需要新建intent对象,给该对象设置一些必须的参数,然后调用startActivity方法进行页面跳转.如果需要activity返回结果,则调用startActivityForResult方法,在onActivityResult方法中获得返回结果.此外,每一个要展示的activity需要在AndroidManifest.xml文件中注册.而且,如果在某些特定的情况下(比如65536方法数爆炸)要动态加载dex

Android最基本的异步网络请求框架

本篇文章我们来一起写一个最基本的Android异步网络请求框架,借此来了解下Android中网络请求的相关知识.由于个人水平有限,文中难免存在疏忽和谬误,希望大家可以指出,谢谢大家. 1. 同步网络请求 以HTTP的GET请求为例,我们来介绍一下Android中一个基本的同步请求框架的实现.直接贴代码: public class HttpUtils { public static byte[] get(String urlString) { HttpURLConnection urlConnec

Android系统自带的VPN服务框架实例详解

Android系统自带的VPN服务框架 Android从4.0开始(API LEVEL 15),自己带了一个帮助在设备上建立VPN连接的解决方案,且不需要root权限,本文将对其做一个简单的介绍. 一.基本原理 在介绍如何使用这些新增的API之前,先来说说其基本的原理. android设备上,如果已经使用了VpnService框架,建立起了一条从设备到远端的VPN链接,那么数据包在设备上大致经历了如下四个过程的转换: 1)应用程序使用socket,将相应的数据包发送到真实的网络设备上.一般移动设

【ANDROID游戏开发十三】(保存游戏数据 [下文])详解SQLITE存储方式,并把SQLITE的数据库文件存储在SD卡中!!!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/329.html ----------------------- 『很多童鞋说我的代码运行后,点击home或者back后会程序异常,如果你也这样遇到过,那么你肯定没有仔细读完Himi的博文,第十九篇Himi专门写了关于这些错误的原因和解决方法,这里我在博客都补充说明下,省的童鞋们总疑惑这一块:请点击下面联系进入阅读: