robotframework学习笔记之———变量
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}⽐直接使⽤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    80      # Connect gets two strings as arguments
Example 1B
Connect    example    ${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接收到两个等价的⼊参, 可以看出使⽤变量的形式⽐使⽤反斜杠看上去容易理解的多。
variable怎么记
*** 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}          \
⼗、⾃动变量
⼗⼀、变量的作⽤域
在通常情况下,每个变量默认都是局部变量,在默认情况下,变量的作⽤域为:
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内有效

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。