当前位置:网站首页>RobotFramework 之 RF变量与标准库关键字使用
RobotFramework 之 RF变量与标准库关键字使用
2022-08-09 13:06:00 【沉觞流年】
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 variable
和create list
关键字赋值。 - dict变量:
create dictionary
关键字赋值。
scalar变量
新建一个 testconfig.py
文件,用于定义用户关键字
testconfig.py
def get_type(var):
return type(var)
if __name__ == '__main__':
pass
在robot文件中导入这个自定义的库,然后在robot文件中调用 testconfig.py
中 判断类型的方法
定义三个变量 var1
、 var2
、 var3
,将 hello
、 2020
、 [1,2,3,4]
三个参数分别传入到 var1
、 var2
、 var3
三个变量中
然后调用用户关键字
方法,判断 var1
、 var2
、 var3
三个变量的类型,分别将其赋值给变量 type1
、 type2
、 type3
,将这三个变量输出到控制台,查看输出的内容
*** 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'>
,说明 var1
、 var2
、 var3
三个变量的类型都是字符串类型
这是因为默认情况下RF里的变量都是字符型的
2020
、 [1,2,3,4]
这两个参数看起来像是 int
和 list
类型,实际上,在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}
对应的则是三个 a
、b
、c
。 @{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变量之循环
注意: 这里关键字 FOR
、 IN
、 END
、都需要大写
*** 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.py
与robot文件
在同一层级目录,如果在不同层级目录,要在 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文件
所在的路径
边栏推荐
- Professor Chen Qiang "application in machine learning and R" course chapter 17
- Uni - app - uview Swiper shuffling figure component, click on the links to jump (click to get the item after the row data, remove data operation)
- GET POST PUT DELETE request in GIN
- Map mixed density function and quantile added line
- FFmpeg多媒体文件处理(ffmpeg处理流数据的基本概念)
- IDEA Gradle 常遇问题(一)
- How to solve the 0x80070005 error when the computer is reinstalled and the system is restored
- 搭建大型分布式服务(二)搭建会员服务
- 问题系列-如何修改或更新localhost里的值
- 5G Unicom Network Management Design Ideas
猜你喜欢
WSA toolkit installed app store tip doesn't work how to solve?
GIN file upload and return
How to solve the 0x80070005 error when the computer is reinstalled and the system is restored
某高校的R语言数据分析期末作业
render解析
Final assignment of R language data analysis in a university
[MRCTF2020]套娃-1
TCP三次握手和四次挥手及拥塞控制
error Trailing spaces not allowed no-trailing-spaces 9:14 error Unexpected trailing comma
eslint语法规则报错
随机推荐
音视频录入的pts和dts问题
How to reduce the size of desktop icons after the computer is reinstalled
FFMPEG multimedia file processing (deletion and renaming of ffmpeg files)
Professor Chen Qiang the machine learning and R application course chapter 18 assignments
Sandbox中的进程/线程相关-2
[MRCTF2020]套娃-1
ArcEngine(九)图形绘制
NC96 判断一个链表是否为回文结构
vim常用命令
为什么文字不贴合边
GIN中GET POST PUT DELETE请求
面试攻略系列(四)-- 你不知道的大厂面试
FFmpeg长时间无响应的解决方法
剑指 Offer 56 - II. 数组中数字出现的次数 II(位运算)
面试攻略系列(二)-- 秒杀系统
The sword refers to Offer 56 - II. Number of occurrences of a number in an array II (bit operation)
Process/Thread Related in Sandbox - 2
群组行动控制--自动队列化实现策略
32位机器和64位机器基本数据类型长度
ftplib+ tqdm upload and download progress bar