Robot Framework--变量
Robot Framework的变量分为标量, 列表和字典, 分别使用语法格式 ${SCALAR}
, @{LIST}
和 &{DICT}
来定义。
此外, 环境变量可以直接使用语法 %{ENV_VAR}
来获取。
标量:可理解为单值变量,与之对应的是List这种多值变量。单值不仅仅像是字符串、数值这样的,还有可能是个对象或者字典。
列表:只有带@标识的变量能够确认是List变量。而带$标识的变量则要取决于它的变量名或者变量值,才能确定它到底是什么变量,特别是变量值。
因为变量之间是可以转换的,例如使用$标识的变量,实际上也可以在接收List值后转换成List变量。
变量在下面的情况中很有用:
- 当测试数据中的字符串经常变化时. 使用变量的话就只需要在一个地方修改.
- 当创建系统无关和平台无关的测试数据时. 使用变量替代硬编码的字符串可以非常方便(例如,
${RESOURCES}
替代c:\\resources
,${HOST}
替代10.0.0.1:8080
). 因为变量值可以在测试执行时 通过命令行选项设置, 所以修改系统相关的变量非常容易(例如,--variable HOST:10.0.0.2:1234 --variableRESOURCES:/opt/resources
). - 当需要传递对象而不是字符串参数给关键字时. 这种情况下只能使用变量实现.
- 当不同的关键字(这些关键字可能来自不同的库)之间需要通信时. 可以将一个关键字的返回值先赋值给一个变量, 然后再作为参数传递给另外一个关键字
- 当某个值太长或者太复杂时. 例如, 使用
${URL}
比直接使用http://long.domain.name:8080/path/to/service?foo=1&bar=2&zap=42
简短很多.
Robot Framework 变量, 与关键字类似, 是不区分大小写的, 同时其中的下划线和空格也会被忽略。推荐使用大写字母来表示全局变量(如 ${PATH}
或 ${TWO WORDS}
), 小写字母来表示局部变量(如 ${my var}
或 ${myVar}
)。
内置变量
内置的操作系统相关的变量,减少了测试数据对操作系统之间的差异性的关注
RF 中可用的操作系统相关的内置变量如下表:
变量 | 用途 |
${CURDIR} | 测试数据文件所在目录的绝对路径,该参数是大小写敏感的 |
${TEMPDIR} | 操作系统临时目录的绝对路径,在类 Unix 系统中,该路径通常是 /tmp;在 Windows 系统中,通常是 c:\Documents and Settings\<user>\Local Settings\Temp |
${EXECDIR} | 到测试开始执行的目录的绝对路径 |
${/} | 操作系统文件路径分隔符,在类 Unix 系统中为: ‘/’, 在 Windows 中则为: ‘\’ |
${:} | 操作系统路径元素分隔符,在类 Unix 系统中为: ‘:’,在 Windows 中则为: ‘;’ |
${\n} | 操作系统行分隔符,在类 Unix 系统中为: ‘\n’,在 Windows 中则为: ‘\r\n’ |
*** Test Cases ***
Example
Create Binary File ${CURDIR}${/}input.data Some text here${\n}on two lines
Set Environment Variable CLASSPATH ${TEMPDIR}${:}${CURDIR}${/}foo.jar
一、获取列表项
使用下标语法 @{NAME}[index]
可以获取到列表变量中指定项的值, 其中 index
是要获取的项的下标。下标从0开始, 负数的下标等同于从列表末尾向前数。
下标长度超过列表范围会导致错误。下标值自动转换为整数, 同样支持变量表示。获取到的列表项基本等同于一个标量变量。
示例:
二、字典变量
2.1 字典中的项可以作为命名参数传给关键字。假设有个字典变量 &{USER}
中有值 {'name': 'robot', 'password': 'secret'}
, 则下面两个用例的效果是等价的。
2.2 获取字典变量中的项
可以通过 &{NAME}[key]
这样的语法格式获取字典中某项的值, 其中 key
是键的名称。键名当作字符串处理, 非字符串的键可以用变量代替。通过这种方式获取到的值可作为标量变量使用。
如果键是字符串, 还可以使用另一种语法格式 ${NAME.key} (注意到这里是
$
)。
示例:
三、创建变量
3.1 创建标量变量
如果一个标量变量的值很长, 可以分割到多列甚至多行。默认情况下, 各个单元格中的值最终会使用空格拼接起来, 不过可以在第一格中使用 SEPARATOR=<sep>
来指定 连接符。
执行结果:
3.2 创建列表变量
3.3 创建字典变量
如果有多个项重名, 只保留最后那个. 如果项中包含字面的等号, 则该等号必须使用反斜杠进行 转义, 如 \=
字典变量中的项是有顺序的,也就是说字典总是会按定义时的顺序迭代,这在把字典当作列表变量使用时(例如在 FOR循环 )很有用。当字典被当作列表迭代时, 实际返回的值是字典的键。例如, @{MANY}
变量的值是 ['first', 'second', 3]。
四、命令行中设置变量
变量可以在命令行中通过选项 --variable (-v)
单个设置, 也可以通过选项 --variablefile (-V)
设置变量文件。通过命令行设置的变量对所有执行的测试文件是全局可见的, 不过如果局部的变量表格或者局部导入的变量文件中存在重名的变量, 则这些变量也会被命令行中指定的值所覆盖。
设置单个变量的选项格式是 --variable name:value
, 其中 name
是变量名, 不带 ${}
value`是变量的值。有多个变量的话就使用这个选项多次。这种方式只能定义标量变量,很多特殊字符必须使用选项 :option:–escape` 经过转义才能表示。
--variable EXAMPLE:value
--variable HOST:localhost:7272 --variable USER:robot
--variable ESCAPED:Qquotes_and_spacesQ --escape quot:Q --escape space:_
在上例中, 变量值分别是:
${EXAMPLE}
值为value
${HOST}
和${USER}
值分别为localhost:7272
和robot
${ESCAPED}
值为"quotes and spaces"
在命令行中指定变量文件的选项格式是 --variablefile path/to/variables.py
注:如果变量同时在命令行的变量文件中和单独指定, 则单独指定的变量有更高的优先级。
五、关键字的返回
关键字的返回值可以赋值给变量, 这样不同的关键字之间就可以进行交互。
这种方式定义的变量和其它变量基本相同, 只是其作用域仅限于它们被创建的 local scope。也就是说 不可能 在一个测试用例里得到这样一个返回值变量, 然后在另一个用例中使用。因为自动化测试用例通常需要保持相互独立, 而不应该互相依赖。如果用例中定义的变量可以在其它用例使用, 这将导致很难定位的错误。
示例:
六、使用关键字创建变量
通过关键字 Set Test Variable 设置的变量在当前测试用例的作用域内处处可用。例如, 在一个测试用例中的一个用户关键字中设置了一个变量, 该变量会在这个测试用例步骤可见, 同时当前用例中的其它用户关键字也可以使用这个变量,这个关键字创建的变量在其它测试用例中不可用。
通过关键字 Set Suite Variable 创建的变量在当前执行的测试套件内处处可见。 使用这个方式创建变量和在测试数据文件的变量表格中定义变量, 以及从变量文件导入变量的效果一样。这些变量对其它的测试套件, 包括子套件, 都不可见。
通过关键字 Set Global Variable 创建的变量在设置之后全局可见。这种方式创建的变量和在 setting variables in command line 中使用选项 --variable
或 --variablefile
定义变量效果一样,因为这个关键字会改变任意地方的变量, 所以必须谨慎使用。
注:关键字 Set Test/Suite/Global Variable 直接在作用域内设置变量, 没有返回值。而 Set Variable 设置局部变量, 并且有返回值。
七、数字变量
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 -0.0001
八、布尔值和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}
注:这些变量也是大小写不敏感的,所以 ${True} 和 ${true} 是一样的。此外 ${None} 和 ${null} 是同义词,因为用 Jython 解释器执行用例时, Jython 会自动将 None 和 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} \
还有两个变量 @{EMPTY} 和 &{EMPTY},他们分别表示 ‘空列表’ 和 ‘空字典’ 变量。 这两个变量也是有用的,例如在写测试模板的时候,模板关键字不带参数使用时。
*** Test Cases ***
Template
[Template] Some keyword
@{EMPTY} Override
Set Global Variable @{LIST} @{EMPTY}
Set Suite Variable &{DICT} &{EMPTY}
十、自动变量
自动变量被RF框架创建和修改,在测试执行过程中值可能会变化;另外,某些自动变量在执行过程中并非总是可用。
修改自动变量,并不能对变量的初始值产生影响。
但可以用某些内建关键字来修改某些自动变量的值。
变量名 | 含义 | 可用范围 |
---|---|---|
${TEST NAME} | 当前测试用例的名字 | Test case |
@{TEST TAGS} | 当前测试用例的标签(按字母序)。可以使用"Set Tags"和"Remove Tags"关键字修改 | Test case |
${TEST DOCUMENTATION} | 当前测试用例的文档说明。可以使用"Set Test Documentation"关键字修改 | Test case |
${TEST STATUS} | 当前测试用例的状态: Pass或FAIL | Test teardown |
${TEST MESSAGE} | 当前测试用例的消息 | Test teardown |
${PREV TEST NAME} | 前一个测试用例的名字。如果还没有用例被执行,值为空字符串 | Everywhere |
${PREV TEST STATUS} | 前一个测试用例的状态: Pass或FAIL。如果还没有用例被执行,值为空字符串 | Everywhere |
${PREV TEST MESSAGE} | 前一个测试用例的错误消息 | Everywhere |
${SUITE NAME} | 当前Suite的全名 | Everywhere |
${SUITE SOURCE} | Suite的文件或目录的绝对路径 | Everywhere |
${SUITE DOCUMENTATION} | 当前测试Suite的文档说明。可以使用"Set Suite Documentation"关键字修改 | Everywhere |
&{SUITE METADATA} | 当前测试Suite的元数据。可以使用"Set Suite Metadata"关键字修改 | Everywhere |
${SUITE STATUS} | 当前测试Suite的状态: Pass或FAIL | teardown |
${SUITE MESSAGE} | 当前测试Suite的消息, 包括统计信息 | Suite teardown |
${KEYWORD STATUS} | 当前测试关键字的状态: Pass或FAIL | User keyword teardown |
${KEYWORD MESSAGE} | 当前测试关键字的错误消息 | User keyword teardown |
${LOG LEVEL} | 当前的日志级别 | Everywhere |
${OUTPUT FILE} | 输出(output)文件的绝对路径 | Everywhere |
${LOG FILE} | 日志(log)文件的绝对路径。如果没有日志文件,值为空字符串 | Everywhere |
${REPORT FILE} | 报告(report)文件的绝对路径。如果没有报告文件,值为空字符串 | Everywhere |
${DEBUG FILE} | 调试(debug)文件的绝对路径。如果没有调试文件,值为空字符串 | Everywhere |
${OUTPUT DIR} | 输出(output)文件所在目录的绝对路径 |
使用例子:
-------
------
十一、变量的作用域
在通常情况下,每个变量默认都是局部变量,在默认情况下,变量的作用域为:
- 一个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内有效
原文地址:https://www.cnblogs.com/chengchengla1990/p/6725162.html
https://www.cnblogs.com/chengchengla1990/p/7056541.html
Robot Framework--变量的更多相关文章
- robot framework —— 变量文件
何为变量文件? 变量文件中包含了测试数据中的变量.虽然变量可以通过变量表格中创建, 或者通过命令行设置, 不过这些方法有所局限, 而变量文件可以动态地创建任意类型的变量. 变量文件一般由Python模 ...
- Robot Framework变量的使用技巧
1.变量的使用 变量可以在命令行中设置,个别变量设置使用--variable (-v)选项,变量文件的选择使用--variablefile (-V)选项.通过命令行设置的变量是全局变量,对其所有执行的 ...
- robot framework学习笔记之二———变量
Robot Framework的变量分为标量, 列表和字典, 分别使用语法格式 ${SCALAR}, @{LIST} 和 &{DICT} 来定义. 此外, 环境变量可以直接使用语法 %{ENV ...
- Robot Framework(六)变量
变量 2.5.1简介 变量是Robot Framework的一个不可或缺的特性,它们可以在测试数据的大多数地方使用.最常见的是,它们用于测试用例表和关键字表中关键字的参数,但所有设置都允许在其值中使用 ...
- Robot Framework 内置变量
转自:https://blog.csdn.net/qq_26886929/article/details/53907755 Robot Framework 内部提供了一下直接可用的内置变量 1. 操作 ...
- Robot Framework(八) 资源和变量文件
2.7资源和变量文件 测试用例文件和测试套件初始化文件中的用户关键字和变量只能在创建它们的文件中使用,但资源文件提供了共享它们的机制.由于资源文件结构非常接近测试用例文件,因此很容易创建它们. 变量文 ...
- Robot Framework(12)- 详细解读 RF 的变量和常量
如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 常量的栗子 常量 ...
- Robot Framework(9)- 使用变量文件
如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 啥是变量文件 变 ...
- Robot Framework用户手册 (版本:3.0)
版权信息:诺基亚网络和解决中心 本翻译尊重原协议,仅用于个人学习使用 1.开始: 1.1 介绍: Robot Framework是一个基于Python的,为终端测试和验收驱动开发(ATDD)的可扩展的 ...
- RIDE -- Robot Framework setup
RobotFramework 是一款基于python 的可以实现关键字驱动和数据驱动并能够生成比较漂亮的测试报告的一款测试框架 这里使用的环境是 python-2.7.10.amd64.msi RID ...
随机推荐
- js 上传txt格式文件
判断文件是否为.txt格式: $(".delbao .file").on("change",function(){ var acceptType = $(thi ...
- Spring初解
1,关于spring容器: spring容器是Spring的核心,该 容器负责管理spring中的java组件, ApplicationContext ctx = new ClassPathXmlA ...
- PHP正则匹配价格
/** * 匹配价格 * @param $price * @return bool */ public static function checkPrice($price) { // 不能小于0 if ...
- 《Mysql - 在Mysql服务出现瓶颈时,有哪些“饮鸩止渴”提高性能的方法?》
一:情景 - 业务高峰期,生产环境的 MySQL 压力太大,没法正常响应,需要短期内.临时性地提升一些性能. - 在业务高发时候,Mysql 服务压力过大,导致业务受损, 用户的开发负责人说,不管你用 ...
- 分布式系统领域的 CAP 定理
C 为数据一致性: A 为服务可用性: P 为服务对网络分区故障的容错性. 这三个特性在任何分布式系统中都不能同时满足,最多同时满足两个.
- Markdown 语法 (转载)
Markdown 语法整理大集合2017 1.标题 代码 注:# 后面保持空格 # h1 ## h2 ### h3 #### h4 ##### h5 ###### h6 ####### h7 // ...
- 小白入门.有函数F(x)=(x+1)^2和G(x)=2x+1.输入x值计算F(G(x))。
#include<stdio.h> #include<math.h> void main() { float x,y; printf("Please input x\ ...
- sublime text3 关闭更新提醒
Preferences->settings 在Preferences.sublime-setting --User中 增加: "update_check":false,
- CentOS7.9防火墙命令
CentOS7防火墙命令有变化: CentOS7: systemctl status firewalld.service 查看防火墙状态 systemctl stop firewalld. ...
- 【转载】Sqlserver使用Right函数从最右边向前截取固定长度字符串
在SQL语句查询过程中,Sqlserver支持使用LEFT().RIGHT().SUBSTRING()等几个函数对字符串进行截取操作,其中Left函数表示从开始字符向后截取多少个字符,Right函数表 ...