http://blog.csdn.net/wyb199026/article/details/51436754

背景

之前想学习自动化测试的时候,就研究过MonkeyRunner,说实话MonkeyRunner在一定程度上是有局限性的,但是在某些方面解决问题来看,是非常方便的。比如使用Monkey测试的时候,无法很好的控制Monkey的落点。不能保证所有的页面都测到,因此可以使用MonkeyRunner来定制脚本,保证每个Activity都能覆盖。

机器环境

其实一开始我是想找一个现成的教程学学,结果发现基本上说的都是Windows环境下,只能自己摸索摸索。

MonkeyRunner环境

MonkeyRunner是AndroidSDK自带的一个东西,在SDK目录中的tools文件夹中,直接带有MonkeyRunner。

这个命令可以直接使用命令行工具的open方法来直接打开命令,会进入Jyhon的命令行:

SvenWeng@wengyanbindeMacBook-Pro:~/Desktop/android-sdk-macosx/tools|
⇒ monkeyrunner
Jython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:54:35)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.7.0_79
>>>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

在这里直接输入命令:

from com.android.monkeyrunner import MonkeyRunner
  • 1
  • 1

没有报错说明MonkeyRunner命令是没问题的,现在需要把MonkeyRunner配置到环境变量中。

配置MonkeyRunner到环境变量

在Mac中,环境变量有好多个,一般来说,我们说的环境变量就是一个配置文件,如果你使用的是Mac的默认命令行终端,那么你用的就是bash,你需要在bash_profile中添加环境变量:

open ~/.bash_profile
  • 1
  • 1

打开文件后,需要输入这些内容:

export PATH=${PATH}:/Users/SvenWeng/Desktop/android-sdk-macosx/platform-tools/:/Users/SvenWeng/Desktop/android-sdk-macosx/tools/
  • 1
  • 1

然后保存后关闭文件,需要注意的是,上面的命令配置sdk的路径是我的,你的肯定不一样,需要把路径做一些修改。然后执行:

source ~/.bash_profile
  • 1
  • 1

如果你使用的是zsh,那么环境变量就是:

~/.zshrc
  • 1
  • 1

同样的内容放置进去即可。

上面的配置完毕之后打开命令行工具运行monkeyrunner,如果成功的进入了Jython,那么恭喜你,MonkeyRunner的环境已经配置成功。如果失败,请按照上面的方法仔细检查检查。

第一个Demo

配置完毕之后,我们需要运行一下脚本检查是否运行成功,MonkeyRunner的API是python的,那么我们就要写一个python的demo。

import sys
from com.android.monkeyrunner import MonkeyRunner as mr device = mr.waitForConnection()
if device:
device.startActivity(component='com.weizq/com.zztzt.android.simple.app.MainActivity')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

上面代码中,startActivity方法中需要填入你需要启动的Activity。请使用adb或者咨询开发拿到相关Activity名称。

运行demo

运行的方法很简单,命令是monkeyrunner + py文件的路径,比如我这样:

monkeyrunner test.py
  • 1
  • 1

我直接用文件名是因为我已经把shell的路径进到和文件同一层级了,如果不在同一层级,可以使用绝对路径。

最后,我强调一点,一定要先把模拟器给启动,才能测试脚本。

MonkeyRunnermac的更多相关文章

随机推荐

  1. SVN:Access to 'xxx' forbidden

    可以做以下尝试:

  2. sql语句中变量的写法

        $sql = "update cat set num=num+1 where cat_id=$art[cat_id]";    $sql = "update ca ...

  3. 集成 Jenkins 和 TestNG 实现自助式自动化测试平台

    背景介绍 在软件业十分成熟的今天,敏捷(Agile)开发在业界日益流行,而面临的挑战也日益增多,不断变化的用户需求.缩短的开发周期.频繁的部署上线.复杂的产品架构和团队组织,如何继续保证软件的质量是一 ...

  4. vue-vli3创建的项目配置热更新

    vue-vli3创建的项目配置热更新 问题描述:使用vue-cli3创建的项目,修改代码之后,浏览器页面不会自动刷新,然而之前使用webpack初始化的vue项目修改代码之后浏览器会重新加载一下,因为 ...

  5. Python学习 day04

    一.list list可以存放各种类型的数据,与java中list类差不多,比如li = ['keith', 1, True, [1, 2, 3], {name: 'tangtang', age: 1 ...

  6. MySQL 常用show 语句

    1. show tables或show tables from database_name; -- 显示当前数据库中所有表的名称. 2. show databases; -- 显示mysql中所有数据 ...

  7. es6 vs commonjs

    'use strict' export function showMe() { alert("es6"); }; class logging { constructor() { a ...

  8. 【ExtJS】关于自定义组件

    一.命名规范 在你编码过程中对类,名字空间以及文件名使用统一的命名规则对你代码的组织,结构化以及可读性有很大的好处. 1.类命名规范: 类名最好只包含字母,在多数情况下,数字是不鼓励使用的,除非非要用 ...

  9. TOJ 2733 棋盘游戏

    Description 小 希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是 Gardon限制了只有某些格子才 ...

  10. ACdream 1099——瑶瑶的第K大——————【快排舍半,输入外挂】

    瑶瑶的第K大 Time Limit:2000MS     Memory Limit:128000KB     64bit IO Format:%lld & %llu Submit Status ...