1、测试套件主要是存放测试案例的,而资源文件主要就是用来存放用户关键字的的
2、在实际的项目测试过程中,往往需要创建许多这样的具有通用性的用户关键字。且不希望这些关键字依附于某个测试套件,甚至是某个项目。那么可以创建资源文件用于存放这些关键字
步骤1:
1、右键“测试项目”选择“New Resource”创建资源
2、这种创建在项目内的资源文件我叫它是内部资源文件,区别与下面的外部资源文件
步骤2:
1、填写好资源文件的相关信息:名称、类型(TXT)
2、刚刚新增的资源文件时灰色的,是因为它没有被任何的suite或Resource加载
1、Resource的Settings界面如下图所示
2、Settings里面只有一个Documentation。Resource右侧的工作区基本上和文件型的Test Suite一样。多了一个"Find Usages"按钮,是查找关键字用的
1、加载资源主要是在工作区的Add Import里单击"Resource"按钮来添加的,因为Test Suite和Resource的工作区里面都有Add Import功能,因此可以在这两个地方进行加载资源
2、加载资源感觉就是调用资源:只有加载资源后才能使用对应资源里面的关键字
3、关于添加资源的作用域与库一样。我这里是添加到的测试套件中,那么它的作用域就是当前测试套件下的所有用例
步骤1:
1、选择测试套件(Resource)的Edit标签页右侧的“Resource”按钮来添加资源
2、在"Path"文本框中输入资源文件的完整路径,也可以通过"Browse"按钮来选择资源文件的路径
步骤2:
1、填写资源文件的相关信息后,点击"OK"按钮即可导入资源文件
2、导入资源文件后,资源文件路径显示为蓝色带下划线的状态就表示带入成功了(有时导入成功了也会显示成黑色,具体是否成功可以通过调用资源文件下的关键字来确定)
3、下图中有个黑色的py文件路径:其是直接调用的py文件。即PY文件没有封装成关键字,直接使用的是Python函数。这种导入需要通过"Library"按钮来导入
1、外部资源主要是指不在Project管辖范围内的资源文件
2、如果是目录的Project,只要不在自己目录内的资源文件都算是资源文件
3、如果是文件的Project,它自己无法创建资源文件,其他的资源文件都算外部资源
1、在External Resource外部资源目录上右键,点击"Add Resource",点击后会弹出文件夹,选择需要添加的资源文件,选择好后,点击"OK"即可添加资源文件
2、成功添加外部资源文件后,外部资源文件会显示在External Resource目录下
3、在External Resource下添加的资源只能看看,真正的调用还是要到Test Suite或Resource下去添加才行。方法与调用内部资源文件(自己叫的)方法一样
4、要新建一个外部资源文件的话,我的办法是:选择合适的目录后,先手动增加一个空白的TXT文件,然后再在RF中添加外部资源文件
1、Robot Framework主要就是关键字驱动的自动化测试,关键字是它的核心。从关键字的类型来说,可以分为系统关键字和用户关键字两种
2、系统关键字通常都是来源于测试库
3、用户关键字更多的是来源于资源文件(当然也可以在测试套件中加用户关键字,但是不推荐这样)
4、系统关键字底层就是Python函数,而用户关键字其实和函数也没什么两样,完全可以像设计函数一样设计自己的用户关键字
5、可以在资源文件里添加用户关键字,也可以在测试套件中添加关键字,后者不推荐(在资源文件里面添加关键字:可以将类似的关键字放在同一个资源文件中,如果关键字都单独放,就会显得很杂乱)
步骤1:
1、在前面创建的资源文件上右键->选择"New User Keyword"
2、在"Name"文本框中输入关键字的名称,中英文都可以。Arguments可以先不管。点击"OK"按钮创建成功(这里创建的相当于只是创了一个空的关键字来占位)
步骤2:查看关键字的Settings页面(这步可以不算在创建关键字的步骤里)
关键字的Settings页面和Test Case有些区别(这里面主要的就是Arguments和Return Value了)
⑴Documenttation:文档,该关键字的相关说明
⑵Arguments:关键字的传入参数
⑶Teardown:和Case的类似,设置关键字执行完成时的动作
⑷Timeoue:和Case的类似,运行超时的时间设置
⑸Return Value:关键字的返回值
步骤3:编写PY脚本
1、根据业务来编写对应的PY脚本:如实现一些数字的相加功能
2、因为数字相加时不确定输入的数字有多少个,因此在写PY脚本时,选择一个列表来存需要相加的数字
def Add(numList):
num = 0
for number in numList:
num = int(number) + num #RF中输入的为字符串,因此需要转换下
return num
步骤4:关联PY脚本
1、因为关键字是位于资源文件下的,因此选择对应的资源文件并切换到其下的"Edit"页面
2、点击"Library"按钮->弹出脚本选择对话框->点击"Browse"选择对应的PY脚本路径(关键字关联的是PY脚本,因此导入的是Library)
4、成功导入PY脚本后,脚本路径显示为黑色(红色时表示未成功,不过也有例外)。下图中其他三项可以不管
步骤5:设置关键字
1、选择要创建的关键字并切换到其下的"Edit"页面
2、在Arguments和Return Value下填写关键字(函数)需要传入的参数变量和需要返回的返回值变量(其他项可以选填)
3、因为我们的PY函数接收的是一个参数(将列表作为一个值传入),因此这里设置参数时用的是Scalar型变量(RF中设置的参数个数要与PY函数设置的参数个数对应,不然会报错)
4、一般来说关键字的格式都是:返回值 PY函数 函数参数....(关键字设置成功了可以看到函数名是蓝色的)
步骤6:导入资源
1、因为这里创建的关键字所在资源文件属于外部资源文件,因此在使用时需要导入对应的资源文件,才能使用该资源文件下的关键字
2、选择将要创建测试用例所在的Test Suite并切换到"Edit"页面,点击"Resource"按钮导入资源
3、这个例子中测试用例(suite)关联的是资源文件,因此是通过"Resource"导入的。当然若测试用例直接用的是PY函数(没有封装成关键字的PY函数,就需要通过Library导入)
步骤7:调用关键字
1、创建一个关键字:因为该关键字是的参数是一个列表,因此需要先创建一个列表
2、用例的意思为:
⑴使用RF自带关键字"create list"创建一个列表,并将创建的列表赋值给变量"${数字列表}"(这里需要注意的是:要使用Scalar型变量,不能使用List型变量,因为这个列表是作为一个值传递给PY脚本的)
⑵将上一步创建的列表变量"${数字列表}"作为参数传递给关键字"加法_补充",并将关键字的返回值赋值给变量"${和}"(调用关键字和设置关键字的格式差不多:返回值在左边、函数(关键字)在中间、参数在右边)
⑶最后通过关键字"log"打印上一步关键字的返回值"${和}"
注:
PY脚本、关键字、资源文件、测试用例之间的关系为:
⑴PY脚本组成关键字,关键字组成资源文件,资源文件中的关键字组成测试用例
⑵关键字通过Library关联PY脚本,测试用例(所在Suite)通过Resource关联资源文件(测试用例也可直接通过Library关联PY脚本)
RF中关键字的参数类型也有多种类型,如可以看下Log和Set Variable关键字的参数
从这两个关键字的参数可以看到,常用的参数其实和变量也是相关的,主要就是Scalar变量和List变量。而从参数分类来说,一般就是3种:必填参数、非必填(默认)参数和List参数
Log关键字里面的第一个参数message就是必填参数,只要是这种参数(后面没有默认值的)就是必填参数,即在调用时必须传入正确个数的参数
例:创建拥有两个必填参数的关键字
1、关键字拥有两个或以上的参数时:参数之间使用"|"进行分割
2、关键字参数类型为"${numberA} | ${numberB}"这样格式的表示这些参数都是必填的
3、在测试用例中调用拥有必填参数的关键字时,RF输入框会变成红色来提示需要输入必填参数
1、Log关键字里的第二个参数level=INFO就是选填参数(默认值参数),主要是因为它有一个默认值
2、默认值用"="加上值来设置,如果想默认为空,只写等号也是可以的
3、默认值的意思是:在调用这个关键字时,如果不给这个关键字的默认参数传值,那么就使用默认值作为参数的值;如果传了值则使用传入的值作为参数
4、因为参数之间使用"|"进行分割,如果参数的默认值为"|"时,就需要使用"\|"来表示值为"|"
5、关键字的默认参数必须位于必填参数之后
例:定义一个含有默认参数的关键字
1、PY脚本为
def Add(numberList,big=100):
num = 0
for number in numberList:
num = number + num
return num + big
2、定义关键字
⑴定义默认参数的格式为:${变量名}=默认值
⑵在设置关键字参数时:上面需要设置为${变量名}=默认值,下面就不需要在设置值了(表格中)为${变量名}
List变量也可以作为参数,但是List变量只能放在最后一位:List变量本身来说,它是可变的(可变参数),即List的成员数量不确定,如果放在前面的话,就没法确定传入的参数到底是给谁的
例:创建参数为List变量的关键字
1、PY脚本
def Add1(num_A,num_B,*args):
num = 0
for number in args:
num = int(number) + num
return num + int(num_A) + int(num_B)
2、关键字设置
⑴RF中在设置参数为List型时:需要使用@标识,@标识标识可变参数
⑵PY脚本中设置可变参数使用*号
⑶下面测试用例的意思为:创建一个列表并复制给变量@{list}(该变量为List型),再将变量@{list}作为参数传递给关键字"加法_随机",将关键字"加法_随机"的返回值赋值给变量@{和},其他关键字又可以继续使用这个变量
1、因为传入参数的时候可以用单值变量,也可以用List变量,那么在Return Value时也可以用单值变量和List变量
2、在将返回值赋值给变量时,一定要弄清楚变量的类型,如果弄错了变量类型,那么在运行时就回出错
例1:
PY脚本如下:函数接收的是一个列表参数(列表是作为一个值传入的)
def Add(numList,big=100):
num = 0
for number in numList:
num = int(number) + num #RF中输入的为字符串,因此需要转换下
return num + int(big)
测试用例
⑴测试用例中将创建的变量赋值为List类型:列表中有几个参数,就有几个参数(但是PY函数接收的是一个参数)
⑵下面用例之所以运行报错是因为:关键字"加法_列表"接收的是一个列表参数,但是传进来的参数@{list}是多个参数(List变量是可变参数:有几个元素就是有多少个参数)
1、在设置返回值时,也支持设置多个返回值(PY函数需要与关键字设置对应),也是使用"|"进行分割
2、知道返回值的个数比较重要,如果不确定返回值的个数,就有可能出现报错情况,因此最好使用List变量或单个变量来取值,避免出现返回值个数少于取值变量个数的情况
例:
PY脚本:Python脚本可以以列表、元组等形式一次性返回多个值
def Sub(a,b):
a = int(a)
b = int(b)
x = a - b
y = a + b
return x,y
x1 = Sub(3,1)#未分片赋值的话,就是一个元组,一个变量对应所有值组成的元组
print(x1)
x1,y1 = Sub(3,1)#分片赋值,一个变量对应一个值
print(x1,y1)
"""
(2, 4)
2 4
"""
关键字设置
测试用例
由运行结果可以看出:如果关键字的返回值只使用了一个变量来承接的话,就是一个由所有返回值组成的列表。如果使用对应个数的变量来承接返回值的话,就是一个变量对应一个值。至于返回值变量的类型由@或$确定