Robot Framework10-RF初始化和清除

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 SetupSuite TeardownTest SetupTest Teardown

Suite SetupSuite Teardown:进入和退出这个suite执行用例前后必须执行且只分别执行一次

Test SetupTest 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主体部分
测试套件文件初始化操作.png
05:测试套件目录初始化和清除

1)针对一个目录中所有的用例

2)测试套件目录的SetupTeardown 在其目录下的配置文件__init__.txt 或者__init__.robot里的settings表中

3)测试套件文件有两种类型的Setup 和Teardown

Suite SetupSuite Teardown:进入和退出这个suite执行用例前后必须执行且只分别执行一次

Test SetupTest 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

你可能感兴趣的:(Robot Framework10-RF初始化和清除)