• 第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)勾搭。本文由天地会珠海分舵原创。

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


  • 相关阅读:
    微信网页授权获取用户数据-简单开发样例
    为阿里云域名配置免费SSL支持https加密访问简单教程
    LNMP1.3 一键配置环境,简单方便
    python doc另存为docx
    一款移动端网页的代码调试器,鹅厂出品
    移动端禁止页面缩放的meta标签在这里,别再乱找了~
    分享一款极好的响应式404单页
    Tippy.js – 轻量的Javascript Tooltip工具库,最好体验的tip提示工具
    微信内打开网页提示请在浏览器打开页面效果代码
    CSS3 文字忽大忽小效果样式收藏
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7049742.html
Copyright © 2020-2023  润新知