Robot_Framework:变量

变量声明

1、因为RF底层是Python,所以它的语法也有些类似,变量不需要特定声明,只要有初始化赋值即可使用

2、如果硬要说有声明,那可以把在TestSuite下面手动添加的变量理解为声明。比如可以在TestSuite上点右键或者在Edit区点Add ScalarAdd ListAdd Dict来新增变量

3、在TestSuite下定义变量给我的感觉就是:定义了一些全局变量,适用于当前TestSuite下的全部测试用例
    ⑴如果是定义在资源文件suite下,通过调用资源文件,任何一个测试suite都可以使用。这个要区别与在测试用例中定义的变量

 

 

变量类型

1、RF中变量主要有三类:Scalar、List、Dict

2、RF中的每个变量都需要使用"变量标识符"来表明该变量的类型:每个变量都可以使用"变量标识符{变量名}"来表示
    ⑴Scalar变量:${变量名}。表示一个数据。作为参数传递时,表示一个参数
    ⑵List变量:@{变量名}。表示一组数据。在作为参数传递时,有几个数据就是几个参数
    ⑶Dict变量:&{变量名}。表示一组键值对数据。在作为参数传递时,有几个键值对就是几个参数

3、默认情况下RF里的变量都是字符型的

注:
1、Scalar变量:从翻译上它的中文名叫标量(单值变量),与之对应的就是List这种多值变量了
    ⑴标量变量指的是只保存一个值的变量,可以是数值、字符串、列表、字典等

2、只有带有@标识的变量能够确认它是List型变量(类似于Python可变参数)
    ⑴而带有$标识的变量则要取决于它的变量名或变量值,才能确定它到底是什么变量,特别是变量值。因为变量之间是可以转换的
    ⑵例如使用$标识的变量,实际上也可以在接收List值后转化成List变量

3、要注意下Scalar变量与List变量(Dict变量)的区别:在变量本身含义和调用时都有一些区别
    ⑴Scalar变量:当其值为列表、字典时,是将整个列表、字典当做一个整体(参数)。始终是一个值
    ⑵List变量:是将其值(列表)单独拿来看的,列表里面有几个元素就是几个参数(对应Python里面的可变参数:*args)
    ⑶Dict变量:有几个键值对就是几个参数

 

 

变量赋值

1、(创建)变量赋值也有几种方式,可以根据实际情况来使用
    ⑴可以使用关键字方式:Set和Create赋值
    ⑵也可在运行中被赋值(即在测试用例中将关键字的返回值赋值给某个变量)

2、Scalar变量:Set variable关键字赋值

3、List变量:Set variable或Create list关键字值

4、Dic变量:Create Dictionary关键字赋值

 

 

变量的作用域

1、在通常情况下,每个变量默认都是局部变量。但具体变量还是要根据其定义的位置来确定其作用域:前面提到的测试用例中定义的变量,suite中定义的变量等
    ⑴一个Case里面的变量:作用域在这个Case内部
    ⑵一个UserKeyword里面的变量:作用域在这个UserKeyword内部。只要引用了这个资源文件的目录或suit都可以使用这些变量
    ⑶一个文件型Suite里面的变量:作用域在这个Suite内部,其下面所有的Case都可以使用(一种是定义在目录型suite下的,一种是定义在资源文件下的,资源文件下定义的变量可以通过调用资源文件来使用)
    ⑷一个目录型Suite里面的变量:作用域在这个目录里面(这种定义出来是没什么意义的:它下面的文件型Suite是无法使用这些变量的)

2、变量的作用域是可以改变的。通过一些关键字可以对变量进行作用域的改变
    ⑴Set Global Variable:设置为全局变量。设置后这个变量在所有的测试用例和测试套件中都可以使用
    ⑵Set Suite Variable:设定为File Suite级变量。设置后这个变量在当前文件suite内都可以使用
    ⑶Set Test Variable:设置为Case级变量。设置后这个变量在当前Test Case内可以使用

注:不过不建议使用这几个关键字来改变变量的作用域

 

 

创建变量

