RobotFramework 之 RF变量与标准库关键字使用

关键字使用方法查看

方法一:查看官方文档

官方文档 内容比较多,而且是国外的网站,访问可能比较慢,推荐使用方法二

比如要进行web自动化测试,需要用到 SeleniumLibrary 库,点击标题链接后,进入github,查看相关文档
在这里插入图片描述
然后点击 keyword documentation,跳转到关键字文档
在这里插入图片描述
通过搜索栏查询关键字,然后查看关键字使用
在这里插入图片描述

方法二:查看关键字对应的源码

按住Ctrl,将鼠标移至关键字上,点击关键字,即可进入源码所在py文件
在这里插入图片描述
源码中有对应的注释和使用方法示例,如果英文比较差,可借助 Translation插件,插件安装可查看 该篇文章

RF变量

简单了解一下RF中的参数类型,通过与关键字的使用结合进行了解

RF变量类型和声明

形参

  • 必选参数
  • 可选参数
    • 缺省值参数
    • 可变参数

实参

  • 字面量:unicode字符串,编码方式utf-8。
  • 变量
    • Scalar 直接传递python对象
    • List 展开列表内的元素,作为多个参数传入
    • Dictionary 展开字典内的元素,作为多个参数传入

RF中变量类型和变量标识符:

每个变量都可以用 变量标识符{变量名}

  • scalar变量:${变量名}
  • list变量:@{变量名}
  • dict变量:&{变量名}

RF变量声明:

底层是python语言实现,所以跟python创建变量类似。
变量不需要特定声明,只要有初始化赋值即可使用。
默认情况下RF里的变量都是字符型的

RF变量赋值

注意:如果一个变量没有经过赋值,使用时会报错的。

  • scalar变量:set variable关键字赋值。
  • list变量:set variablecreate list关键字赋值。
  • dict变量:create dictionary关键字赋值。

scalar变量

新建一个 testconfig.py文件,用于定义用户关键字

testconfig.py

def get_type(var):
    return type(var)

if __name__ == '__main__':
    pass

在robot文件中导入这个自定义的库,然后在robot文件中调用 testconfig.py 中 判断类型的方法
定义三个变量 var1var2var3,将 hello2020[1,2,3,4]三个参数分别传入到 var1var2var3三个变量中
然后调用用户关键字方法,判断 var1var2var3三个变量的类型,分别将其赋值给变量 type1type2type3,将这三个变量输出到控制台,查看输出的内容

*** Settings ***
Library     testconfig.py


*** Test Cases ***

参数传递

# 定义变量
	${var1}     set variable    hello
	${type1}     get type        ${var1}
	log to console    ${type1}


	${var2}     set variable    2020
	${type2}     get type        ${var2}
	log to console    ${type2}

	${var3}     set variable    [1,2,3,4]
	${type3}     get type        ${var3}
	log to console    ${type3}

可以发现,控制台输出的内容,都是<class 'str'>,说明 var1var2var3三个变量的类型都是字符串类型
这是因为默认情况下RF里的变量都是字符型的
2020[1,2,3,4]这两个参数看起来像是 intlist 类型,实际上,在RF中都是字符串类型,相当于在python中是 '2020''[1,2,3,4]'

拓展:将字符串类型的内容转换成数字类型的内容

  • 法一:通过定义用户关键字方式实现

testconfig.py

def get_type(var):
    return type(var)
    
def str_to_int(var):
    return int(var)

def sum_add_10(var):
    return var + 10
    
if __name__ == '__main__':
    pass
*** Settings ***
Library     testconfig.py


*** Test Cases ***

数学计算1
	${var4}     set variable    20
	${type4}    get type        ${var4}
	${var5}     str to int      ${var4}
	${type5}    get type        ${var5}
	${var6}     sum add 10      ${var5}
	${type6}    get type        ${var6}

	log to console    ${type4}
	log to console    ${type5}
	log to console    ${type6}
  • 法二:通过 convert to integer关键字 实现
*** Settings ***
Library     testconfig.py


*** Test Cases ***

数学计算2
	${num}      convert to integer    20
	${type7}    get type        ${num}
	${var8}     sum add 10      ${num}
	${type8}    get type        ${var8}

	log to console        ${type7}
	log to console        ${type8}

同样的关键字还有 convert to number,将内容转换成浮点数

  • 法三:直接转换成整数
    这种方式在编辑器中会报红,因为编辑器无法识别,但是运行是没有问题的
*** Settings ***
Library     testconfig.py


*** Test Cases ***

数学计算2
	${res}       sum add 10    	${20}
	${type9}    get type        ${res}
	
	log to console        ${res}
	log to console        ${type9}

浮点数也可以这样转换,但比较复杂的内容就不行了,比如列表

list变量

创建一个list类型变量

*** Test Cases ***

