robot framework学习笔记之二———变量

摘要:
RobotFramework的变量分为标量,列表和字典,分别使用语法格式${SCALAR},@{LIST}和&{DICT}来定义。foo=1&bar=2&zap=42简短很多.RobotFramework变量,与关键字类似,是不区分大小写的,同时其中的下划线和空格也会被忽略。通过关键字SetSuiteVariable创建的变量在当前执行的测试套件内处处可见。而SetVariable设置局部变量,并且有返回值。

Robot Framework的变量分为标量,列表字典, 分别使用语法格式${SCALAR},@{LIST}&{DICT}来定义。

此外,环境变量可以直接使用语法%{ENV_VAR}来获取。

标量,可理解为单值变量,与之对应的是List这种多值变量。单值不仅仅像是字符串、数值这样的,还有可能是个对象或者字典。只有带@标识的变量能够确认是List变量,而带$标识的变量则要取决于它的变量名或者变量值,才能确定它到底是什么变量,特别是变量值。因为变量之间是可以转换的,例如使用$标识的变量,实际上也可以在接收List值后转换成List变量。

变量在下面的情况中很有用:

  • 当测试数据中的字符串经常变化时. 使用变量的话就只需要在一个地方修改.
  • 当创建系统无关和平台无关的测试数据时. 使用变量替代硬编码的字符串可以非常方便(例如,${RESOURCES}替代c:\resources,${HOST}替代10.0.0.1:8080). 因为变量值可以在测试执行时通过命令行选项设置, 所以修改系统相关的变量非常容易(例如,--variableHOST: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}${TWOWORDS}), 小写字母来表示局部变量(如${myvar}${myVar})。

一、获取列表项

使用下标语法@{NAME}[index]可以获取到列表变量中指定项的值, 其中index是要获取的项的下标。下标从0开始, 负数的下标等同于从列表末尾向前数。下标长度超过列表范围会导致错误。下标值自动转换为整数, 同样支持变量表示。获取到的列表项基本等同于一个标量变量。

示例:

robot framework学习笔记之二———变量第1张

二、字典变量

2.1 字典中的项可以作为命名参数传给关键字。假设有个字典变量&{USER}中有值{'name':'robot','password':'secret'}, 则下面两个用例的效果是等价的。

robot framework学习笔记之二———变量第2张

2.2 获取字典变量中的项

可以通过&{NAME}[key]这样的语法格式获取字典中某项的值, 其中key是键的名称。键名当作字符串处理, 非字符串的键可以用变量代替。通过这种方式获取到的值可作为标量变量使用。

如果键是字符串, 还可以使用另一种语法格式${NAME.key}(注意到这里是$)

示例:

robot framework学习笔记之二———变量第3张

三、创建变量

3.1 创建标量变量

如果一个标量变量的值很长, 可以分割到多列甚至多行。默认情况下, 各个单元格中的值最终会使用空格拼接起来, 不过可以在第一格中使用SEPARATOR=<sep>来指定 连接符。robot framework学习笔记之二———变量第4张

执行结果:

robot framework学习笔记之二———变量第5张

3.2 创建列表变量

robot framework学习笔记之二———变量第6张

3.3 创建字典变量

如果有多个项重名, 只保留最后那个. 如果项中包含字面的等号, 则该等号必须使用反斜杠进行转义, 如=robot framework学习笔记之二———变量第7张

字典变量中的项是有顺序的,也就是说字典总是会按定义时的顺序迭代,这在把字典当作列表变量使用时(例如在FOR循环)很有用。当字典被当作列表迭代时, 实际返回的值是字典的键。例如,@{MANY}变量的值是['first','second',3]。

四、命令行中设置变量

变量可以在命令行中通过选项--variable(-v)单个设置, 也可以通过选项--variablefile(-V)设置变量文件。通过命令行设置的变量对所有执行的测试文件是全局可见的, 不过如果局部的变量表格或者局部导入的变量文件中存在重名的变量, 则这些变量也会被命令行中指定的值所覆盖。

设置单个变量的选项格式是--variablename: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:7272robot
  • ${ESCAPED}值为"quotesandspaces"

在命令行中指定变量文件的选项格式是--variablefilepath/to/variables.py

注:如果变量同时在命令行的变量文件中和单独指定, 则单独指定的变量有更高的优先级。

五、关键字的返回

