添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

变量表, Variable Table

最常见的创建变量的地方,就是在Test Case File和Resource File中的Variable Table中。
在Variable Table中创建变量有诸多好处: 和其他测试数据在同一个地方,语法也非常简单; 不足在于变量值可能只能为字符串,并且不能动态创建。

Tips: 如果需要克服此问题,可以考虑Variable File

创建scalar变量

样例1
如果第2列为空,那么空字符串被赋值给变量

*** Variables ***  
${NAME}         Robot Framework  
${VERSION}      2.0  
${ROBOT}        ${NAME} ${VERSION}  
${ZERO}

样例2
也支持中间添加"="的语法,但这不是强制要求的

*** Variables ***  
${NAME} =       Robot Framework  
${VERSION} =    2.0

样例3
如果值太长,可以分为多行和多列
多行和多列会被框架合并起来
缺省的,合并中间会使用空格(等效于" ".join()),也可以通过在第一个cell中使用SEPARATOR=来改变连接字符

*** Variables ***  
${EXAMPLE}      This value is joined    together with a space  
${MULTILINE}    SEPARATOR=\n    First line  
...             Second line     Third line

创建list变量

样例1
值从第2列开始
也支持空值,list作为元素,多行等语法
列表的下标从0开始

*** Variables ***  
@{NAMES}        Matti       Teppo  
@{NAMES2}       @{NAMES}    Seppo  
@{NOTHING}  
@{MANY}         one         two      three      four  
...             five        six      seven

创建dict变量

创建dict变量的语法: "name=value" 或者 已有的Dict变量赋值给新变量
同样key的value,后出现的覆盖先出现的
如果key或value中存在"=",需要进行转义"\="

样例
访问元素的语法(使用Python的同学一定不会陌生): ${VAR.key} 或者 &{USER}[name]
&{MANY}[${3}] 不等价于 ${MANY.3}
字典的key是有顺序的,按照其被定义的顺序
字典按照列表的语法进行使用,实际使用的是字典的key集合: @{MANY}变量 == ['first', 'second', 3]

*** Variables ***  
&{USER 1}       name=Matti    address=xxx         phone=123  
&{USER 2}       name=Teppo    address=yyy         phone=456  
&{MANY}         first=1       second=${2}         ${3}=third  
&{EVEN MORE}    &{MANY}       first=override      empty=  
...             =empty        key\=here=value

变量文件, Vairable Files

变量文件支持各种变量的创建: 任何对象被指派给变量; 动态创建变量等
变量文件典型使用Python模块来实现
更多关于变量文件的介绍,请参考下一个章节。

命令行, Command Line Option

命令行选项可以设置变量:

  • 单个设置变量: --variable (-v)
  • 使用Variable File: --variablefile (-V)

    Tips: --variable (-v) 优先于 --variablefile (-V)

    通过命令行设置的变量,对于所有测试执行是全局可用的。 它们会覆盖通过Variable Table创建或者导入的Variable File创建的同名变量。

    样例1
    语法: --variable name:value
    只能设置scalar变量,值只能为字符串
    可以使用--escape对字符进行转义

    以下样例的结果如下:
    ${EXAMPLE} 值: value
    ${HOST} 和 ${USER} 值分别为: localhost:7272 和 robot
    ${ESCAPED} 值: "quotes and spaces"

    --variable EXAMPLE:value  
    --variable HOST:localhost:7272 --variable USER:robot  
    --variable ESCAPED:Qquotes_and_spacesQ --escape quot:Q --escape space:_
    

    返回值, Return Value from Keyword

    关键字返回值可以被赋值给变量。这个变量又可以被传递给其他关键字。 这样实现不同关键字之间的相互通信。
    这种变量的设置和使用,和其他方式创建的变量是一样的。只是这种变量的作用域范围只局限在它们被创建的局部作用域。即在一个Test Case里创建的变量,不能在另一个Test Case中被使用。

    scalar变量的赋值

    样例1
    "="不是强制要求的。
    这种创建变量的方式,在定义用户关键字时也是一样的。

    *** Test Cases ***  
    Returning  
        ${x} =    Get X    an argument  
        Log    We got ${x}!
    

    样例2
    尽管被赋值给scalar变量,但是,如果数据为list-like的,那么你可以将其按照list变量进行使用。
    同样地,如果数据为dict-like的,也可以将其按照dict变量进行使用。

    *** Test Cases ***  
    Example  
        ${list} =    Create List    first    second    third  
        Length Should Be    ${list}    3  
        Log Many    @{list}
    

    list变量的赋值

    样例
    如果关键字返回值为list或者list-like的值,可以将其赋值给list变量。

    *** Test Cases ***  
    Example  
        @{list} =    Create List    first    second    third  
        Length Should Be    ${list}    3  
        Log Many    @{list}
    
    因为所有的变量都被存储在同一个名字空间(namespace), 值被赋值给scalar变量或者list变量实际上是没有太大区别。 
    区别在于:  
    当创建一个list变量时,RF框架会验证值是否为list或list-like的,存储的值将会是从返回值创建的新的list对象。  
    当创建一个scalar变量时,RF框架不会进行任何验证,返回的值将会原样被存储起来。  
    

    dict变量的赋值

    样例
    如果关键字返回值为dict或者dict-like的值,可以将其赋值给dict变量。

    *** Test Cases ***  
    Example  
        &{dict} =    Create Dictionary    first=1    second=${2}    ${3}=third  
        Length Should Be    ${dict}    3  
        Do Something    &{dict}  
        Log    ${dict.first}
    
    因为所有的变量都被存储在同一个名字空间(namespace), 值被赋值给scalar变量,之后又按照dict变量来进行使用,这样做也是可以的。 
    但赋值给dict变量有这些好处:  
    RF框架会像验证list变量一样,执行dict变量的相应验证。  
    RF框架会将值转换为特殊的dict: 可排序的; 可以使用语法${dict.first}访问单个元素。  
    

    多个变量的同时赋值

    如果关键字返回值为list或list-like的对象,可以将单个值赋值给不同的scalar变量,或者scalar变量+list变量。

    样例
    假设关键字"Get Three"返回[1, 2, 3], 创建的变量和值如下情况:
    ${a}, ${b}, ${c} 值分别为: 1, 2, 3
    ${first} 值: 1, @{rest} 值: [2, 3]
    @{before} 值: [1, 2], ${last} 值: 3
    ${begin} 值: 1, @{middle} 值: [2], ${end} 值: 3

    *** Test Cases ***  
    Assign Multiple  
        ${a}    ${b}    ${c} =    Get Three  
        ${first}    @{rest} =    Get Three  
        @{before}    ${last} =    Get Three  
        ${begin}    @{middle}    ${end} =    Get Three
    

    内建变量设置关键字, Set Test/Suite/Global Variable

    内建变量设置关键字,可以在用例执行期间动态设置关键字
    如果变量已经存在,值将会被覆盖;
    如果变量不存在,新变量会被创建

  • Set Test Variable
    作用域: 当前测试用例中

  • Set Suite Variable
    作用域: 和测试文件中Variable Table或者从Variable File导入等效;
    其他Suite, 包括子Suite, 不可见

  • Set Global Variable
    作用域: 设置后的所有用例和Suite都可见;
    和--variable 或 --variablefile等效

    关键字"Set Xxx Variable"直接设置变量到相应的作用域,没有返回值
    关键字"Set Variable"使用返回值设置本地变量

  •