对于可以复用或者有相同逻辑的代码我们如何解决呢?最好的办法就是封装,那么RF是否可以封装成不同的关键字呢?这将是本篇文章的重点。本篇将对RF用户关键字和资源文件进行展开讲解,主要包括“用户关键字和资源文件基本介绍以及如何定义和使用等”。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!
01:本节内容介绍
02:用户关键字概述
1)库关键字:通常从测试库(即python文件)里面提供的关键字,叫做库关键字。
2)用户关键字:在RF文件中实现关键字,称之为用户关键字。
- 用户关键字类似于RF层面的函数,把多个关键字操作组成一个“宏”关键字。
- 定义好用户关键字后,该测试套件里面就可以使用该用户关键字了,就像使用库关键字一样。
3)定义用户关键字:
Keywords表
就是定义用户关键字的。
- 先创建一个关键字表并创建关键字名称
- 用户关键字的定义和定义一个用例写法很像
- 参数支持
[Arguments]
和返回值[Return]
** Keywords *** 关键字名称 将某一个功能封装成一个关键字。比如说“登录教管系统”
4)在测试套件文件中定义关键字缺点:只能在本测试套件中有效,无法共享给其他测试套件使用。
5)解决办法:使用资源文件
上节内容中“
验证当系统中没有课的时,是否能成功添加一个课程
”的代码从库文件关键字定义成用户关键字
实现如下:
***** keywords ***
login
[Arguments] ${username} ${password}
open browser http://localhost/mgr/login/login.html chrome
set selenium implicit wait 5
input text id:username ${username}
input text id:password ${password}
click element tag:button
addCourse
[Arguments] ${name} ${desc} ${display_idx}
click element css:[class="glyphicon glyphicon-plus"]
input text css:[ng-model="addData.name"] ${name}
input text css:[ng-model="addData.desc"] ${desc}
input text css:[ng-model="addData.display_idx"] ${display_idx}
click element css:[ng-click="addOne()"]
sleep 1
listCourse
[Return] ${expect}
${eles}= get webelements xpath://td[2]
FOR ${ele} IN @{eles}
log to console ${ele}
END
${expect} evaluate [ele.text for ele in $eles]
deleteAllLesson
login auto sdfsdfsdf
set selenium implicit wait 1
FOR ${i} IN RANGE 9999
${del_buttons}= Get Webelements css:[ng-click="delOne(one)"]
exit for loop if $del_buttons==[]
evaluate $del_buttons[0].click()
click element css:[class="btn btn-primary"]
sleep 1
END
${expect} listcourse
set selenium implicit wait 1
should be true $expect==[]
close browser
03:资源文件
1)概述:资源文件其实就是RF层面的库文件,里面可以包含用来共享的变量和关键字
2)引入目的:解决“
只能在本测试套件中有效,无法共享给其他测试套件使用
”问题3)创建资源文件:资源文件就是一个robot文件,格式基本和测试套件文件格式类似。
4)引用资源文件:
Resource rc.robot
(文件名需要加后缀名)5)搜索规则:当前用例文件所在的目录,如果找不到就在python的模块搜索路径中搜索
6)注意事项:资源文件中不能有测试用例表
将
之前定义的关键字内容拷贝到rc.robot资源文件中
的代码实现如下:
*** Settings ***
Library deleteAllLesson
Resource rc.robot
Test Setup deleteAllLesson
Test Teardown deleteAllLesson
*** Test Cases ***
case1
#登录
login auto sdfsdfsdf
#增加课程
addCourse 初中地理 初中地理基础知识 1
#获取课表内容
${expect} listCourse
should be true $expect == ['初中地理']
close browser