在实际工作中会涉及到很多的配置文件,资源文件,测试库等。如何安排它们比较好呢?这将是本篇文章叙述的重点,本篇将对RF目录结构进行展开讲解,包括“select from list by label和run keywords关键字使用,以及RF合理化处理目录结构”。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!
01:本节内容介绍
RF目录结构思维导图png
02:select from list by label
1)关键字含义:按索引从选择列表定位器中选择选项
2)关键字参数:
locator, *indexes
03:run keywords
1)关键字含义:按顺序执行所有给定的关键字
2)关键字参数:
*keywords
3)注意事项:每个关键字之间用AND连接(此处AND必须是大写)
04:自动化项目的目录结构
1)目前已经接触到项目文件种类
- 测试套件文件、目录
- RF资源文件
- 测试库
- 变量文件
2)如何根据文件类型进行合理化处理目录结构,建议的目录结构如下:
RF目录结构.png
- config:一般用来写全局配置文件(比如说变量文件)
- p y lib:一般用来存放测试库(比如python模块文件)
- r f l i b:一般用来存放资源文件(比如用户关键字)
- tc:test case简称。一般用来放测试用例主体(比如测试套件文件,目录)
3)注意:导入相关资源文件时,注意模块搜索路径(从项目根目录往后)
04:RF目录结构实例化
(1.1)要求1:初始化清除工作,包括关键字的实现在RF资源文件中实现
(1.2)要求2:用例放在不同的测试套件目录中。即:一个是‘课程管理’目录,一个是‘老师管理’目录
(2.1)添加课程功能(前置条件:系统中没有课程)
step1: 添加课程,输入课程名、详情描述、展示次序为1,点击创建
(3.1)添加老师功能(前置条件:系统中没有老师,已经有课程 ‘初中语文’,‘初中数学’)
step 1: 添加老师,输入老师姓名、登录名、描述、展示次序为2,选择课程 ‘初中语文’
step 2: 再添加一个老师,展示次序为1,选择课程 ‘初中数学’
1)RF资源文件(keyword关键字)代码如下:
*** Settings ***
Library SeleniumLibrary
*** Variables ***
${MgrLoginUrl} http://localhost/mgr/login/login.html
&{user} name=auto pw=sdfsdfsdf
*** Keywords ***
login
go to ${MgrLoginUrl}
input text id:username &{user}[name]
input text id:password &{user}[pw]
click element tag:button
addCourse
[Arguments] ${name} ${desc} ${display_idx}
click element css:[ui-sref="course"]
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}
click element css:[ui-sref="course"]
${eles} get webelements xpath://td[2]
FOR ${ele} IN @{eles}
log to console ${ele}
END
${expect} evaluate [ele.text for ele in $eles]
deleteAllLesson
click element css:[ui-sref="course"]
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 2
END
${expect} listcourse
set selenium implicit wait 1
should be true $expect==[]
setup webtest
open browser http://localhost chrome
set selenium implicit wait 5
teardown webtest
close browser
addTeacher
[Arguments] ${realname} ${username} ${desc} ${display_idx} ${course}
click element css:[ui-sref="teacher"]
click element css:[ng-click="showAddOne=true"]
input text css:[ng-model="addEditData.realname"] ${realname}
input text css:[ng-model="addEditData.username"] ${username}
input text css:[ng-model="addEditData.desc"] ${desc}
input text css:[ng-model="addEditData.display_idx"] ${display_idx}
select from list by label css:[ng-model*="courseSelected"] ${course}
click element css:[ng-click*="addTeachCourse"]
click element css:[ng-click="addOne()"]
sleep 1
listTeacher
[Return] ${expect}
click element css:[ui-sref="teacher"]
sleep 1
${eles} get webelements xpath://td[2]
FOR ${ele} IN @{eles}
log to console ${ele}
END
${expect} evaluate [ele.text for ele in $eles]
deleteAllTeacher
click element css:[ui-sref="teacher"]
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 2
END
${expect} listTeacher
set selenium implicit wait 1
should be true $expect==[]
2)打开和关闭浏览器初始化和清除操作代码如下(A文件夹下的init.robot):
*** Settings ***
Resource rflib/rc.robot
Suite Setup Setup WebTest
Suite Teardown Teardown WebTest
3)输入账号密码初始化操作代码如下(B文件夹下的init.robot):
*** Settings ***
Resource rflib/rc.robot
Suite Setup Login
4)课程管理代码如下:
*** Settings ***
Resource rflib/rc.robot
Test Setup deleteAllLesson
Test Teardown deleteAllLesson
*** Test Cases ***
case1
#增加课程
addCourse 初中地理 初中地理基础知识 1
#获取课表内容
${expect} listCourse
should be true $expect == ['初中地理']
5)老师管理代码如下:
*** Settings ***
Library SeleniumLibrary
Resource rflib/rc.robot
*** Test Cases ***
case1
[Setup] run keywords deleteAllTeacher
... AND deleteAllLesson
... AND addCourse 初中语文 初中语文基础知识 1
... AND addCourse 初中数学 初中数学基础知识 2
addTeacher 小媛 yuanyuan 媛媛老师 2 初中语文
addTeacher 小羊 yangyang 羊羊老师 1 初中数学
${teacher} listTeacher
should be true $teacher==['小羊','小媛']
[Teardown] run keywords deleteAllTeacher AND deleteAllLesson
以robot --pythonpath . tc 命令执行tc用例下面所有的测试用例