Robot Framework(七):库的引用和常用变量

拜拜、爱过 提交于 2020-01-31 12:44:23

目录

 

使用库

导入库

导入库时使用别名

变量

标量

​​​​​​​列表

​​​​​​​字典

​​​​​​​命令行中设置变量

​​​​​​​有返回值的关键字

​​​​​​​使用关键字创建变量

​​​​​​​数字变量

​​​​​​​布尔值和None/null值

​​​​​​​空格和空字符串/列表/字典

​​​​​​​内置变量

​​​​​​​变量的作用域

使用库

这部分介绍如何使用测试库和库的中的关键字。

导入库

关键字是Library,有2种方式导入指定的库:

使用Library关键字,通过库名导入

这种方式本质使用的就是python中导入模块的,根据搜索路径来查找文件

语法:Library [库名]

*** Settings ***

Library    OperatingSystem

Library    my.package.TestLibrary

Library    MyLibrary    arg1    arg2

Library    ${LIBRARY}

 

注意:库名都是大小写敏感的,而且空格的个数也需要严格按照库名来写

 

使用Library关键字,通过文件路径导入

语法:Library [库文件路径]

*** Settings ***

Library    PythonLibrary.py (要有后缀名)

Library    /absolute/path/JavaLibrary.java

Library    relative/path/PythonDirLib/    possible    arguments

Library    ${RESOURCES}/Example.class

 

导入库时使用别名

如果导入的库名很长或者级别很多,或者是同样的库但是用不同的版本等情况下,就可以使用别名,将库重命名为简单的字符,方便后续操作

关键字:WITH NAME,大小写敏感。

基本用法如下:

*** Settings ***

Library    com.company.TestLib    WITH NAME    TestLib

Library    ${LIBRARY}             WITH NAME    MyName

 

同一个库引用多次:

*** Settings ***

Library    SomeLibrary    localhost        1234    WITH NAME    LocalLib

Library    SomeLibrary    server.domain    8080    WITH NAME    RemoteLib

 

*** Test Cases ***

My Test    

LocalLib.Some Keyword     some arg       second arg 

RemoteLib.Some Keyword    another arg    whatever  

LocalLib.Another Keyword

 

变量

Robot Framework中有很多地方使用到变量,比如关键字的参数,临时变量等等,用来暂时或者永久存储一些数据。Robot Framework支持的变量类型包括,标量,列表、字典和环境变量,引用的语法分别为:${SCALAR}, @{LIST} ,&{DICT},%{ENV_VAR}。标量,可理解为单值变量,与之对应的是List这种多值变量。单值不仅仅可以是字符串、数值这样的,还有可能是个对象或者字典。

Robot Framework变量, 与关键字类似不区分大小写, 同时其中的下划线和空格也会被忽略。推荐使用大写字母来表示全局变量(如 ${PATH} 或 ${TWO WORDS}), 小写字母来表示局部变量(如 ${my var} 或 ${myVar})。

*** Variables ***下定义的是suite级别的变量。

​​​​​​​标量

*** Variables ***下,用${var}定义标量,在*** Test Cases ***中用log输出

 

代码示例1:

*** Variables ***

${NAME}           robot framework

${VERSION}        3.1

${CONN}           ${NAME} + ${VERSION}



*** Test Cases ***

scalar

    log    ${NAME}

    log    ${VERSION}

    log    ${CONN}

执行结果:

Starting test: Rf Demo1.Variables.scalar

20190627 15:53:46.477 :  INFO : robot framework

20190627 15:53:46.479 :  INFO : 3.1

20190627 15:53:46.481 :  INFO : robot framework + 3.1

Ending test:   Rf Demo1.Variables.scalar

​​​​​​​列表

创建:列表创建时使用的标识符为@

访问@{NAME}[index]或者 ${NAME}[index],其中index为下标。Robot Framework 3.1版本中,除了列表的切片必须用$符号外其它情况下@和$都可以,建议使用$。列表的访问和python中类似,下标从0开始,负数的话表示从后向前取数据,如果下标超过列表长度的话会报索引错误,也可以使用切片

代码示例:

*** Variables ***

