下面是RF安装目录结构图:
由图可以看出,RF采用的是Facde外观设计模式。根据每个目录的名字几乎不用解释就能明白它下面的代码是做什么用的了,很清晰,如api文件夹(或称为api包)提供的是RF的公共的api,调用形式可以采用:from robot.api import ApiName。api包下的几个模块:logger模块是测试库的公共日志接口,负责向日志文件和控制台写消息,测试库通过如下形式:logger.info('My message')使用这个api,标准输出采用这种形式:print '*INFO* My message'。
先看一下主要的几个Facade的程序:
- run.py :文件路径:C:\Python27\lib\site-packages\robot\run.py。
- 功能:RF的核心程序,这个文件RF用来执行脚本的 。
- version.py:文件路径:C:\Python27\lib\site-packages\robot\version.py。
- 功能:这个文件用于生成版本
- rebot.py:文件路径:C:\Python27\lib\site-packages\robot\rebot.py
- 功能:报告和日志生成入口
- errors.py:文件路径:C:\Python27\lib\site-packages\robot\errors.py
- 功能:各种错误子类的定义。
- __init__.py:文件路径:C:\Python27\lib\site-packages\robot\__init__.py
- 功能:执行测试用例或者生成报告
- libdoc:文件路径:C:\Python27\lib\site-packages\robot\libdoc.py
- 功能:用于库文档的生成。
- tidy.py:文件路径:C:\Python27\lib\site-packages\robot\tidy.py。
-
这个文件RF用来清理数据和转换数据格式 。
以上这些功能,可以通过形如from robot import run的形式来导入,这些模块提供的函数和类,可以通过形如
from robot.libdoc import libdoc_cli的形式来导入。
从目录结构中,很明确的一点是,robotframework的入口是在这些Facade程序上的。每个程序里的开头部分,都有说明文档。
- C:\Python27\Lib\site-packages\robot\libdocpkg 这个包libdocpkg主要处理测试套件及测试用例的Documentation中的内容。C:\Python27\Lib\site-packages\robot\libdocpkg\htmlwriter.py 实现Documentation中内容的格式化以及转换成Html的格式化。
- C:\Python27\Lib\site-packages\robot\libdocpkg\writer.py实现测试套件及测试用例的Documentation中的内容的写入。
- C:\Python27\Lib\site-packages\robot\parsing 这个包实现对测试数据(测试套件及测试用例中的数据)的解析,该包中的类
TestCaseFile
,TestDataDirectory
和ResourceFile
表示解析的测试数据,该包可以实现对测试数据(测试套件、测试用例)的解析,并实现对测试数据的CRUD的操作,并能把操作结果实现本地磁盘的保存。要实现测试数据的CRUD操作,离不开此包中的相关模块。 此包中最重要的就是model.py模块,RF的Public APi来自于该模块中。
- C:\Python27\Lib\site-packages\robot\parsing \model.py 该模块中的类
TestCaseFile、
TestDataDirectory
和ResourceFile这三个类实现对测试数据的解析,能把对测试套件及测试用例的数据修改后保存到硬盘中。如model.py中的TestCaseTable类中的add()方法,可以实现
添加测试用例,model.py中的save()方法实现对数据的保存。save()方法的底层调用了C:\Python27\Lib\site-packages\robot\writer\datafilewriter.py模块中DataFileWriter类
的write()方法,该方法本质上是对文本的操作(套件可以看做一个txt或tsv格式的文本)。
注意:测试套件suite对应的是TestCaseFile类,TestCaseFile类继承了_TestData类,_TestData类定义了save()方法,该方法可以对测试用例,测试套件等文件保存到本地磁盘中。
测试用例对应的是model.py中的TestCase类,该类实现了对测试用例相关属性的设置操作,如设置用例的documentaiton。在RF中,测试用例以列表的形式存在,可以看做是测试套件suite的列表,这样就可以
把对测试用例的操作(如测试用的增、删)转化为对列表的操作,例如,要想获取用例,可以采用suite.testcase_table.tests[index]的形式,其中,index是测试用例在列表tests中的索引,添加测试用例可以这样写:
tc = TestCase(suite,name) #实例化一个测试用例
suite.testcase_table.tests.append(tc) #调用列表的append()方法,实现对用例的添加。
model中的TestData类,可以实现对测试套件的实例化,如实例化一个测试套件suite,可以采用如下形式:suite = TestData(None,'F:\WHC\T2.txt',None,False),其中,'F:\WHC\T2.txt'是测试套件suite的路径。
- C:\Python27\Lib\site-packages\robot\model,这个包里有keyword,testsuite,testcase,tags,status,metadata等模块,每个模块分别定义了每个对象,如:testsuite模块,定义了测试套件,testcase模块定义了测试用例,可以通过查看这些模块,来查看每个对象所具有的属性。如图,testcase.py模块中的TestCase类,定义了测试用例所具有的属性。
C:\Python27\Lib\site-packages\robot\writer\datafilewriter.py模块中WritingContex类,实现了对测试用例的格式化处理,分别定义了每种测试用例(txt格式,tsv格式,html格式)的格式。
C:\Python27\Lib\site-packages\robot\writer \filewriters.py 该模块实现对数据(HTML,TSV,TXT等格式的数据)的写操作。
C:\Python27\Lib\site-packages\robot\writer \datafilewriter.py 该模块实现对数据(HTML,TSV,TXT等数据)的格式化,并通过DataFileWriter
类把文件写入到本地磁盘。
- C:\Python27\Lib\site-packages\robot\model \keyword.py 该模块主要用来设置用例中的关键字,比如Douctmentation,Setup,TearDown,Tags,Timeout,Template等。
- C:\Python27\Lib\site-packages\robot\model \totalstatistics.py 该模块主要用来统计测试用例运行的结果。例如:2 tests total, 1 passed, 1 failed;2 critical tests, 1 passed, 1 failed。该模块中有个类:
TotalStatisticsBuilder
(suite=None) ,该类中的方法visit_suite
(suite)用来实现对测试套件及其子套件的遍历。
- C:\Python27\Lib\site-packages\robot\model \visitor.py 该模块提供对测试套件结构的遍历。遍历者通过该接口,可以很容易的实现对测试套件结构的修改或搜集测试套件的信息。所有的测试套件、测试用例、关键字和消息等对象,都有一个visit()方法来接受一个访问者实例,这些方法讲调用相应的访问者方法如visit_suite(), visit_test(), visit_keyword() 或 visit_message(), 这些被调用的方法由
visit()
方法存在的实例来决定。
- C:\Python27\Lib\site-packages\robot\reporting 实现测试报告(report.htm,log.html,output.xml及argfile文件)的生成,它基于XML输出文件以及
ExecutionResult()
工厂方法返回的结果对象或者TestSuite类执行的结果,可以反写这些测试报告。建议通过robot.api包来使用这个公共的API。
- C:\Python27\Lib\site-packages\robot\reporting从XML输出文件中实现对测试报告的解析,此包的公共API由返回Result结果对象的
ExecutionResult()
工厂方法组成。
- C:\Python27\Lib\site-packages\robot\output此包负责内部日志文件及其他输出文件的生成,它不是公共API的一部分,它在用例执行被重构时,很容易发生变化。
- C:\Python27\Lib\site-packages\robot\utils此包包含了通用的效用函数和类。
- C:\Python27\Lib\site-packages\robot\testdoc.py,该模块基于RF测试数据,生成高水平的测试文档。创建的文档是HTML 格式的,它包括名称、文档和 测试套件及测试用例的元数据,以及和二者的顶级关键字和参数。
- 用法:python -m robot.testdoc [options] data_sources output_file 。 它可以通过命令python - m robot.testdoc作为一个安装模块被执行 或作为一个形如:“
python /机器人/testdoc.py 路径”的
脚本被执行。它执行的数据可以是一个单独的文件、目录、或者是多个文件或多个目录。
其中:options选项如下表所示:
选项(options)
|
功能
|
示例
|
---|---|---|
-T 或--title | 设置生成的HTML文档的标题,默认的标题为顶层套件的名称。 | 示例:python -m robot.testdoc -T TestSuite T1.txt testdoc.html 把测试套件T1的生成文档testdoc.html的标题设置为TestSuite。 |
-N 或--name | 覆盖顶级测试套件的名字 | 示例:python -m robot.testdoc -N TestSuite T1.txt testdoc.html 把名为T1的测试套件的名字修改为TestSuite并在生成文档 testdoc.html中显示。(实质上并未返写测试套件的名字,只是在生成的HTML文档中显示修改后的测试套件的名字) |
-D或 --doc | 覆盖顶级测试套件的documentaiton 的内容。 | 示例:python -m robot.testdoc -D TestSuite T1.txt testdoc.html 把名为T1的测试套件的documentaiton 的内容修改为TestSuite。 (实质上并未返写测试套件的documentaiton,只是在生成的HTML文档中显示修改后的documentaiton的内容) |
-M或 --metadata | 设置或覆盖顶级测试套件的元数据Metadata的内容。 | 示例:python -m robot.testdoc -M TestSuite T1.txt testdoc.html 把名为T1的测试套件的Metadata 的内容修改为TestSuite。 (实质上并未返写测试套件的Metadata,只是在生成的HTML文档中显示修改后的Metadata的内容) |
-G或--settag | 给所有的测试用例设置标签 | 示例:python -m robot.testdoc -G Tagtest T1.txt testdoc.html 把名为T1的测试套件的所有的测试用例的Tags的修改为 Tagtest。 (实质上并未返写测试用例的Tags,只是在生成的HTML文档中显示修改后的Tags的内容) |
-t或 --test | 筛选指定名字的测试用例 | 示例:python -m robot.testdoc -t mycase1 T1.txt testdoc.html 把名为T1的测试套件中名字为mycase1的测试用例筛选出来并输出到testdoc.html。 |
-s或 --suite | 筛选指定名字的测试套件 | 示例:python -m robot.testdoc -s TSV1 D:\WHC testdoc.html 把 D:\WHC目录下名为TSV1的测试套件的测试套件筛选出来并输出到testdoc.html。 |
-i 或--include | 筛选指定标签名字的测试用例 | 示例:python -m robot.testdoc -i tagstest T1.txt testdoc.html 把名为T1测试套件中标签为tagstest的测试用例筛选出来并输出到testdoc.html。 |
-e或 --exclude | 排除指定标签名字的测试用例 | 示例:python -m robot.testdoc -e tagstest T1.txt testdoc.html 把名为T1测试套件中标签不是tagstest的测试用例筛选出来并输出到testdoc.html。 |
上面是testdoc的命令行实现形式,各个命令行均可以通过下面的程序进行改写:其中,'D:\WHC\T1.txt'是数据源, 'plan.html'是生成的文档,title,exclude,include,suite,test,settag,metadata,doc,name等这些参数分别与上表中的命令相对应:
from robot.testdoc import testdoc
testdoc('D:\WHC\T1.txt', 'plan.html', title='Test Plan')
testdoc('D:\WHC\T1.txt', 'plan.html', exclude='tagstest')
testdoc('D:\WHC', 'plan.html', exclude='tagstest')
testdoc('D:\WHC', 'plan.html',include='tagstest')
testdoc('D:\WHC', 'plan.html', suite='TSV1')
testdoc('D:\WHC\T1.txt', 'plan.html',test='mycase1')
testdoc('D:\WHC\T1.txt', 'plan.html',settag='tagtests')
testdoc('D:\WHC\T1.txt', 'plan.html',metadata='metadatatest')
testdoc('D:\WHC\T1.txt', 'plan.html',doc='doctest')
testdoc('D:\WHC\T1.txt', 'plan.html',name='Mysuite')
上面的程序也与下面形式的程序等价:
from robot.testdoc import testdoc_cli
testdoc_cli(['--doc', 'helloworld', 'D:\WHC\T1.txt', 'plan.html'])
C:\Python27\Lib\site-packages\robot\htmldata,此包负责实现对输出数据的HTML的格式化处理,该包中的htmldata\testdoc\jsonwriter.py的模块实现对数据的json格式化处理。