转载请注明原始链接:https://blog.csdn.net/a464057216/article/details/104370180
后续此博客不再更新,欢迎大家搜索关注微信公众号“测开之美”,测试开发工程师技术修炼小站,持续学习持续进步。
阅读本文前,请先阅读84.Robot Framework简介及安装验证方法安装RF框架。在创建测试用例、测试套之前,我们先学习RF框架测试数据的基本语法。
测试用例的组织结构:
另外:
测试用例文件、测试套初始化文件、资源文件采用Robot Framework测试数据语法,测试库文件、变量文件采用程序语言语法(通常是Python)。
Robot Framework的测试数据分为多个表:
不同的数据表通过表头行区分,表头行格式是*** Settins ***
,不区分大小写,两边的空格可以忽略,*
的个数任意(只要以*
开头即可),可以是*settings
。可以使用单数形式,例如*Setting
。表头行可以包含额外数据,这些额外数据与表头通常用两个或两个以上空格分割,这些额外数据通常起到注释说明作用,RF框架会忽略这些表头行中的额外数据。第一个表头之前的任何数据都会被忽略。
如果数据表表头不在上述列表中,RF会报错。
测试数据文件格式:
需要用--extension
选项配合不同的数据文件格式(.robot
格式可以自动解析,不需要用--extension
选项)。
许多编辑器支持Robot Framework的纯文本文件编辑,例如RIDE,有语法高亮、关键字补全等功能。
纯文本文件的每一行中,关键字和参数用分隔符分割。分隔符使用两个或两个以上的空格,或者被空格包围的管道符(|
),可以同时采用两种分隔符。
制表符被自动转换为两个空格作为分割符,多个连续的制表符也被当做一个分隔符。如果要明确使用制表符,需要转义为\t
。
包含非ASCII字符的纯文本文件,必须保存为UTF-8编码。
可以调整作为分隔符的空格的数量,令文件对齐工整:
*** Settings ***
Documentation Example using the space separated plain text format.
Library OperatingSystem
*** Variables ***
${MESSAGE} Hello, world!
*** Test Cases ***
My Test
[Documentation] Example test
Log ${MESSAGE}
My Keyword /tmp
Another Test
Should Be Equal ${MESSAGE} Hello, world!
*** Keywords ***
My Keyword
[Arguments] ${path}
Directory Should Exist ${path}
空格分割符场景,测试数据中使用内置变量${empty}
表示空、${space}
表示空格,或者对空格转义\
。
空格分隔符通常无法准确区分关键字及其参数,管道符分隔符可以提高可读性。管道符作为分割符的行,必须以管道符开头,不强制用管道符结尾。除了开头和结尾的管道符,作为分隔符的管道符左右必须各至少包含一个空格,可以调整左右空格的数量令文件对齐工整:
| *** Settings *** |
| Documentation | Example using the pipe separated plain text format.
| Library | OperatingSystem
| *** Variables *** |
| ${MESSAGE} | Hello, world!
| *** Test Cases *** | | |
| My Test | [Documentation] | Example test |
| | Log | ${MESSAGE} |
| | My Keyword | /tmp |
| Another Test | Should Be Equal | ${MESSAGE} | Hello, world!
| *** Keywords *** | | |
| My Keyword | [Arguments] | ${path} |
| | Directory Should Exist | ${path |
管道符分隔符场景,如果测试数据中有左右都有空格的管道符,这个管道符需要转义(\|
)。空元素通常不需要转义(拖尾空单元格除外)。
reStructuredText(reST)格式是一个易读的纯文本标记语法,常用于Python项目的文档,可以编译成HTML等多种格式。
reStructuredText文档可以在代码块(code block)中包含代码示例,编译为HTML等其他格式后,代码块通过Pygments进行语法高亮。标准的reStructuredText使用code
指令开始代码块,Sphinx
使用code-block
或sourcecode
指令。指令的参数是程序语言名。下例展示了Python和Robot Framework两种语言的代码块:
.. code:: python
def example_keyword():
print('Hello, world!')
.. code:: robotframework
*** Test Cases ***
Example Test
Example Keyword
Robot Framework解析reSt文件时,先搜索code
、code-block
、sourcecode
指令下的robotframework
定义的测试数据(必须是纯文本格式),然后将数据写入内存并执行,忽略其他所有内容。
包含非ASCII字符的reST文件,必须保存为UTF-8编码。
Robot Framework忽略如下数据:
\
)。#
,后面的字符被当做注释忽略。Robot Framework的测试报告和很多工具也会忽略上述内容。要在Robot Framework中添加可见信息,可以放到测试用例、测试套的文档或元信息中,或者使用内建关键字Log
或Comment
打印日志。
常用转义字符:
\$
:不作为标量,例如\${notvar}
。\@
:不作为列表,例如\@{notvar}
。\&
:不作为字典,例如\&{notvar}
。\%
:不作为环境变量,例如\%{notvar}
。\#
:不作为注释,例如\# not comment
。\=
:不构成命名参数,例如not\=named
。\|
:管道符分隔符场景时,不作为分隔符。\\
:不作为转义字符。\n
:换行符(newline)。\r
:回车符(carriage return)。\t
:制表符。\xhh
:十六进制hh
表示的字符。\uhhhh
:十六进制hhhh
表示的字符。\Uhhhhhhhh
:十六进制hhhhhhhh
表示的字符。测试数据中的字符串都是Unicode编码,需要其字节字符串形式需要显示转换。可以使用Builtin库中的Convert To Bytes
关键字、String库中的Encode String To Bytes
关键字,或者Python代码value.encode(UTF-8)
。
如果\x
、\u
、\U
三种转义形式中有非法字符,最终结果是去掉转义字符\
的字符串,例如\xAX
(X
不是十六进制字符)的结果是xAX
,\U00110000
(数值范围超限)的最终结果是U00110000
(这个特性后续可能会有变化)。
如果需要环境相关的换行符(Windows是\r\n
,Linux是\n
,Mac是\r
),可以使用内置的${\n}
表示换行符。
\n
后面未转义的空格会被忽略,例如two\nlines
和two\n lines
相等。
空值作关键字参数,必须转义或使用内建变量${EMPTY}
:
Using backslash
Do Something first arg \
Using ${EMPTY}
Do Something first arg ${EMPTY}
Non-trailing empty
Do Something ${EMPTY} second arg
测试数据包含空格时,有两个处理难点:
此时需要转义空格或使用内建变量${SPACE}
:
\ leading space
,转义字符加在空格前面,或者${SPACE}leading space
。tailing space \
,转义字符加在空格后面,或者tailing space${SPACE}
。\ \
,空格前后都要加转义字符\
,或者${SPACE}
。consecutive \ \ spaces
,或者consecutive${SPACE * 3}spaces
。测试数据跨行可以使用省略号(…
)续行。测试用例表和关键字表中,省略号前必须至少有一个空单元格。在设置表和变量表中,省略号可以直接放在设置名或变量名下。在所有表中,省略号前的空单元格都被忽略。
测试套、测试用例、关键字的文档和测试套的元信息也可能跨行,这些跨行的数据会自动用\n
拼接。
下面的例子未分行:
*** Settings ***
Documentation This is documentation for this test suite.\nThis kind of documentation can often be get quite long...
Default Tags default tag 1 default tag 2 default tag 3 default tag 4 default tag 5
*** Variable ***
@{LIST} this list is quite long and items in it could also be long
*** Test Cases ***
Example
[Tags] you probably do not have this many tags in real life
Do X first argument second argument third argument fourth argument fifth argument sixth argument
${var} = Get X first argument passed to this keyword is pretty long second argument passed to this keyword is long too
分行后变成这样:
*** Settings ***
Documentation This is documentation for this test suite.
... This kind of documentation can often be get quite long...
Default Tags default tag 1 default tag 2 default tag 3
... default tag 4 default tag 5
*** Variable ***
@{LIST} this list is quite long and
... items in it could also be long
*** Test Cases ***
Example
[Tags] you probably do not have this many
... tags in real life
Do X first argument second argument third argument
... fourth argument fifth argument sixth argument
${var} = Get X
... first argument passed to this keyword is pretty long
... second argument passed to this keyword is long too
接下来可以继续阅读86.Robot Framework创建测试用例学习如何创建Robot Framework测试用例。