列表类型
	${list}     create list    a    b    c
	log to console    ${list}

控制台中会直接将该变量的内容['a', 'b', 'c']打印出来

==============================================================================
列表类型                                                              .['a', 'b', 'c']
列表类型                                                              | PASS |
------------------------------------------------------------------------------
Test                                                                 | PASS |
1 test, 1 passed, 0 failed

而如果将 log to console 打印的内容换一下

*** Test Cases ***

列表类型
	${list}     create list    a    b    c
	log to console    @{list}

控制台中就不会将变量的内容打印出来了

==============================================================================
列表类型                                                              | PASS |
------------------------------------------------------------------------------
Test                                                                 | PASS |
1 test, 1 passed, 0 failed

这个和 log to console 的源码有关

在这里插入图片描述
第一个参数 message指的是输出的值 ,第二个参数stream指的是输出流,默认是 STDOUT,也就是输出到控制台上。如果给第二个参数传参了,默认的就不是是 STDOUT了,就不会输出到控制台上

换成 log many 在生成的日志文件报告中查看一下 ${list}@{list}两个的区别

*** Test Cases ***

列表类型
	${list}     create list    a    b   c
	log many    ${list}
	log many    @{list}

在这里插入图片描述
可以发现, ${list} 对应的是['a', 'b', 'c']@{list}对应的则是三个 abc@{list}相当于将列表里的元素解包了

如果要获取列表里的元素,可以采用下标的方式获取,例如要获取列表中的第二个元素 b,可以有两种方式,这个和python也没有很大的区别

*** Test Cases ***

列表类型
	${list}     create list    a    b   c
	log many    ${list}
	log many    @{list}
	
	log many    ${list}[1]
	log many    ${list[1]}

扩展:如果定义列表的时候,不用 $,而是用@,会有什么变化?

*** Test Cases ***

列表类型
	@{list}     create list    a    b   c
	log many    ${list}
	log many    @{list}
	
	log many    ${list}[1]
	log many    ${list[1]}

在这里插入图片描述

定义的时候,写什么类型,与传参的时候写什么类型,是没有关系的
${list}传参,称为整体传参,是作为一个参数传递; @{list}解包传参,作为多个参数传递

dict变量

dict类型变量是以键值对的方式存在
定义一个dict类型变量

*** Test Cases ***

字典类型
	${dict}     create dictionary    a=1    b=2   c=3
	log many    ${dict}         # 整体传参--作为一个参数
	log many    &{dict}         # 解包传参--作为多个参数

在这里插入图片描述
获取dict类型变量里的参数

*** Test Cases ***

字典类型
	${dict}     create dictionary    a=1    b=2   c=3
	log many    ${dict}         # 整体传参--作为一个参数
	log many    &{dict}         # 解包传参--作为多个参数
	log many    ${dict}[b]        
	log many    ${dict['b']}   

注意: 如果是在大括号外面通过键值对的方式获取参数的值,是不需要加引号的,因为RF语法默认是字符串的形式,而在大括号里面,是python语法的形式,所以需要加上引号,让其变为字符串类型
在这里插入图片描述

RF变量之循环

注意: 这里关键字 FORINEND 、都需要大写

*** Test Cases ***

循环语法
	FOR     ${i}    IN      a       b       c       d
	log to console    循环体${i}
	END     # x循环体结束

打印内容

==============================================================================
循环语法                                                              
循环体a
循环体b
循环体c
循环体d
循环语法                                                              | PASS |

例子:遍历0~9

*** Test Cases ***

循环语法
	FOR     ${i}    IN RANGE    5
	log to console    循环体${i}
	END     # x循环体结束

打印结果

==============================================================================
循环语法                                                              
循环体0
循环体1
循环体2
循环体3
循环体4
循环语法                                                              | PASS |

例子:输出 1~10间的偶数

*** Test Cases ***

循环语法
	FOR     ${i}    IN RANGE    2  11  2
	log to console    循环体${i}
	END     # x循环体结束

打印结果

==============================================================================
循环语法                                                              
循环体2
循环体4
循环体6
循环体8
循环体10
循环语法                                                              | PASS |

这个和python里的range()函数是类似的,但一般更复杂点的逻辑,通过python语法自定义关键字实现

循环列表

*** Test Cases ***

循环列表
	${list}     create list     a       b       c       d
	FOR     ${i}    IN      @{list}
	log to console    循环体${i}
	END     # x循环体结束

这里需要用到 @{list} 解包传参

打印内容

==============================================================================
循环语法                                                              
循环体a
循环体b
循环体c
循环体d
循环语法                                                              | PASS |

标准库常用关键字

log

*** Test Cases ***

