第8章5节《MonkeyRunner源代码剖析》MonkeyRunner启动执行过程-执行測试脚本
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<String, Predicate<PythonInterpreter>> 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<String> args,
Map<String, Predicate<PythonInterpreter>> plugins)
78 {
...
94 PythonInterpreter python = new PythonInterpreter();
...
114 try
115 {
116 python.execfile(scriptfilename);
117 }
...
}
代码8-3-3 ScriptRunner - run
做的事情就是去实例化一个jython的解析器,PythonInterpreter所在的包是“org.python.util”。获得jython解析器后就直接调用解析器的execfile方法去执行目标測试脚本了。
注:很多其它文章请关注公众号:techgogogo或个人博客http://techgogogo.com。
当然,也很欢迎您直接微信(zhubaitian1)勾搭。本文由天地会珠海分舵原创。
转载请自觉,是否投诉维权看心情。
第8章5节《MonkeyRunner源代码剖析》MonkeyRunner启动执行过程-执行測试脚本的更多相关文章
- 第8章2节《MonkeyRunner源代码剖析》MonkeyRunner启动执行过程-解析处理命令行參数
MonkeyRunnerStarter是MonkeyRunner启动时的入口类,由于它里面包括了main方法.它的整个启动过程主要做了以下几件事情: 解析用户启动MonkeyRunner时从命令行传输 ...
- 第6章1节《MonkeyRunner源代码剖析》Monkey原理分析-事件源-事件源概览
在上一章中我们有简要的介绍了事件源是怎么一回事.可是并没有进行详细的描写叙述.那么往下的这几个小节我们就须要把这方面的知识给补充完整. 这一节我们先主要环绕MonkeySourceNetwork这个事 ...
- 第14章1节《MonkeyRunner源代码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程
到此为止我们描写叙述的MonkeyRunner相应用的点击拖放等操作都是直接通过指定坐标点来实现的.比方以下触摸一个坐标点为(60,90)的按钮的脚本样例: 1 device.touch(60,900 ...
- 第14章4节《MonkeyRunner源代码剖析》 HierarchyViewer实现原理-装备ViewServer-port转发
在初始化HierarchyViewer的实例过程中,HierarchyViewer会调用自己的成员方法setupViewServer来把ViewServer装备好,那么我们这里先看下这种方法: 39 ...
- 第8章7节《MonkeyRunner源代码剖析》MonkeyRunner启动执行过程-小结
最后我们对MonkeyRunner启动的过程做一个总结,当然,当中也包括启动Monkey,尽管它不属于启动过程的一部分: monkeyrunner这个shell脚本会先设置一些执行环境的系统属性保存到 ...
- MonkeyRunner源代码分析之启动
在工作中由于要追求完毕目标的效率,所以很多其它是强调实战.注重招式.关注怎么去用各种框架来实现目的.可是假设一味仅仅是注重招式.缺少对原理这个内功的了解,相信自己非常难对各种框架有更深入的理解. 从几 ...
- Redis源代码分析(十三)--- redis-benchmark性能測试
今天讲的这个是用来给redis数据库做性能測试的,说到性能測试,感觉这必定是高大上的操作了.redis性能測试.測的究竟是哪方面的性能,怎样測试,通过什么指标反映此次測试的性能好坏呢.以下我通过源代码 ...
- 第8章4节《MonkeyRunner源代码剖析》MonkeyRunner启动执行过程-启动AndroidDebugBridge
上一节我们看到在启动AndroidDebugBridge的过程中会调用其start方法,而该方法会做2个基本的事情: 715行startAdb:开启AndroidDebugBridge 722-723 ...
- 第14章8节《MonkeyRunner源代码剖析》 HierarchyViewer实现原理-获取控件列表并建立控件树
在上几节的描写叙述中,我们把HierarchyViewer初始化好.也把ViewServer给装备好了.那如今距离获得一个控件去操作它是万事具备仅仅欠东风了,欠了那一股春风了?欠了的是建立控件树这个东 ...
随机推荐
- hive初体验
--创建表 create table t_order(id int,name string,phone string) row format delimited fields terminated b ...
- 什么是PL/SQL,有什么用
1.什么是PL/SQL,有什么用 Procedure Language+SQL PL/SQL是Oracle数据库特有的编程语言. PL/SQL程序是以SQL为基础,引入了 编程语言特点,例如变 ...
- 洛谷 P2932 [USACO09JAN]地震造成的破坏Earthquake Damage
P2932 [USACO09JAN]地震造成的破坏Earthquake Damage 题目描述 Wisconsin has had an earthquake that has struck Farm ...
- Qt程序打包成exe可执行文件
很多Qt爱好者想发布自己的Qt软件,但却发现在其他没有安装Qt SDK的机器上无法运行,这就是本文想要说明的问题.现在网上大部分软件都要发布自己开发的应用程序,都会打包到exe文件中,待安装完exe文 ...
- IntelliJ IDEA 初始化项目时No Java SDK Found
IntelliJ IDEA 初始化项目时No Java SDK Found 自己在Project SDK后面的New按钮进行JDK的添加:
- 推断CPU 是小端存储(Little endian)还是大端存储(Big endian)模式
第一个版本号: //return true in big-endian machines bool check_big_endian1() { int a = 0; int *p = &a; ...
- mydumper安装及安装故障汇总
mydumper是针对mysql数据库备份的一个轻量级第三方的开源工具,备份方式术语逻辑备份.它支持多线程.备份速度远高于原生态的mysqldump以及众多优异特性. 因此该工具是DBA们的不二选 ...
- 火狐访问IIS出现404,而Chrome可以正常访问
需要在web.config中的handlers中添加如下节点,保存之后,需要重启电脑. <remove name="ExtensionlessUrlHandler-Integrated ...
- Objective-c 中如何重写父类的初始化方法
在我们的日常开发中我们经常会定义一些自己的子类继承一些UIKit 库中的类,那我们应该如何重写的这些初化方法呢?那我们先看看这些类有哪些初初化方法吧.(这里就用UIView为例) - (id)init ...
- MYSQL binlog 日志内容查看
记录mysql数据库真正执行更改的所有操作(DML语句),不包含那些没有修改任何数据的语句,不会记录select和show这样的语句. 二进制日志的作用: 1. 可以完成主从复制的功能 2. 进行恢复 ...