1、首先RF变量类型有三种:Scalar、List、Dict

2、RF创建变量的地方有三种:TestCase、TestSuite、UserKeyword

3、创建变量的方式有两种:使用关键字创建、用例运行中创建、在Edit区点Add XXX来创建

 

创建Scalar变量

1、Scalar变量:标量变量指的是只保存一个值的变量,可以是数值、字符串、列表、字典等
    ⑴当其值为列表、字典时,是将整个列表、字典当做一个整体(参数)。始终是一个值

2、Scalar变量:使用"${变量名}"来定义Scalar变量,使用"${变量名}"来取值(调用)

 

使用关键字创建

1、可以用来创建Scalar变量的关键字主要有以下几个:
    ⑴Set Variable:该关键字用于设置变量,作用域较小,通常用于单个CASE中,使用前需要先声明(常用)
    ⑵Set Suite Variable:该关键字的作用域为Suite内可用,前提是要先声明,后需suite内的所有case才可使用(不常用)
    ⑶Set Global Variable:作用范围:该关键字的作用域为Proeject,前提要先声明,声明后的case、suite才可用(不常用)

例1:
⑴定义变量

⑵输出

注:在默认情况下,RF里面输入的变量值都是字符串型

 

在Edit区创建

1、在Edit区创建变量是通过Add Scalar来创建

2、在Edit区创建的变量都是Suit层级的变量,在该整个Suit下的测试用例都可以使用该变量

3、Edit区可以是资源文件的也可以是测试目录下的。两个地方创建变量方式是一样的,只是创建的变量作用域不一致
    ⑴资源文件下的变量:只要调用了该资源文件,就可以使用其下面的变量

例2:
⑴创建变量

⑵调用变量

 

在运行中创建变量

1、在测试用例运行过程中创建变量指的是:将关键字(Python函数)的返回值赋值给一个变量

例3:
⑴创建变量

 

创建List变量

1、List变量:@{变量名}。表示一组数据,在作为参数传递时,有几个数据就是几个参数(对应Python里面的可变参数:*args)

2、list变量:使用"@{变量名}"来定义;使用"${变量名}"来取值(调用)

 

使用关键字创建

1、和Scalar类似,List变量也可以使用Set Variable来赋值,但是它最正式的赋值方式还是使用Create List关键字

例4:
⑴创建变量

⑵输出

注:
1、这个例子中分别使用了关键字Set Variable和Create List来设置一个变量,并分别赋值给一个Scalar类型和List型变量
    ⑴可以看到不管是使用Set Variable还是使用Create List来设置一个变量,它们的返回的结果都是一样的(都是列表),但是数据代表的含义是不一致的
    ⑵Scalar类型:值里面不管有多少个元素,都是一个变量值
    ⑶List型变量:值里面有多少个元素就有多少个变量值(感觉跟Python中的可变参数有点类似)

2、需要注意的是List型变量在调用时需要使用"${变量名}"来调用(调用时肯定是将变量看做一个整体)
    ⑴虽然此时"${变量名}"显示为紫色(紫色代表变量没有定义),但是这种情况下该变量是可以正常使用的

 

在Edit区创建

1、在Edit区创建变量是通过Add List来创建

2、在Edit区创建的变量都是Suit层级的变量,在该整个Suit下的测试用例都可以使用该变量

3、Edit区可以是资源文件的也可以是测试目录下的。两个地方创建变量方式是一样的,只是创建的变量作用域不一致
    ⑴资源文件下的变量:只要调用了该资源文件,就可以使用其下面的变量

例5:
⑴创建变量

⑵调用变量

 

在运行中创建变量

1、感觉在运行中创建List型变量很少:即使一个关键字(Python函数)返回的是一个列表,也是将列表看做一个整体(此时使用$标识符),而不是说需要将列表中的元素分开看

2、List(@)变量,只是为了定义可变参数(*args),在使用时就需要将其看做一个整体了,使用$标识符(在其他时候列表都是用$标识符就好了)

例6:了解
⑴创建变量

⑵输出

 

@{lists}和${lists}的区别