关键字的返回值可以赋值给变量, 这样不同的关键字之间就可以进行交互。

这种方式定义的变量和其它变量基本相同, 只是其作用域仅限于它们被创建的local scope。也就是说不可能在一个测试用例里得到这样一个返回值变量, 然后在另一个用例中使用。因为自动化测试用例通常需要保持相互独立, 而不应该互相依赖。如果用例中定义的变量可以在其它用例使用, 这将导致很难定位的错误。

示例:

robot framework学习笔记之二———变量第8张

六、使用关键字创建变量

通过关键字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 2Do 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

十一、变量的作用域

在通常情况下,每个变量默认都是局部变量,在默认情况下,变量的作用域为:

  1. 一个case里的变量,作用域在这个case内部
  2. 一个userkeyword里的变量,作用域在这个userkeyword内部
  3. 一个文件型suite里的变量,作用域在这个suite内部,所有下级case都可以使用
  4. 一个目录型suite里的变量,作用域在这个目录内,但是它下级文件型suite是无法使用的,所以一般在目录下新增变量没有太大意义

变量的作用域是可以改变的,通过一些关键字的处理,对变量进行作用域的改变,常用的关键字有:

  1. Set Global Variable为设定全局变量。当执行过这个设置后,这个变量在所有的测试案例和测试套件中都有效
  2. Set Suite Variable为设定File Suite级变量。当执行过这个设置后,这个变量在当前的File Suite内都有效
  3. Set Test Variable为设定Case级变量。当执行过这个设置后,这个变量在当前的Test Case内有效

免责声明:文章转载自《robot framework学习笔记之二———变量》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SIP协议错误代码大全cloudevents 学习二 java 代码集成试用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Postman参数化(3)

方式一:全局变量 全局变量:是将这个变量设置成整个程序都可以用,不用去区分环境设置,和Jmeter中‘测试计划’下的‘用户定义的变量’用法类似。 1、打开Postman,点击 Enviroments --> 点击+  --> 定义环境变量名称 --> 填写变量名和变量值 --> Save  2、引用全局变量,引用的方法为:{{变量...

[转] 函数调用栈

http://kingj.iteye.com/blog/1555017 http://www.cnblogs.com/rain-lei/p/3622057.html   函数调用大家都不陌生,调用者向被调用者传递一些参数,然后执行被调用者的代码,最后被调用者向调用者返回结果,还有大家比较熟悉的一句话,就是函数调用是在栈上发生的,那么在计算机内部到底是如何实...

golang反射

要点 1.变量 2.反射 3.结构体反射 4.反射总结以及应用场景 一、变量介绍 1.变量的内在机制 A、类型信息,这部分是元信息,是预定义好的 B、值类型,这部分是程序运行过程中,动态改变的 var arr [10]int arr[0] = 10 arr[1] = 20 arr[2] = 30 arr[3] = 40 type Animal s...

R语言数据挖掘方法及应用

R语言数据挖掘方法及应用 第1篇 起步篇:R语言数据挖掘入门并不难 1 数据挖掘与R语言概述 1.1 为什么要学习数据挖掘和R语言 1.2 什么是数据挖掘 1.3 数据挖掘能给出什么 1.3.1 数据挖掘结果有哪些呈现方式 1.3.2 数据挖掘结果有哪些基本特征 1.4 数据挖掘能解决什么问题 1.4.1 数据预测 1.4.2 发现数据的内在结构 1.4....

函数的调用过程与出入栈

函数调用的过程 线程执行的基本行为是函数调用,每次函数调用的数据都是通过Java栈传递的。Java栈与数据结构上的栈有类似的含义,它是一块先进后出的数据结构,只支持入栈和出栈两种操作。Java栈的主要内容是栈帧。每次函数调用都会有一个对应的栈帧被压入Java栈,每次函数调用结束(无论是正常返回或者抛出异常),都会有一个栈帧被弹出Java栈。 如图所示,函数...

Unity小知识点大全(二)

51.Inspector调试模式 在Inspector面板右上角的下拉菜单中,选择Debug命令,启动调试模式,此时将显示组件包含的所有变量,包括私有变量,当运行编辑器时,可以实时查看各组件所有变量的变化。 52.高亮显示Debug.Log对应的游戏对象 当使用Debug.Log方法输出信息时,可将gameObject作为此方法的第二个参数,当程序运行时...