文档章节

Robot Framework 源码解析(1) - java入口点

o
 osc_w9s1w4o0
发布于 2019/04/04 10:07
字数 851
阅读 23
收藏 0

精选30+云产品,助力企业轻松上云!>>>

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

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

 

它的用法暂且不说,网上有很多. 这是我的一个实例。“打开浏览器,baidu搜索一个字符串。”

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方法。

继续看RobotRunner都做了些什么。

构造函数

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

run方法:

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

 

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

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

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

可是RobotPythonRunner是一个接口!只能去找它的实现类了。src/robot/jarrunner.py 是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.code
11 
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的命令行入口其实最终还是转到了其它入口点:

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

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

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Robot Framework自动化测试框架核心指南-如何使用Java编写自定义的RobotFramework Lib

如何使用Java编写自定义的RobotFramework Lib 本文包括2个章节 1、 Robot Frdamwork中如何调用java Lib库 2、使用 java编写自定义的Lib 本文作者为:张永清,转载请注明出处,版权归作者所有...

osc_5n29qf0u
02/21
8
0
Robot Framework源码解析(2) - 执行测试的入口点

我们再来看 src/robot/run.py 的工作原理。摘录部分代码: 1 from robot.conf import RobotSettings 2 from robot.model import ModelModifier 3 from robot.output import LOGGER, pylogging......

osc_gu9d45li
2019/04/08
1
0
eclipse + maven + roboframework + java 环境搭建

会使用到的maven库的网站: http://maven.outofmemory.cn/com.github.markusbernhardt/ http://maven.apache.org/plugins/maven-compiler-plugin/usage.html http://robotframework.org/Mave......

osc_9csjc47c
2019/02/23
5
0
Robot Framework自动化测试(六)--- robotremoteserver使用

robotremoteserver 是什么?   Python Remote Server for Robot Framework 下载地址:https://pypi.python.org/pypi/robotremoteserver/   robotremoteserver是一种远程库接口技术(rem......

osc_5aksh307
2018/08/21
24
0
Robot Framework 教程-概述(翻译)

Robot Framework Tutorial – Overview(点击可以访问原文) Robot Framework 教程-概述 Robot Framework是个通用的自动化测试框架。这是教程的第一篇文章,文章会给出对Robot Framework的一...

不折腾难受斯基
2015/05/12
284
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud开发人员如何解决服务冲突和实例乱窜?(IP实现方案)

点击上方“陶陶技术笔记”关注我 回复“资料”获取作者整理的大量学习资料! 一、背景 在我上一篇文章《Spring Cloud开发人员如何解决服务冲突和实例乱窜?》中提到使用服务的元数据来实现隔...

zlt2000
2019/09/06
0
0
Linux下diff命令用法详解

大家好,我是良许。 我们在平时工作的时候,经常要知道两个文件之间,以及同个文件不同版本之间有何异同点。在 Windows 下,有 beyond compare 这个好用的工具,而在 Linux 下,也有很多很强...

osc_th8jvcw7
44分钟前
7
0
万变不离其宗之UART要点总结

[导读] 单片机开发串口是应用最为广泛的通信接口,也是最为简单的通信接口之一,但是其中的一些要点你是否明了呢?来看看本人对串口的一些总结,当然这个总结并不能面面俱到,只是将个人认为...

osc_kyehmyzk
45分钟前
7
0
kafka的认识、安装与配置

认识Kafka 花费越少的精力在数据移动上,就能越专注于核心业务 --- 《Kafka:The Definitive Guide》 认识 Kafka 之前,先了解一下发布与订阅消息系统:消息的发送者不会直接把消息发送给接收...

osc_wy8nhxhn
47分钟前
0
0
使用pandas进行数据处理——DataFrame篇

  今天是pandas数据处理专题的第二篇文章,我们一起来聊聊pandas当中最重要的数据结构——DataFrame。   上一篇文章当中我们介绍了Series的用法,也提到了Series相当于一个一维的数组,只...

开源仔
47分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部