欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

RobertFramework源码解析(一)-- 如何读取robot文件

程序员文章站 2024-01-19 17:29:52
...

导读

对的,我又开了个系列。实在惭愧,写着写着就感觉想写的很多,但是又不能兼顾,像前面写的PMP系列还没有正式上菜呢。。。
言归正传,RoboertFramework是自动化测试领域一个应用广泛的框架,它以关键字驱动的模式帮助大家更简单的开发自动化测试用例。它提供了非常多的Library,可以用它完成接口自动化测试、UI自动化测试、App自动化测试等。最为重要的是,RF的二次开发门槛也不高,适合各位测试开发以此为基础框架,创建适合自己公司的自动化测试工具。为了能更好的理解RF,本系列从不同层面帮助使用者了解RF原理。
当然本人水平有限,有些代码可能也不是理得很清楚,只介绍大概的代码执行流程。
本篇主要介绍RF如何读取Robot用例文件。

获取RF执行命令行

平时用RF的时候都是通过ride 这个IDE完成自动化用例的设计及执行,因此,可以通过执行ride获取RF的执行命令行:
pybot.bat --loglevel DEBUG:INFO --argumentfile c:\users…appdata\local\temp\RIDEhvqq0l.d\argfile.txt --listener D:\Setup\Python27\lib\site-packages\robotide\contrib\testrunner\TestRunnerAgent.py:27239:False D:\Setup\Python27\Scripts\LearnRF.robot
RobertFramework源码解析(一)-- 如何读取robot文件
如上所述,loglevel主要是打印RF的日志,默认是INFO级别。argumentfile主要存取执行参数,如下所示:

--outputdir
c:\users\....\appdata\local\temp\RIDEhvqq0l.d
-C
off
-W
126
--suite
LearnRF
--test
LearnRF.Demo
--suite
LearnRF
--test
LearnRF.Demo1

listener 是一个监听器,主要是获取脚本的运行信息以完成console日志的输出,这个到时候可以再拿出一篇来详细讲解。最后一个参数就是我们今天要研究的对象,即这个测试用例的文件是如何被读取并应用的。

执行入口

首先我们找到pybot.bat, 这个文件在python的安装路径scripts文件夹下,
RobertFramework源码解析(一)-- 如何读取robot文件
在脚本里面直接执行了robot下面的run.py, 从python下Lib/site-packages下面找到run.py。
RobertFramework源码解析(一)-- 如何读取robot文件
从run方法中调用RobotFramework类的execute方法。从RobotFramework中初始化Application,跳转到application.py。
RobertFramework源码解析(一)-- 如何读取robot文件
在application.py中最终调用了main方法。注意:此处的main方法是子类中的main,因为子类中的main覆盖了Application中的main。
RobertFramework源码解析(一)-- 如何读取robot文件
这样又回到了run.py中的main。

RF读取robot文件

RobertFramework源码解析(一)-- 如何读取robot文件
从main函数中可以看到,先定义了settings,又定义suite,再访问suite,最终执行suite。在这里我们先不管后续的功能,先看TestSuiteBuilder中的build(*datasources),因为在这里处理了我们传进去的robot文件。
紧接着进入build.py,
RobertFramework源码解析(一)-- 如何读取robot文件
RobertFramework源码解析(一)-- 如何读取robot文件
根据代码逻辑,由_parse_and_build->parse->TestData。进入parsing/model.py, 初始化TestCaseFile并执行populate函数。
RobertFramework源码解析(一)-- 如何读取robot文件
在TestCaseFile类中就是去实现读取robot文件并将robot文件中的setting、varaible、testcase、keyword存入相应的table对象。
RobertFramework源码解析(一)-- 如何读取robot文件
在table实例中,主要存取当前对象的parent对象,table的header以及table中包含的robot文件内容,比如testcase_table中,parent就是testcasefile,header就是Test Cases,tests就是Demo和Demo1,其中tests中的每个test还包含其步骤。
RobertFramework源码解析(一)-- 如何读取robot文件
test对象示例:

{'comment': <robot.parsing.comments.Comment object at 0x000000000454C8D0>, 'args': [u'Test The RF Principle'], 'assign': [], 'name': u'Log'}

再上溯到model.py中执行的populate方法,这个地方主要是在populator.py中。大家是不是从这个文件似乎嗅到了一股香的问道。不错,其中的open函数就是读取robot文件的开门钥匙。读取文件内容的实现是在tsvread.py中。
RobertFramework源码解析(一)-- 如何读取robot文件
在这个文件中,我们看到对应的populator将每一行的内容添加到table,从而将robot文件的内容分别读取到各自所述的table对象。
RobertFramework源码解析(一)-- 如何读取robot文件

总结

好了,上面就是对robot文件读取的这个流程,由于个人能力有限,讲得比较粗,没有面面俱到,需要大家去打开代码对照着看,有什么不明白的共同讨论,下一篇继续往下走。(对了,代码里面有些print是梳理代码用的,请原谅我用的这个笨办法 ???? )