RF里面除了循环以外,另一个流程控制的基本功能就是条件判断。本篇将对RF初始化和清除进行展开讲解,主要包括“Setup和Teardown基本介绍以及初始化清除的三种级别(测试用例,测试套件,测试目录)等”。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!
01:本节内容介绍
02:Setup和Teardowng概述
1)Setup:初始化操作,一个用例(或者套件)执行前准备测试环境。比如说测试登录,需要先注册好一个用户。
2)Teardown:清除操作,用例执行后恢复测试环境 ; 是否执行Teardown主要看用例执行后的结果是否会影响下面要执行的用例
3)目的:保证自动化程序能够顺利运行所需的环境
4)注意事项:
①在RF中,每个测试套件目录、测试套件文件、测试用例都可以有自己的Setup和Teardown
②所有的Setup和Teardown操作都只能由一个关键字语句构成
③不管用例执行成功还是失败,Teardown肯定会执行;但初始化失败则里面的用例都不会被执行
④尽量注意用例与用例之间相互不影响且少耦合
⑤若需要使用自定义库的关键字,需要先导入
03:测试用例初始化和清除操作
1)只针对一条测试用例而言
2)用例的初始化和清除,写在测试用例表的配置项中,也就是方括号部分
*** Test Cases ***
case01:
#只针对一条测试用例而言
[Documentation] 测试用例中申明初始化和清除操作
[Setup] log to console ${\n}***测试用例1Setup***
log to console 测试用例1主体部分
[Teardown] log to console ${\n}***测试用例1Teardown***
04:测试套件文件初始化和清除操作
1)针对一个套件里面所有的用例的,而且只需要做一次
2)写在测试套件文件的Setting表中
3)测试套件文件有两种类型的setup 和teardown:①
Suite Setup
和Suite Teardown
②Test Setup
和Test Teardown
①
Suite Setup
和Suite Teardown
:进入和退出这个suite执行用例前后必须执行且只分别执行一次②
Test Setup
和Test Teardown
:如果suite内的用例本身没有 setup/teardown才执行; 可以执行多次也可以一次也不执行
*** Settings ***
Suite Setup log to console ${\n}***Suite测试套件文件Setup ***
Suite Teardown log to console ${\n}***Suite测试套件文件Teardown ***
Test Setup log to console ${\n}***Test测试套件文件Setup ***
Test Teardown log to console ${\n}***Test测试套件文件Teardown ***
*** Test Cases ***
case02:
[Documentation] 测试用例中申明初始化和清除操作
[Setup] log to console ${\n}***测试用例1Setup***
[Teardown] log to console ${\n}***测试用例1Teardown***
case03:
log to console 测试用例2主体部分
05:测试套件目录初始化和清除
1)针对一个目录中所有的用例
2)测试套件目录的SetupTeardown 在其目录下的配置文件
__init__.txt
或者__init__.robot
里的settings表中3)测试套件文件有两种类型的Setup 和Teardown
①
Suite Setup
和Suite Teardown
:进入和退出这个suite执行用例前后必须执行且只分别执行一次②
Test Setup
和Test Teardown
:如果suite内的用例或者子套件没有 setup/teardown才执行; 可以执行多次也可以一次也不执行4)原则:
就近原则
如果测试套件文件本身已经定义则先执行自身定义的初始化;后执行测试目录中的初始化和清除5)既想执行目录中的初始化清除又想执行测试套件文件的初始化清除,该如何做呢?
①执行测试套件目录中的测试套件文件st1:
robot --s st1 suite1
②指定测试套件文件中的测试用例case01:
robot --t case01 suite1
06:初始化清除同时执行多个关键字
用例执行过程中初始化清除的操作有时候不止一个关键字,此时需要如何处理呢?
方法一:将多个关键字封装为一个关键字
- 在robot中直接封装
- 在python中封装(函数)
方法二:使用
run keywords
后直接应用多个关键字,每个关键字之间用AND连接(此处AND必须是大写)。
*** Settings ***
Library SeleniumLibrary
*** Test Cases ***
case04:
[Documentation] 初始化清除同时执行多个关键字
[Setup] run keywords close all browsers AND log to console ${\n}初始化 AND log to console YY
[Teardown] run keywords close all browsers AND log to console ${\n}清除 AND log to console YY
open browser https://www.jianshu.com/u/6d2b65c8aad2 chrome
${title} get title
log to console ${\n}${title}
07:初始化和清除实例化操作
(1)需求:创建一个RF测试套件,包含下面的一个用例
①用例名称:验证当系统中没有课程的时候,是否能成功添加一个课程
②前置条件:系统中没有课程
③测试步骤:添加课程,输入课程名、详情描述、展示次序,点击创建
④预期结果:创建的课程正确显示在下面的课程列表中
(2)函数deleteAllLesson如下:
from selenium import webdriver
import time
def deleteAllLesson():
driver=webdriver.Chrome()
driver.implicitly_wait(5)
driver.get('http://localhost/mgr/login/login.html')
driver.find_element_by_id('username').send_keys('auto')
driver.find_element_by_id('password').send_keys('sdfsdfsdf')
driver.find_element_by_css_selector('[class="btn btn-success"]').click()
driver.implicitly_wait(1)
while True:
del_buttons = driver.find_elements_by_css_selector('[ng-click="delOne(one)"]')
if del_buttons==[]:
break
del_buttons[0].click()
driver.find_element_by_css_selector('[class="btn btn-primary"]').click()
time.sleep(1)
driver.quit()
if __name__ == '__main__':
deleteAllLesson()
(3)需求实现代码如下:
*** Settings ***
Library SeleniumLibrary
Library deleteAllLesson
Suite Setup deleteAllLesson
Suite Teardown deleteAllLesson
*** Test Cases ***
case1
#登录
open browser http://localhost/mgr/login/login.html chrome
set selenium implicit wait 5
input text id:username auto
input text id:password sdfsdfsdf
click element tag:button
#增加课程
click element css:[class="glyphicon glyphicon-plus"]
input text css:[ng-model="addData.name"] 初中地理
input text css:[ng-model="addData.desc"] 初中地理基础知识
input text css:[ng-model="addData.display_idx"] 1
click element css:[ng-click="addOne()"]
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]
should be true $expect == ['初中地理']
close browser