《我的RobotFramework书》1-6-1 创建变量, Creating Variables
来源:互联网 发布:网络运营可以自学吗 编辑:程序博客网 时间:2024/06/07 14:48
创建变量, Creating Variables
作者: 虞科敏
有以下途径可以创建变量:
- 通过Vairable Table
- 在Vairable File中定义
- 使用命令行选项
- 来自关键字的返回值
- 使用内建关键字设置
变量表, 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:Qquotesand_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"使用返回值设置本地变量
- 《我的RobotFramework书》1-6-1 创建变量, Creating Variables
- 《我的RobotFramework书》1-6-3 内建变量, Build-in Variables
- 《我的RobotFramework书》1-6 变量, Variable
- 《我的RobotFramework书》1-6-4 变量的属性和作用范围
- 《我的RobotFramework书》1-6-2 变量文件, Vairable Files
- 《我的RobotFramework书》1-1 测试数据, Test Data
- 《我的RobotFramework书》1-3 测试模板, Test Template
- 《我的RobotFramework书》1-4 测试套件, Test Suite
- 《我的RobotFramework书》1-5 测试库, Test Library
- 《我的RobotFramework书》 - 篇首
- RobotFramework内置变量:Built-in Variables(转载)
- Robotframework(4):创建变量的类型和使用
- 《我的RobotFramework书》1-2 测试用例, Test Case
- robotframework中变量的重复使用
- RailsCasts中文版,#1 Caching with Instance Variables 缓存实例变量
- Railscasts #1 Caching with Instance Variables缓存实例变量
- Spark2.1 共享变量(Broadcast Variables&Accumulators)分析。
- Creating and Editing Template Variables
- 查询所有的表中,有没有列名 为 某一个字符串的 SQL文 或者 unique行 有哪些表 哪些行
- Redis几个认识误区
- eclipse java导入jar、命令行参数与重定向
- Android组件间通信库EventBus学习
- XML解析
- 《我的RobotFramework书》1-6-1 创建变量, Creating Variables
- Spring 整合 Tibco EMS
- 机器学习——深度学习(Deep Learning) .
- Nginx-----新手指南
- 【opencv练习05 - 计时器的使用】
- dicproject
- Android中,SD卡上的媒体文件(图片、视频)的改变与通知
- 《代码大全》读书笔记及随想(day07)
- 暑期工作日志-Day8