MonkeyRunner实践—用 java 来编写脚本

发表于:2015-11-04 10:16

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:suky2000    来源:51Testing软件测试网采编

  前言
  之前在论坛看到有同行在用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);
  }
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号