㈠相同点:
1、@{}列表类型和${}列表类型都可以用来创建列表变量,均可以通过set variable和create list创建

㈡不同点
1、两种类型的变量的意义不一样:
    ⑴Scalar类型:值里面不管有多少个元素,都是一个变量值
    ⑵List型变量:值里面有多少个元素就有多少个变量值
    ⑶${lists}可以看成是一个列表整体,一个列表就是一个参数; @{lists}是将列表拆成一个个单独的元素,每个元素都是一个参数
    ⑷${lists}在Python里面就是一个list(一个整体),然后@{lists}就是展开其list中的每个元素,作为多个参数传入,和*args一样效果,在Python里叫可变参数
    ⑸简单的说就是:在定义(作为参数传入)变量时,看我们需要传入的是整个列表还是分开传列表中的元素
        ①传入整个列表:将列表看做一个整体:则定义为Scalar类型
        ②分开传列表中的元素:则定义为List型变量(对应Python里面的可变参数:*args)
    
2、两种类型的变量的展示格式和引用格式
    ⑴Scalar型变量与List型变量都可以表示列表,因此都可以使用列表索引
    ⑵List型变量:在List的变量的括号外面加上方括号,里面是索引值,@{变量名}[索引值]
    ⑶Scalar型变量:在变量名后面加上方括号,里面是索引值,${变量名[索引值]}

 

创建Dict变量

1、Dict变量:&{变量名}。表示一组键值对数据。在作为参数传递时,有几个键值对就是几个参数

2、Dict变量:使用"&{变量名}"来定义Dict变量;使用"${变量名}"来取值(调用)

 

使用关键字创建

1、可以使用Create Dictionary关键字来创建字典变量

例7:
⑴创建变量

⑵输出

注:
1、需要注意的是Dict型变量在调用时需要使用"${变量名}"来调用(调用时肯定是将变量看做一个整体)
    ⑴虽然此时"${变量名}"显示为紫色(紫色代表变量没有定义),但是这种情况下该变量是可以正常使用的

 

在Edit区创建

1、在Edit区创建变量是通过Add Dict来创建

2、在Edit区创建的变量都是Suit层级的变量,在该整个Suit下的测试用例都可以使用该变量

3、Edit区可以是资源文件的也可以是测试目录下的。两个地方创建变量方式是一样的,只是创建的变量作用域不一致
    ⑴资源文件下的变量:只要调用了该资源文件,就可以使用其下面的变量

例8:
⑴创建变量

⑵调用变量

 

在运行中创建变量

1、感觉在运行中创建Dict型变量很少:即使一个关键字(Python函数)返回的是一个字典,也是将字典看做一个整体(此时使用$标识符)

 

&{dict}和${dict}的区别

1、字典变量也是标量的一种,只是值是字典,所以可以看成字典变量

2、${dict}可以看成是一个完整的字典对象,&{dict}可以看成整体拆成一个个单独的键值对

3、${dict}在Python里面就是一个dict,然后&{dict}就是展开其dict中的每个键值对,作为多个参数传入,和**kwargs一样效果,在Python里叫关键字参数

 

 

变量操作

1、RF是使用Python写的,因此其变量在某些方式可以使用Python的语法
    ⑴比如索引、切片等

 

Scalar变量

1、Scalar变量:使用"${变量名}"来定义Scalar变量,使用"${}"来取值(调用)

2、索引取值:${var[index]}  

3、切片取值:${var[start_index:end_index:step]}  

例9:设置变量

    ${string}    Set Variable    hello,world
    log    ${string}

#输出
20210111 16:45:31.818 :  INFO : ${string} = hello,world
20210111 16:45:31.819 :  INFO : hello,world

例10:字符串索引

    ${string}    Set Variable    hello,world
    log    ${string}
    log    ${string[4]}

#输出
20210111 16:45:31.818 :  INFO : ${string} = hello,world
20210111 16:45:31.819 :  INFO : hello,world
20210111 16:45:31.820 :  INFO : o

例11:列表索引

    ${string}    Set Variable    1    2    3    4
    log    ${string}
    log    ${string[0]}

