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 ...
随机推荐
- jboss & eclipse 集成
* 前提: * 安装了 eclipse-jee-3.5.1 * 解压了 jboss5.1 * * "jboss tools" - "J ...
- Stop单个Coroutine
public Coroutine StartCoroutine(string methodName, object value = null); Description Starts a corout ...
- UNITY 多SCENE加载与编辑
Unity内部场景的加载分为两步: Loading.是指从文件.内存(主要是Streamed scene AssetBundle)中加载Scene的内容,创建并读取所有相关的Game objects. ...
- ajax传递数组及后台接收
ajax传递的是{"items":arr},其中arr=[]; 在后台String[] items=req.getParameterValues("items" ...
- 去掉redhat linux提示注册
去掉提示注册的话,卸载几个软件包:#rpm -qa | grep subscription-manager 然后移除那出现的几项吧:#yum remove subscription-manager-g ...
- Centos 7.2编译安装MariaDB-10.0.xx
系统: centos7.2 x64数据库:MariaDB-10.0.30 使用jemalloc对MySQL内存进行优化. 软件包下载地址:http://pan.baidu.com/s/1eS44OKU ...
- loadrunner12: Error -27492: "HttpSendRequest" failed, Windows error code=8
这个问题我在网上看到有这样的解释:1.timeout时间超时设置问题2.Run-Time Settings -> Preferences -> Advanced. 确定此选项未被选中:&q ...
- nginx 负载均衡 使用ip_hash方式解决session问题 测试
ip_hash的方式比较弱智,但是在一般情况下是挺有效的~~,如果能保证nginx是最上一层的代理,那么能够得到用户的ip是真实位置,就能做到负载,但是一家公司的所有员工其实走的是同一个ip,那么在这 ...
- (二分搜索 数论)(求阶乘里零个数对应的阶乘)light oj -- 1138
链接 Description You task is to find minimal natural number N, so that N! contains exactly Q zeroes on ...
- CodeForces - 468A ——(思维题)
Little X used to play a card game called "24 Game", but recently he has found it too easy. ...