@{colors}         red    green    white

@{nums}           1      2

${index}          2



*** Test Cases ***

list

    log    ${colors}[0]

    log    @{colors}[-1]#取最后一个元素

    log    ${colors}[1:]#切片,注意是$开头

    log    @{colors}[${index}]#列表和标量结合使用

    log    @{nums}[0]

    log    @{nums}[${index}] #越界

执行结果:

​​​​​​​字典

创建:字典创建和访问时使用的标识符为&,

访问:通过 &{NAME}[key]或者${NAME}[key] 这样的语法格式获取字典中某项的值, 其中 key 是键的名称。Robot Framework 3.1版本中,以上两种语法都支持,但是建议使用$。字典的键名当作字符串处理, 非字符串的键可以用变量代替

代码示例1:创建字典并获取其中的项

*** Variables ***

&{user 1}    name=kongsh    password=1234    age=${42}

&{user 2}    name=kongsh    password=1234    password=8888#key重复

&{user 3}    name=kongsh\=tt #变量值中有=号时需要用反斜杠\转义

${key}       name



*** Test Cases ***

dict

    log many   ${user 1}[${key}]    ${user 1}[age]

    log        ${user 2}[password]

    log        &{user 3}[name]

    log        ${user 3.name}#点的方式访问

执行结果:

 

说明:

  1. 字典的key不会有重复的值,多次写同一个key时只保留最后一次写的结果
  2. 变量值中有=号时需要反斜杠转义
  3. 如果键是字符串, 还可以使用另一种语法格式 ${NAME.key}(注意这里是 $ )。

 

代码示例2:字典中的项可以作为命名参数传给关键字

假设有个字典变量 &{USER} 中有值 {'name': 'robot', 'password': 'secret'}, 则下面两个用例的效果是等价的。伪代码:

*** Test Cases ***

Constants    

Login    name=robot    password=secret



Dict Variable    

Login    &{USER}

 

​​​​​​​命令行中设置变量

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

    设置单个变量的选项格式是 --variable name:value, 其中 name 是变量名, 不带 ${} value是变量的值。有多个变量的话就使用这个选项多次。这种方式只能定义标量变量,很多特殊字符必须使用选项 :option:–escape经过转义才能表示。

--variable EXAMPLE:value

--variable HOST:localhost:7272

--variable ESCAPED:Qquotes_and_spacesQ --escape quot:Q --escape space:_

在上例中, 变量值分别是:

  1. ${EXAMPLE} 值为 value
  2. ${HOST} 和 ${USER} 值分别为 localhost:7272 和 robot
  3. ${ESCAPED} 值为 "quotes and spaces"--escape quot:Q表示用引号代替Q, --escape space:_表示用空格代替下划线

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

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

 

​​​​​​​有返回值的关键字

关键字的返回值可以赋值给变量, 这样不同的关键字之间就可以进行交互。这种方式定义的变量和其它变量基本相同, 只是其作用域仅限于它们被创建的 local scope。也就是说在一个测试用例里得到一个返回值变量, 不能在另一个测试用例中使用。

 

代码示例1:返回标量

*** Test Cases ***

return scalar

    ${x}    evaluate    9

    log    ${x}

执行结果:

 

代码示例2:返回列表

*** Test Cases ***

return list

    ${list}    create List    1    2    3

    Length Should Be    ${list}    3

    log many    @{list}

执行结果:

 

代码示例3:返回字典

*** Test Cases ***

return dict

    &{d}    create dictionary    p=1    y=2    t=3    h=4    o=5

    ...    n=6

    length should be    ${d}    6

    log    ${d.t}

执行结果:

 

代码示例4:返回值分配个多个变量

*** Test Cases ***

assign variables

    ${a}    ${b}    ${c}=    create List    1    2    3

    ${frist}    @{rest}=    create List    1    2    3

    @{frist}    ${rest}=    create List    1    2    3

    ${frist}    @{middle}    ${end}=    create List    1    2    3

执行结果:

 