#输出
20210111 16:57:01.557 :  INFO : ${string} = [u'1', u'2', u'3', u'4']
20210111 16:57:01.557 :  INFO : [u'1', u'2', u'3', u'4']
20210111 16:57:01.558 :  INFO : 1

例12:列表切片(与Python一致)

    ${string}    Set Variable    1    2    3    4
    log    ${string}
    log    ${string[0:3]}

#输出
20210111 16:56:12.725 :  INFO : ${string} = [u'1', u'2', u'3', u'4']
20210111 16:56:12.726 :  INFO : [u'1', u'2', u'3', u'4']
20210111 16:56:12.727 :  INFO : [u'1', u'2', u'3']

 

list变量

1、list变量:使用"@{变量名}"来定义;使用"${变量名}"来取值(调用)

2、创建列表:Create List或Set Variable

3、索引取值:${var[index]}  

4、切片取值:${var[start_index:end_index:step]}  

例13:创建变量

    @{list_1}    Set Variable    1    2    3    4
    log    ${list_1}
    @{list_2}    Create List    1    2    3    4
    log    ${list_2}
    
#输出
20210111 17:06:39.012 :  INFO : @{list_1} = [ 1 | 2 | 3 | 4 ]
20210111 17:06:39.013 :  INFO : [u'1', u'2', u'3', u'4']
20210111 17:06:39.014 :  INFO : @{list_2} = [ 1 | 2 | 3 | 4 ]
20210111 17:06:39.015 :  INFO : [u'1', u'2', u'3', u'4']

例14:索引、切片

    @{list_1}    Set Variable    1    2    3    4
    log    ${list_1[1]}
    log    ${list_1[1:3:1]}

#输出
20210111 17:07:50.601 :  INFO : @{list_1} = [ 1 | 2 | 3 | 4 ]
20210111 17:07:50.602 :  INFO : 2
20210111 17:07:50.603 :  INFO : [u'2', u'3']

注:从上面例子可以看出
    ⑴定义的List(@)变量,在调用时都是将其看做一个整体,整个列表就是一个变量。使用$标识符调用
    ⑵List(@)变量,只是为了定义可变参数(*args),在使用时就需要将其看做一个整体了

 

Dict变量

1、Dict变量:使用"&{变量名}"来定义Dict变量;使用"${变量名}"来取值(调用)

2、创建字典:Create Dictionary

 例7:创建变量

    &{dict}    Create Dictionary    name=zh    age=11    country=china
    log    ${dict}

#输出
20210111 17:17:58.307 :  INFO : &{dict} = { name=zh | age=11 | country=china }
20210111 17:17:58.308 :  INFO : {u'name': u'zh', u'age': u'11', u'country': u'china'}

注:从上面例子可以看出
    ⑴定义的Dict(&)变量,在调用时都是将其看做一个整体,整个字典就是一个变量。使用$标识符调用
    ⑵Dict(&)变量,可用于定义可变参数(**kwargs:实际上也是一个字典),在使用时就需要将其看做一个整体了

 

 

常量

1、除了变量以外,RF里还有一些常量。常量主要有环境变量、数值常量、特殊字符常量、系统保留变量

2、环境变量:在RF里可以使用同一标识符"%"来表示。如电脑环境变量中定义了一个JAVA_HOME的变量,则在RF中可以使用%{JAVA_HOME}来调用(RF中只能使用,不能赋值)

3、数值常量:通常情况下,在RIDE里面所有字符都会被当做字符串,即使变量的值是数值,默认也是字符串形式存在(Robotframework输入框输入的默认为字符串)。如果想要它以数值方式存在,就可以用到数值常量
    ⑴使用数值定义方式${2}:如定义一个2的数值类型,可以写成${${2}} (外层的${}是定义一个变量,内层的${2}表示数值,感觉就是转义下)
    ⑵当然也可以在PY脚本中使用int()函数转换下

4、特殊字符常量和系统保留变量:这行平常几乎遇不到,比如${/}、${:}、${False}、${None}、${null}、${True}

 


 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页