目录
使用库
这部分介绍如何使用测试库和库的中的关键字。
导入库
关键字是Library,有2种方式导入指定的库:
使用Library关键字,通过库名导入
这种方式本质使用的就是python中导入模块的,根据搜索路径来查找文件
语法:Library [库名]
*** Settings ***
Library OperatingSystem
Library my.package.TestLibrary
Library MyLibrary arg1 arg2
Library ${LIBRARY}
注意:库名都是大小写敏感的,而且空格的个数也需要严格按照库名来写
使用Library关键字,通过文件路径导入
语法:Library [库文件路径]
*** Settings ***
Library PythonLibrary.py (要有后缀名)
Library /absolute/path/JavaLibrary.java
Library relative/path/PythonDirLib/ possible arguments
Library ${RESOURCES}/Example.class
导入库时使用别名
如果导入的库名很长或者级别很多,或者是同样的库但是用不同的版本等情况下,就可以使用别名,将库重命名为简单的字符,方便后续操作
关键字:WITH NAME,大小写敏感。
基本用法如下:
*** Settings ***
Library com.company.TestLib WITH NAME TestLib
Library ${LIBRARY} WITH NAME MyName
同一个库引用多次:
*** Settings ***
Library SomeLibrary localhost 1234 WITH NAME LocalLib
Library SomeLibrary server.domain 8080 WITH NAME RemoteLib
*** Test Cases ***
My Test
LocalLib.Some Keyword some arg second arg
RemoteLib.Some Keyword another arg whatever
LocalLib.Another Keyword
变量
Robot Framework中有很多地方使用到变量,比如关键字的参数,临时变量等等,用来暂时或者永久存储一些数据。Robot Framework支持的变量类型包括,标量,列表、字典和环境变量,引用的语法分别为:${SCALAR}, @{LIST} ,&{DICT},%{ENV_VAR}。标量,可理解为单值变量,与之对应的是List这种多值变量。单值不仅仅可以是字符串、数值这样的,还有可能是个对象或者字典。
Robot Framework变量, 与关键字类似不区分大小写, 同时其中的下划线和空格也会被忽略。推荐使用大写字母来表示全局变量(如 ${PATH} 或 ${TWO WORDS}), 小写字母来表示局部变量(如 ${my var} 或 ${myVar})。
在*** Variables ***下定义的是suite级别的变量。
标量
在*** Variables ***下,用${var}定义标量,在*** Test Cases ***中用log输出
代码示例1:
*** Variables ***
${NAME} robot framework
${VERSION} 3.1
${CONN} ${NAME} + ${VERSION}
*** Test Cases ***
scalar
log ${NAME}
log ${VERSION}
log ${CONN}
执行结果:
Starting test: Rf Demo1.Variables.scalar
20190627 15:53:46.477 : INFO : robot framework
20190627 15:53:46.479 : INFO : 3.1
20190627 15:53:46.481 : INFO : robot framework + 3.1
Ending test: Rf Demo1.Variables.scalar
列表
创建:列表创建时使用的标识符为@
访问:@{NAME}[index]或者 ${NAME}[index],其中index为下标。Robot Framework 3.1版本中,除了列表的切片必须用$符号外其它情况下@和$都可以,建议使用$。列表的访问和python中类似,下标从0开始,负数的话表示从后向前取数据,如果下标超过列表长度的话会报索引错误,也可以使用切片
代码示例:
*** Variables ***
@{colors} red green white
@{nums} 1 2
${index} 2
*** Test Cases ***
list
log ${colors}[0]
log @{colors}[-1]#取最后一个元素
log ${colors}[1:]#切片,注意是$开头
log @{colors}[${index}]#列表和标量结合使用
log @{nums}[0]
log @{nums}[${index}] #越界
执行结果:
字典
创建:字典创建和访问时使用的标识符为&,
访问:通过 &{NAME}[key]或者${NAME}[key] 这样的语法格式获取字典中某项的值, 其中 key 是键的名称。Robot Framework 3.1版本中,以上两种语法都支持,但是建议使用$。字典的键名当作字符串处理, 非字符串的键可以用变量代替
代码示例1:创建字典并获取其中的项
*** Variables ***
&{user 1} name=kongsh password=1234 age=${42}
&{user 2} name=kongsh password=1234 password=8888#key重复
&{user 3} name=kongsh\=tt #变量值中有=号时需要用反斜杠\转义
${key} name
*** Test Cases ***
dict
log many ${user 1}[${key}] ${user 1}[age]
log ${user 2}[password]
log &{user 3}[name]
log ${user 3.name}#点的方式访问
执行结果:
说明:
- 字典的key不会有重复的值,多次写同一个key时只保留最后一次写的结果
- 变量值中有=号时需要反斜杠转义
- 如果键是字符串, 还可以使用另一种语法格式 ${NAME.key}(注意这里是 $ )。
代码示例2:字典中的项可以作为命名参数传给关键字
假设有个字典变量 &{USER} 中有值 {'name': 'robot', 'password': 'secret'}, 则下面两个用例的效果是等价的。伪代码:
*** Test Cases ***
Constants
Login name=robot password=secret
Dict Variable
Login &{USER}
命令行中设置变量
变量可以在命令行中通过选项--variable (-v) 单个设置, 也可以通过选项 --variablefile (-V) 设置变量文件。通过命令行设置的变量对所有执行的测试文件是全局可见的, 如果局部的变量表格或者局部导入的变量文件中存在重名的变量, 则这些变量也会被命令行中指定的值所覆盖。
设置单个变量的选项格式是 --variable name:value, 其中 name 是变量名, 不带 ${} ,value是变量的值。有多个变量的话就使用这个选项多次。这种方式只能定义标量变量,很多特殊字符必须使用选项 :option:–escape经过转义才能表示。
--variable EXAMPLE:value
--variable HOST:localhost:7272
--variable ESCAPED:Qquotes_and_spacesQ --escape quot:Q --escape space:_
在上例中, 变量值分别是:
- ${EXAMPLE} 值为 value
- ${HOST} 和 ${USER} 值分别为 localhost:7272 和 robot
- ${ESCAPED} 值为 "quotes and spaces",--escape quot:Q表示用引号代替Q, --escape space:_表示用空格代替下划线
在命令行中指定变量文件的选项格式是 --variablefile path/to/variables.py
注:如果变量同时在命令行的变量文件中和单独指定, 则单独指定的变量有更高的优先级。
有返回值的关键字
关键字的返回值可以赋值给变量, 这样不同的关键字之间就可以进行交互。这种方式定义的变量和其它变量基本相同, 只是其作用域仅限于它们被创建的 local scope。也就是说在一个测试用例里得到一个返回值变量, 不能在另一个测试用例中使用。
代码示例1:返回标量
*** Test Cases ***
return scalar
${x} evaluate 9
log ${x}
执行结果:
代码示例2:返回列表
*** Test Cases ***
return list
${list} create List 1 2 3
Length Should Be ${list} 3
log many @{list}
执行结果:
代码示例3:返回字典
*** Test Cases ***
return dict
&{d} create dictionary p=1 y=2 t=3 h=4 o=5
... n=6
length should be ${d} 6
log ${d.t}
执行结果:
代码示例4:返回值分配个多个变量
*** Test Cases ***
assign variables
${a} ${b} ${c}= create List 1 2 3
${frist} @{rest}= create List 1 2 3
@{frist} ${rest}= create List 1 2 3
${frist} @{middle} ${end}= create List 1 2 3
执行结果:
说明:
- ${a}, ${b} ,${c} 分别为 1, 2, 3,也就是将列表中数据分别赋给3个变量;
- ${first} 值为 1,是数字类型; @{rest}值为 [2, 3],是一个子列表;
- @{first} 值为 [1, 2] ,是一个子列表; ${last} 值为 3,是数字类型;
- ${begin} 值为 1;@{middle} 值为 [2]是一个子列表; ${end} 值为 3.
使用关键字创建变量
通过关键字 Set Test Variable 设置的变量在当前测试用例的作用域内可用。例如, 在一个测试用例中的一个用户关键字中设置了一个变量, 该变量会在这个测试用例步骤可见, 同时当前用例中的其它用户关键字也可以使用这个变量,这个关键字创建的变量在其它测试用例中不可用。
通过关键字 Set Suite Variable 创建的变量在当前执行的测试套件内可见。 使用这个方式创建变量和在测试数据文件的变量表格中定义变量, 以及从变量文件导入变量的效果一样。这些变量对其它的测试套件, 包括子套件, 都不可见。
通过关键字 Set Global Variable 创建的变量在设置之后全局可见。这种方式创建的变量和在 setting variables in command line 中使用选项 --variable 或 --variablefile 定义变量效果一样,因为这个关键字会改变任意地方的变量, 所以必须谨慎使用。
注:关键字 Set Test/Suite/Global Variable 直接在作用域内设置变量, 没有返回值。而 Set Variable 设置局部变量, 并且有返回值。
数字变量
用${Numbers}来表示数值型。Robot Framework默认传递的是字符串,显式的传递数字对那些预期接受参数是数字(而不是数字字符串)的关键字来说很有用。
*** Test Cases ***
Example 1A
Connect example.com 80 # Connect gets two strings as arguments
Example 1B
Connect example.com ${80} # Connect gets a string and an integer
Example 2
Do X ${3.14} ${-1e-4} # Do X gets floating point numbers 3.14 and
可以创建二进制、十六进制和八进制的数字,前缀分别为0b,0o,0x,不区分大小写。
*** Test Cases ***
num
Should Be Equal ${0b1011} ${11}
Should Be Equal ${0o10} ${8}
Should Be Equal ${0xff} ${255}
Should Be Equal ${0B1010} ${0XA}
布尔值和None/null值
变量是大小写不敏感的,比如${True} and ${true}是等价的,${None} 和 ${null} 是同义的。
*** Test Cases ***
Boolean
Set Status ${true} # Set Status gets Boolean true as an argument
Create Y something ${false} # Create Y gets a string and Boolean false
None
Do XYZ ${None} # Do XYZ gets Python None as an argument
Null
${ret} = Get Value arg # Checking that Get Value returns Java null
Should Be Equal ${ret} ${null}
空格和空字符串/列表/字典
变量 ${SPACE} 和 ${EMPTY} 分别用来创建空格和空字符串,使用这些变量相对于使用反斜杠来转义空格容易的多。同时还可以使用扩展变量语法表示连续的多个空格, 例如 ${SPACE * 5}
下面的例子中, 关键字 Should Be Equal 接收到两个等价的入参, 可以看出使用变量的形式比使用反斜杠看上去容易理解的多。
*** Test Cases ***
One Space
Should Be Equal ${SPACE} \ \
Four Spaces
Should Be Equal ${SPACE * 4} \ \ \ \ \
Ten Spaces
Should Be Equal ${SPACE * 10} \ \ \ \ \ \ \ \ \ \ \
Quoted Space
Should Be Equal "${SPACE}" " "
Quoted Spaces
Should Be Equal "${SPACE * 2}" " \ "
Empty
Should Be Equal ${EMPTY} \
内置变量
Available automatic variables |
||
Variable |
Explanation |
Available |
${TEST NAME} |
当前测试用例的名称 |
Test case |
@{TEST TAGS} |
当前测试包含的TAG,可以动态的用 Set Tags and Remove Tags 关键字修改 |
Test case |
${TEST DOCUMENTATION} |
Keyword注释 |
Test case |
${TEST STATUS} |
当前运行的测试的状态, PASS or FAIL. |
|
${TEST MESSAGE} |
当前的测试的消息 |
|
${PREV TEST NAME} |
前一条测试的名称,如果第一个没有执行过,前一条为空 |
Everywhere |
${PREV TEST STATUS} |
前一条测试执行状态: PASS, FAIL, or 一条empty的字符串 |
Everywhere |
${PREV TEST MESSAGE} |
前一条测试的消息 |
Everywhere |
${SUITE NAME} |
当前suite的名称 |
Everywhere |
${SUITE SOURCE} |
suite绝对路径 |
Everywhere |
${SUITE DOCUMENTATION} |
suite声明的注释 |
Everywhere |
&{SUITE METADATA} |
当前测试suite的元数据 |
Everywhere |
${SUITE STATUS} |
当前test suite的状态, PASS or FAIL |
|
${SUITE MESSAGE} |
当前test suite的状态消息及统计 |
|
${KEYWORD STATUS} |
当前关键字的态, PASS or FAIL. |
|
${KEYWORD MESSAGE} |
当前keyword的错误消息 |
|
${LOG LEVEL} |
当前的日志级别 |
Everywhere |
${OUTPUT FILE} |
输出文件的绝对路径 |
Everywhere |
${LOG FILE} |
log file绝对路径 ,如果为 NONE 不创建log.html |
Everywhere |
${REPORT FILE} |
report file 绝对路径,如果为 NONE 就不创建report.html |
Everywhere |
${DEBUG FILE} |
debug file绝对路径,如果为NONE就不创建debug.html |
Everywhere |
${OUTPUT DIR} |
Everywhere |
变量的作用域
在通常情况下,每个变量默认都是局部变量,在默认情况下,变量的作用域为:
- 一个case里的变量,作用域在这个case内部
- 一个userkeyword里的变量,作用域在这个userkeyword内部
- 一个文件型suite里的变量,作用域在这个suite内部,所有下级case都可以使用
- 一个目录型suite里的变量,作用域在这个目录内,但是它下级文件型suite是无法使用的,所以一般在目录下新增变量没有太大意义
变量的作用域是可以改变的,通过一些关键字的处理,对变量进行作用域的改变,常用的关键字有:
- Set Global Variable为设定全局变量。当执行过这个设置后,这个变量在所有的测试案例和测试套件中都有效
- Set Suite Variable为设定File Suite级变量。当执行过这个设置后,这个变量在当前的File Suite内都有效
- Set Test Variable为设定Case级变量。当执行过这个设置后,这个变量在当前的Test Case内有效
来源:CSDN
作者:小小小小人ksh
链接:https://blog.csdn.net/kongsuhongbaby/article/details/104108898