常用关键字1
    log to console      hello
    log                 hello
    log many            hello!   hello  \  robotframework
  • log to console 指的是将日志信息打印到控制台上,我们可以在控制台看到相应的输入信息,但每次只能打印一个参数
  • log 指的是将日志记录到报告中,记录INFO级别的日志信息
  • log many 传递的是可变参数,可以传递多个参数。如果传递的参数中存在空格,可以使用反斜杠转义,在第二个空格处加入反斜杠,如hello \ robotframework,这里就只当成是一个参数进行传递。但是一般情况下不推荐在参数中存在空格的情况,如果必须在参数中传递空格,推荐使用自定义关键字方式进行处理,然后在RF中进行调用

断言

should be equal

should be equal 用于判断两个参数是否相等

*** Test Cases ***
断言1
	${expect}   set variable    2020
	should be equal    ${expect}    2020

断言2
	${expect}   set variable    2020
	should be equal    ${expect}    ${2020}

第一条断言是相等的,两个都是字符串类型的2020;第二条断言是不相等的,一个是字符串类型的2020,一个是整数类型的2020

should be equal as integers 将两个参数都转化成整数类型再进行判断是否相等

*** Test Cases ***
断言3
	${expect}   set variable    2020
	should be equal as integers    ${expect}    2020

断言4
	${expect}   set variable    2020
	should be equal as integers    ${expect}    ${2020}

断言3和断言4都是PASS,说明进行判断的两个参数都是相等的。因为都将参数转换成整数类型进行判断了

其他相似的还有:

  • should be equal as strings :将两个参数都转化成字符串类型再进行判断是否相等

  • should be equal as numbers :将两个参数都转化成浮点数类型再进行判断是否相等

  • should not be equal as integers :将两个参数都转化成整数类型再进行判断是否不相等

  • should not be equal as strings :将两个参数都转化成字符串类型再进行判断是否不相等

  • should not be equal as numbers :将两个参数都转化成浮点数类型再进行判断是否不相等

should be true

should be true 见名知义,判断是否为真。但这个断言有点特殊,它需要传递的是python表达式

*** Test Cases ***
断言5
	${expect}   set variable    hello
	should be equal   'hello'== $expect

这个断言,断言的形式和传参的方式,都比较特殊,和前面的语法略有不同。
首先,这个断言判断的是两个字符串是否相等,而字符串在这个表达式里,需要以引号的方式括起来;
变量的传递,这里需要去掉大括号。如果没有去掉大括号,会产生报错,执行一下,查看控制台打印的内容,可以发现${expect} 传递的内容,变成了hello,没有带上引号,不是字符串的类型,这是因为RF变量表示的字符串传递给python时,会去掉引号

注意: 在python表达式中,'hello'== $expect里的内容不能超过两个空格,需要符合RF的编写规则

sleep

*** Test Cases ***
等待
	log to console    5秒后见
	sleep    5
	log to console    5秒到了

在控制台观察可以发现,5秒后才打印 5秒到了这句话

import library

testconfig.py

def get_type(var):
    return type(var)
    
def str_to_int(var):
    return int(var)

def sum_add_10(var):
    return var + 10
    
if __name__ == '__main__':
    pass

通常我们导库都是在 Settings 表中导库

*** Settings ***
Library     testconfig.py

但除了这种方式,还可以在测试用例中进行导库,这种方式并不常用,稍作了解即可

*** Test Cases ***


数学计算4
	import library    testconfig.py
	${res}      sum add 10    	${20}
	${type9}    get type        ${res}

	log to console        ${res}
	log to console        ${type9}

但这种方式在编辑器中会报红,编辑器无法识别,且相应的运行命令也需要进行改变
robot -P . -t *4 test1.robot
稍微解释一下,-P . 是指定当前robot文件所在目录下,-t *4 是指仅运行模糊匹配带4 这个字符串的所有测试用例

上面所说的,是 testconfig.pyrobot文件在同一层级目录,如果在不同层级目录,要在 Settings 表中导库,和在python中导包是类似的

例如现在 testconfig.py文件在config文件夹下,config文件夹robot文件在同一层级目录
在这里插入图片描述

*** Settings ***
Library     config.testconfig.py

数学计算4
	
	${res}      sum add 10    	${20}
	${type9}    get type        ${res}

	log to console        ${res}
	log to console        ${type9}

使用命令robot -P . -t *4 test1.robot,依旧可以找到自定义库testconfig.py,执行用例

还可以通过改变命令,不改变robot文件中的导入方式,执行用例
robot文件中依旧只是Library testconfig.py

*** Settings ***
Library     testconfig.py

数学计算4
	
	${res}      sum add 10    	${20}
	${type9}    get type        ${res}

	log to console        ${res}
	log to console        ${type9}

通过改变命令 robot -P . /config -t *4 test1.robot,也可以执行成功。
关键在于弄清楚相对路径的起点在于当前的robot文件所在的路径

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值