MonkeyRunner实践?用 java 来编写脚本
作者:网络转载 发布时间:[ 2015/11/4 13:53:53 ] 推荐标签:编程语言 测试开发技术
前言
之前在论坛看到有同行在用MonkeyRunner测试一些Android的操作, 使用的是Python写的脚本, 设想应该也是可以用java来写脚本的, 毕竟本身MonkeyRunner是用java写的, 并调用了一些Android平台的Api. 在网上上搜索了一下 确实也可以,只是网上的例子基本都是直接使用Android的api, 相对来说看起来不是那么友好, 于是本着学习的态度,自己尝试着学习下MonkeyRunner的源代码, 然后试着改下, 再稍微的封装下, 于是便有了这篇帖子. 本帖子中所描述并且给出的代码, 源于Android的基础Api,二次进行的简单修改, 目的在于研究和学习之用. 同时用java 编写类似MonkeyRunner的代码并不需要MonkeyRunner.jar, 特此声明.
MonkeyRunner基本结构
com.android.monkeyrunner.controller 和 com.android.monkeyrunner.recorder 包下为MonkeyRunner的UI界面, 标准的java swing编写, 界面布局非常简单, 并非像uiautomatorview一样使用的 Eclipse RCP.
com.android.monkeyrunner 包下才是主要的东西, 由Python文件包含的信息会经由JythonUtils进行分析,然后在调用MonkeyRunner.java等这些主要的操作类进行操作.
主要的操作类为MonkeyRunner, MonkeyDevice, MonkeyView, MonkeyImage, 下文将要进行编写和封装的自定义类,也将和这几个关键类进行匹配.
如果想在IDE中编译MonkeyRunner的源代码需要 ddmlib.jar,guavalib.jar,sdklib.jar,chimpchat.jar,hierarchyviewer2lib.jar 这五个jar包,而应于我们自己编写的也需要着五个包,所以并不需要MonkeyRunner.jar.
基本思路
简单说是把MonkeyRunner的核心的几个类自己在写一遍, 因为本身并不复杂,所以写起来也用不了多少时间, 而且很多的方法基本都是删减点,然后直接拷贝过去好了.
扩展对照
举个栗子
MonkeyRunner
public static MonkeyDevice waitForConnection(PyObject[] args, String[] kws) {
ArgParser ap = JythonUtils.createArgParser(args, kws);
Preconditions.checkNotNull(ap);
long timeoutMs;
try {
double timeoutInSecs = JythonUtils.getFloat(ap, 0);
timeoutMs = (long) (timeoutInSecs * 1000.0);
} catch (PyException e) {
timeoutMs = Long.MAX_VALUE;
}
IChimpDevice device = chimpchat.waitForConnection(timeoutMs,
ap.getString(1, ".*"));
MonkeyDevice chimpDevice = new MonkeyDevice(device);
return chimpDevice;
}
MteMonkeyRunner
public static MteMonkeyDevice waitForConnection(long timeoutMs, String deviceId) {
setChimpChat();
IChimpDevice device = chimpchat.waitForConnection(timeoutMs, deviceId);
MteMonkeyDevice mmd = new MteMonkeyDevice(device);
return mmd;
}
setChimpChat()方法为本人自己添加的, 因为如果直接调用MteMonkeyRunner或者是MonkeyRunner的方法因为chimpchat并没有初始化,所以必然抛空指针,所以我自己对chimpchat进行了初始化, 请参考下面的代码:
static void setChimpChat() {
TreeMap<String, String> options = new TreeMap<String, String>();
options.put("backend", "adb");
chimpchat = ChimpChat.getInstance(options);
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11