博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Robot Framework 源码解析(1) - java入口点
阅读量:5096 次
发布时间:2019-06-13

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

一直很好奇 是如何通过关键字驱动进行测试的,好奇它是如何支持那么多库的,好奇它是如何完成截图的。所以就打算研究一下它的源码。

这是官方给出的Robot framework模块化结构:

 

它的用法暂且不说,网上有很多. 这是我的一个实例。

Robot Framework有很多入口点,比如

1. java -jar robotframework.jar test.robot

2. robot path/to/tests.robot

3. robot --include tag1 --include tag2 --splitlog tests.robot

4. robot --name Example --log NONE t1.robot t2.robot > stdout.txt

因为对java相对比较熟悉一些,所以就从java的入口的点org.robotframework.RobotFramework开始看起。

java -jar robotframework.jar mytests.robot

java -jar robotframework.jar run mytests.robot
java -jar robotframework.jar rebot --log mylog.html out.xml
java -jar robotframework.jar tidy --format robot mytests.html

1 package org.robotframework; 2  3 /** 4  * 5  * Entry point for using Robot Framework from Java programs. 6  * 7  */ 8 public class RobotFramework { 9 10     public static void main(String[] args) {11         int rc = run(args);12         System.exit(rc);13     }14 15     public static int run(String[] args) {16         try (RobotRunner runner = new RobotRunner()) {17             return runner.run(args);18         }19     }20 }

 

 main方法,是程序的入口,命令行传入的参数传递给main方法。通过  int rc = run(args); 将命令后参数传递给run方法。

接下来看run方法是做什么的。

在这里创建了一个RobotRunner的实例,调用该实例的run方法,并且将命令行参数传递给了RobotRunner的run方法。

继续看都做了些什么。

构造函数

1 public RobotRunner() {2       interpreter = new PythonInterpreter();3       runner = createRunner();4 }

run方法:

1     public int run(String[] args) {2         return runner.run(args);3     }

 

 内部创建一个Jython解释器PythonInterpreter对象和 robot.JarRunner 来运行Robot测试。另外 是一个AutoCloseable接口的实现类,可以在try-cache块中自动的关闭资源,以清理解释器。

在 的run方法中可以看到,它是通过RobotPythonRunner的run方法来执行Robot测试的

接下来看 是如何执行Robot测试的:

可是RobotPythonRunner是一个接口!只能去找它的实现类了。 是RobotPythonRunner的实现类。

1 class JarRunner(RobotPythonRunner): 2     """Used for Java-Jython interop when RF is executed from .jar file.""" 3     _commands = {'run': run_cli, 'rebot': rebot_cli, 'tidy': tidy_cli, 4                  'libdoc': libdoc_cli, 'testdoc': testdoc_cli} 5  6     def run(self, args): 7         try: 8             self._run(args) 9         except SystemExit as err:10             return err.code11 12     def _run(self, args):13         if not args or args[0] in ('-h', '--help'):14             print(USAGE)15             raise SystemExit(INFO_PRINTED)16         command, args = self._parse_command_line(args)17         command(args)  # Always calls sys.exit()18 19     def _parse_command_line(self, args):20         if args[0] in self._commands:21             return self._commands[args[0]], args[1:]22         return run_cli, args

 

这个JarRunner其实也没有做什么, 除了解析main(String[] args)方法的参数(第16行),也就是命令行的参数,并且根据参数判断调用哪个方法(第17行)。

例如:java -jar robotframework.jar run mytests.robot这个命令,经过JarRunner解析会最终调用run_cli(mytests.robot)这个方法。

          java -jar robotframework.jar rebot --log mylog.html out.xml这个命令,经过JarRunner解析会最终调用rebot_cli(--log,mylog.html,out.xml)这个方法。

java的命令行入口其实最终还是转到了其它入口点:

  •  entry point for executing tests.
  •  entry point for post-processing outputs (Rebot).
  •  entry point for Libdoc tool.
  •  entry point for Testdoc tool.
  •  entry point for Tidy tool

下一章,我接着来分析执行测试的入口点.

如果喜欢作者的文章,请关注"写代码的猿"订阅号以便第一时间获得最新内容。本文版权归作者所有,欢迎转载. 

 

转载于:https://www.cnblogs.com/yuan1225/p/10642348.html

你可能感兴趣的文章
Windows 10 SDK 10.0.10158
查看>>
Delphi 调用C#编写的WebService 参数为Null解决方法
查看>>
手动完美去除Windows 7 快捷方式小箭头
查看>>
The last packet successfully received from the server was 39,900 milliseconds ago问题解决
查看>>
编译前端工具
查看>>
xming2
查看>>
特征工程入门
查看>>
『嗨威说』数据结构 - 第三章学习内容小结
查看>>
Mac复制粘贴文本时默认使用无格式模式
查看>>
[使用经验]cocostudio UI编辑器的裁剪
查看>>
selenium,控制滚动条
查看>>
【HMM】隐马尔科夫模型
查看>>
Flutter实战视频-移动电商-44.详细页_首屏自定义Widget编写
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_03-常用API第二部分_第2节 Date类_1_毫秒值的概念和作用...
查看>>
[读书笔记]人性的弱点
查看>>
Poj 3287 Catch That Cow(BFS)
查看>>
uml图的基本用法
查看>>
20150313 驱动模块分离概念
查看>>
R语言学习笔记:sort、rank、order、arrange排序函数
查看>>
Leetcode Number of 1 Bits
查看>>