博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第8章5节《MonkeyRunner源代码剖析》MonkeyRunner启动执行过程-执行測试脚本
阅读量:6448 次
发布时间:2019-06-23

本文共 2395 字,大约阅读时间需要 7 分钟。

MonkeyRunner在准备好AndroidDebugBridge和DeviceMonitor等服务之后,就基本上是攻克了和目标设备通信的问题了,那往下须要做的就是把測试脚本执行起来了。

178   public static void main(String[] args) {179     MonkeyRunnerOptions options = MonkeyRunnerOptions.processOptions(args);180 181     if (options == null) {182       return;183     }184 185 186     replaceAllLogFormatters(MonkeyFormatter.DEFAULT_INSTANCE, options.getLogLevel());187 188     MonkeyRunnerStarter runner = new MonkeyRunnerStarter(options);189     int error = runner.run();190 191 192     System.exit(error);193   }194 }
代码8-5-1 MonkeyRunnerStarter - Main

从以上代码和本章上面几节分析可知,MonkeyRunnerStarter在实例化MonkeyRunnerStarter的过程中启动了AndroidDebugBridge和DeviceMonitor。然后就会进入下一行189行去调用MonkeyRunnerStarter的run方法。

66   private int run() 67   { 68     String monkeyRunnerPath = System.getProperty("com.android.monkeyrunner.bindir") + File.separator + "monkeyrunner"; 69  70  71     Map
> plugins = handlePlugins(); 72 if (this.options.getScriptFile() == null) { 73 ScriptRunner.console(monkeyRunnerPath); 74 this.chimp.shutdown(); 75 return 0; 76 } 77 int error = ScriptRunner.run(monkeyRunnerPath, this.options.getScriptFile().getAbsolutePath(), this.options.getArguments(), plugins); 78 79 this.chimp.shutdown(); 80 return error; 81 }
代码8-5-2 MonkeyRunnerStarter - run

  • 68行:取得monkeyrunner脚本的绝对路径。“com.android.monkeyrunner.bindir"我们在前面分析过,它代表的就是你的sdk安装文件夹下的”/tools”,然后再加上文件分隔符”/”以及”monkeyrunner”这个脚本。

    所以终于的结果就相似于”/Users/apple/Develop/sdk/tools/monkeyrunner”

  • 72-73行: 假设用户在命令行执行monkeyrunner时没有提供脚本文件路径这个參数。那么就调用ScriptRunner类的console来请求jython解析器打开一个交互窗体来让用户进行交互
  • 74行: 用户停止交互关闭窗体时调用ChimpChat的shutDown方法来通知对应模块測试已经停止,以便它们做对应的处理。比方会给monkey服务发送“quit”命令,通知它測试已经停止
  • 77行: 假设用户在命令行执行monkeyrunner时提供了脚本路径这个參数。那么调用的将会是ScriptRunner的run方法来将该脚本执行起来,事实上里面终于调用的就是jython的解析器来执行脚本。

不管是打开交互console还是直接执行脚本,终于用到的都是jython解析器来做事情,比方我们进去ScriptRunner的run方法:

77   public static int run(String executablePath, String scriptfilename, Collection
args, Map
> plugins) 78 {... 94 PythonInterpreter python = new PythonInterpreter();...114 try115 {116 python.execfile(scriptfilename);117 }...}
代码8-3-3 ScriptRunner - run

做的事情就是去实例化一个jython的解析器,PythonInterpreter所在的包是“org.python.util”。获得jython解析器后就直接调用解析器的execfile方法去执行目标測试脚本了。

注:很多其它文章请关注公众号:techgogogo或个人博客。

当然,也很欢迎您直接微信(zhubaitian1)勾搭。本文由天地会珠海分舵原创。

转载请自觉,是否投诉维权看心情。

你可能感兴趣的文章
图像处理------ 二值膨胀及应用
查看>>
CentOS安装及配置TFTP服务器
查看>>
基于用户投票的排名算法(三):Stack Overflow
查看>>
值类型与引用类型(上)
查看>>
Activiti-Explorer 用户名与密码
查看>>
Winform 调用WCF客户端,所有服务端方法在运行的时候均找不到(编译没有问题)...
查看>>
Entity Framework 5.0系列之Code First数据库迁移
查看>>
数据库相关知识
查看>>
日志服务器设计
查看>>
Xshell生成密钥key(用于Linux 免密码登录)
查看>>
滑动到底部或顶部响应的ScrollView实现
查看>>
自己动手丰衣足食之征服jQuery插件编写
查看>>
基于业务单元的开发与部署模式
查看>>
第二代支付系统专题之报文篇(一)小额支付报文完整版(含二代新增功能业务说明)...
查看>>
非侵入式监控PHP应用性能监控分析
查看>>
LoadRunner 技巧之 脚本设计
查看>>
English Contest -- My English History
查看>>
CentOS挂载NTFS盘符问题
查看>>
Hadoop - Kylin On OLAP
查看>>
浅议javascript的内存泄露
查看>>