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}
)。
一、获取列表项
使用下标语法 @{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}
注:${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} \
十、自动变量
https://www.cnblogs.com/chengchengla1990/p/7056541.html
十一、变量的作用域
在通常情况下,每个变量默认都是局部变量,在默认情况下,变量的作用域为:
- 一个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内有效
robot framework学习笔记之二———变量的更多相关文章
- Robot Framework 学习笔记(二)-------第一个脚本
robot Framework环境搭建好之后先来一个简单的脚本跑一下 一.新建项目 二.新建测试套件 三.创建测试用例 四.导入Selenium2Library库 因为RF框架编写基于web 的测试 ...
- robot framework学习笔记之三—Scalar变量
一.变量赋值 1)Set赋值 通常使用Set Variable关键字对变量进行赋值,其他Set相关的带Variable的关键字也可以进行赋值 赋值的时候,变量后面写不写『=』都可以,如下: 如果${v ...
- robot framework学习笔记之六—自动变量
自动变量被RF框架创建和修改,在测试执行过程中值可能会变化;另外,某些自动变量在执行过程中并非总是可用.修改自动变量,并不能对变量的初始值产生影响.但可以用某些内建关键字来修改某些自动变量的值. 变量 ...
- robot framework学习笔记2
声明:本笔记都只是自己根据大牛虫师的robot系列文档学习记录的,学习的话还请移步虫师博客:https://www.cnblogs.com/fnng/ 非常感谢大牛的分享,带小白一步一步入门 F5 ...
- Robot Framework学习笔记(十)------Selenium2Library库
一.安装selenium2library库 如果已经安装了pip,则使用管理员模式打开windows命令行,输入pip install robotframework-selenium2library, ...
- Robot Framework学习笔记(八)------ride标签使用
一.edit标签使用 1.导入库 点击 Edit 标签页右侧的"Library"按钮,来添加库.在添加库之前,首先库已经在 Python 下进行了安装.如,添加"Sele ...
- Robot Framework学习笔记(十一)------ 分层设计
以百度搜索为例,如果我们需要写5个不同关键字搜索的用例.如果没有分层的思想,那么我们需要写5个用例,并且每个用例都需要重复写打开浏览器.输入关键字.点击按钮.关闭浏览器的步骤.如果使用Robot Fr ...
- Robot Framework学习笔记(六)------RIDE界面说明
RIDE是一款专门用来编辑Robot Framework用例的软件,用Python编写并且开源. 1.测试项目.测试套件Edit 标签 测试项目和测试套件所提供的 Edit 标签的功能是一样的. 在 ...
- Robot Framework学习笔记(三)------常用关键字介绍
下面关键字全部由 Builtin 库提供,Builtin 为 Robot Framework 标准类库.Builtin库提供常用的关键字 1.log log 关键字就是编程语言里的"prin ...
随机推荐
- CCS5配置使用GenCodecPkg生成CODEC SERVER
1. 引言 CCS5中集成了算法生成工具的插件,使用XDAIS Tools条目里面的GenAlg命令生成的算法框架如下: 不过,我没找到如何在CCS中使用这个工程.难不成要把这个框架文件放在Linux ...
- 判断viewpager左右滑动方向
实现思路就是通过viewpager的滑动监听,用参数position进行比较,同时当判断完这个要把比较的positon覆盖.这里简单介绍一下public void onPageScrolled(int ...
- Associate File Type with Qt In Mac Os and Win
Win Registry Question One day, my boss want me to finish one function which let the users can double ...
- SqlMapConfig.xml配置文件中的mapper映射器标签
Mapper配置的几种方式: 1. <mapper resource=" "/> 使用相对于类路径的资源 如:<mapper resource="com ...
- 四元数--结合《real time rendering》中关于四元数部分
四元数产生于1843年,是复数的一个扩展,所以里面包含了一些复数的运算.直到1985年才在图形学中使用. 四元数的优势是,相对与矩阵和欧拉角,四元数更直观和方便.四元数还可以用作某些方向上的插值,而欧 ...
- 配置Linux防火墙
配置防火墙(服务器安全优化)(转) 安全规划:开启 80 22 端口并 打开回路(回环地址 127.0.0.1) # iptables –P INPUT ACCEPT # iptables –P O ...
- FW:考查嵌入式C开发人员的最好的16道题(转)
考查一个初级嵌入式系统开发人员的C基本功,附有答案题目由资深嵌入式系统专家拟定, 目的是考查入门级的嵌入式软件开发人员 Gavin Shaw提供详细解答. 编者按:非常基本关于C语言的问题,一个信息类 ...
- C++中static修饰的静态成员函数、静态数据成员
1.静态成员函数.静态数据成员 在类中,用static修饰的成员函数被称为静态成员函数,而用static修饰的数据成员就称为静态数据成员:与普通的成员函数和数据成员不同, 静态成员函数和静态数据成员有 ...
- iPhone4 8.3 系统下字体下方去除下划线
NSMutableAttributedString *title = [[NSMutableAttributedString alloc] initWithString:@"先去看看 ...
- (转)SQL Server内存遭遇操作系统进程压榨案例
原文地址:http://www.cnblogs.com/zc_0101/p/3592259.html 场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没 ...