什么是用户关键字
通常的从测试库(也就是python文件)里面提供的关键字,我们叫库关键字
还可以在RF文件中实现关键字,这种关键字我们称之为用户关键字
-
用户关键字类似于RF层面的函数,把多个关键字操作组成一个“宏”关键字
-
定义好用户关键字后,该测试套件里面就可以使用该用户关键字了,就像库关键字一样
用户关键字是在用户关键字表里面的,就是rf层面的函数。
Keywords 就是把你要封装的步骤去一个名字,可以把整个用例封装成一个用户关键字,但是封装的力度太大了,灵活性就太差了
可以把经常用的封装成用户关键字,哪些动作是常用的。不做特殊处理,只能作用在当前代码文件
用户关键字可以测试用例的文件里,也可以在资源文件里,用的时候导入资源文件
资源文件
在测试套件文件中定义的关键字问题
只能在本测试套件中有效,无法共享给其他测试套件使用
使用资源文件
资源文件其实就是RF层面的库文件
-
里面可以包含用来共享的变量和关键字
-
资源文件的格式基本也和测试套件文件类似
***Settings*** Library Selenium2Library Resource rc.robot
#资源文件的后缀名也是.robot RF中找资源文件:1.先在用例所在文件的目录里找。2.再到py的搜索路径里面找。sys.path里面找。尽量用相对路径
搜索规则
-
当前用例文件所在的目录
-
如果找不到就在Python得到模块搜索路径中搜索
~~自动化如下测试用例
用例:检查添加课程功能
前置条件:系统中没有课程,
步骤 1: 添加课程,输入课程名、详情描述、展示次序为2,点击创建
预期结果:创建的课程正确显示在下面的表中。
步骤 2: 再添加一门课程,输入课程名、详情描述、展示次序为1,点击创建
预期结果:创建的课程正确显示在下面的表中,并且按照展示次序排列。
这里为了简化,我们只检查 课程名就可以了
要求:
将用例中的 登录、添加课程、检查课程, 合理使用 资源文件里面的用户关键字 实现
如果可以,将初始化、清除操作 也改为用 用户关键字实现~~
RF测试套件文件 t1.robot
*** Settings ***
Library Selenium2Library
Resource rc.robot #导入用户关键字
Suite Setup Setup WebTest
Suite Teardown TearDown WebTest #初始化清除。这里测试用例少。通常放在__init__.robot的*** settings ***表里面
*** Test Cases ***
测试1
[Setup] DeleteAllCourse auto sdfsdfsdf #py里面函数解决重复的代码,配置文件解决重复的数据,把用户名,密码,写在配置文件里面。就是一个.py文件。在rf里面定义在一个变量表的地方
Login Web Site
Add Course 初中数学 初中数学 1
${lessons}= Get Course List
Should Be True $lessons==[u'初中数学']
[Teardown] DeleteAllCourse auto sdfsdfsdf
测试2
[Setup] DeleteAllCourse auto sdfsdfsdf
Login Web Site
Add Course 初中语文 初中语文 2
${lessons}= Get Course List
Should Be True $lessons==[u'初中语文']
[Teardown] DeleteAllCourse auto sdfsdfsdf
RF资源文件 rc.robot
*** Settings ***
Library Selenium2Library
Library Collections
*** Keywords ***
Setup WebTest #初始化,打开浏览器。刚开始执行
Open Browser http://localhost chrome #后面网址参数是一定要加的
Set Selenium Implicit Wait 10
TearDown WebTest #清除,关闭浏览器。结束执行
Close Browser
DeleteAllCourse #删除课程 用户关键字
[Arguments] ${username} ${password} #调用时候,要传的参数
Login Web Site ${username} ${password} #登录谁的账号
Set Selenium Implicit Wait 2 #等价于driver.implicitly_wait(2)
:For ${one} IN RANGE 99 #rf里面没有while循环,用很大的for来表示,for后面不能加冒号
\ sleep 1
\ ${deleteButtons}= Get Webelements css:button[ng-click^='delOne'] #根据css找到所有的删除按钮
\ exit for loop if $deleteButtons==[] #如果后面的py表达式成立的话退出循环,py表达式就不需要加{}
\ Click Element @{deleteButtons}[0] #取出列表的一个变量,点击
\ Click Element css=button.btn-primary #删除之后,要点击确定
\ sleep 1
Set Selenium Implicit Wait 10
#CLOSE BROWSER #关闭浏览器,这里不需要关闭,都是在测试套件里的最后teardown里面
Login Web Site
[Arguments] ${username} ${password}
Go To http://localhost/mgr/login/login.html #访问网址
Input Text id=username auto
Input Text id=password sdfsdfsdf
Click Button tag=button
Add Course
[Arguments] ${name} ${desc} ${displayidx}
Click Element css=button[ng-click^=showAddOne]
input text css=input[ng-model='addData.name'] ${name}
input text css=textarea[ng-model='addData.desc'] ${desc}
input text css=input[ng-model='addData.display_idx'] ${displayidx}
Click Element css=button[ng-click^=addOne]
sleep 2
Get Course List
${lessons}= Create List
${eles}= get webelements css=tr>td:nth-child(2)
:FOR ${ele} IN @{eles}
\ Append To List ${lessons} ${ele.text}
[Return] ${lessons}