说明:

  1. ${a}, ${b} ,${c} 分别为 1, 2, 3,也就是将列表中数据分别赋给3个变量;
  2. ${first} 值为 1,是数字类型; @{rest}值为 [2, 3],是一个子列表;
  3. @{first} 值为 [1, 2] ,是一个子列表; ${last} 值为 3,是数字类型;
  4. ${begin} 值为 1;@{middle} 值为 [2]是一个子列表; ${end} 值为 3.

 

​​​​​​​使用关键字创建变量

 通过关键字 Set Test Variable 设置的变量在当前测试用例的作用域内可用。例如, 在一个测试用例中的一个用户关键字中设置了一个变量, 该变量会在这个测试用例步骤可见, 同时当前用例中的其它用户关键字也可以使用这个变量,这个关键字创建的变量在其它测试用例中不可用。

通过关键字 Set Suite Variable 创建的变量在当前执行的测试套件内可见。 使用这个方式创建变量和在测试数据文件的变量表格中定义变量, 以及从变量文件导入变量的效果一样。这些变量对其它的测试套件, 包括子套件, 都不可见。

通过关键字 Set Global Variable 创建的变量在设置之后全局可见。这种方式创建的变量和在 setting variables in command line 中使用选项 --variable 或 --variablefile 定义变量效果一样,因为这个关键字会改变任意地方的变量, 所以必须谨慎使用。

注:关键字 Set Test/Suite/Global Variable 直接在作用域内设置变量, 没有返回值。而 Set Variable 设置局部变量, 并且有返回值。

​​​​​​​数字变量

用${Numbers}来表示数值型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

可以创建二进制、十六进制和八进制的数字,前缀分别为0b,0o,0x,不区分大小写。

*** Test Cases ***

num

    Should Be Equal    ${0b1011}    ${11}

    Should Be Equal    ${0o10}    ${8}

    Should Be Equal    ${0xff}    ${255}

    Should Be Equal    ${0B1010}    ${0XA}

​​​​​​​​​​​​​​​​​​​​​​​​​​​​

​​​​​​​布尔值和None/null值

变量是大小写不敏感的,比如${True} and ${true}是等价的,${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}

​​​​​​​空格和空字符串/列表/字典

变量 ${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}          \

 

​​​​​​​内置变量

 

Available automatic variables

Variable

Explanation

Available

${TEST NAME}

当前测试用例的名称

Test case

@{TEST TAGS}

当前测试包含的TAG,可以动态的用 Set Tags and Remove Tags 关键字修改

Test case

${TEST DOCUMENTATION}

Keyword注释

Test case

${TEST STATUS}

当前运行的测试的状态,  PASS or FAIL.

Test teardown

${TEST MESSAGE}

当前的测试的消息

Test teardown

${PREV TEST NAME}

前一条测试的名称,如果第一个没有执行过,前一条为空

Everywhere

${PREV TEST STATUS}

前一条测试执行状态:  PASS, FAIL, or 一条empty的字符串

Everywhere

${PREV TEST MESSAGE}

前一条测试的消息

Everywhere

${SUITE NAME}

当前suite的名称

Everywhere

${SUITE SOURCE}

suite绝对路径

Everywhere

${SUITE DOCUMENTATION}

suite声明的注释

Everywhere

&{SUITE METADATA}

当前测试suite的元数据

Everywhere

${SUITE STATUS}

当前test suite的状态, PASS or FAIL

Suite teardown

${SUITE MESSAGE}

当前test suite的状态消息及统计

Suite teardown

${KEYWORD STATUS}

当前关键字的态, PASS or FAIL.

User keyword teardown

${KEYWORD MESSAGE}

当前keyword的错误消息

User keyword teardown

${LOG LEVEL}

当前的日志级别

Everywhere

${OUTPUT FILE}

输出文件的绝对路径

Everywhere

${LOG FILE}

 log file绝对路径 ,如果为 NONE 不创建log.html

Everywhere

${REPORT FILE}

 report file 绝对路径,如果为 NONE 就不创建report.html

Everywhere

${DEBUG FILE}

debug file绝对路径,如果为NONE就不创建debug.html

Everywhere

${OUTPUT DIR}

output directory路径

Everywhere

​​​​​​​变量的作用域

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

  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内有效
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!