Robot Framework + Selenium 中测试套件和测试用例级别的 Setup/Teardown 使用场景

测试场景描述

测试一个电商网站的功能:

  1. 用户登录功能

  2. 商品搜索功能

  3. 购物车管理功能

项目结构

1. 测试套件级别的 Setup/Teardown

在 __init__.robot 文件中定义:

*** Settings ***
Suite Setup       Global Suite Setup
Suite Teardown    Global Suite Teardown
Resource          resources/common_keywords.robot
Variables         resources/variables.py

*** Keywords ***
Global Suite Setup
    [Documentation]    整个测试套件的初始化操作
    Log    正在执行全局套件初始化...
    Open Browser    ${BASE_URL}    ${BROWSER}
    Maximize Browser Window
    Set Selenium Timeout    10 seconds
    ${timestamp}=    Get Current Date
    Set Suite Variable    ${SUITE_START_TIME}    ${timestamp}
    Log    浏览器已打开,准备开始测试套件

Global Suite Teardown
    [Documentation]    整个测试套件的清理操作
    Log    正在执行全局套件清理...
    Close All Browsers
    ${end_time}=    Get Current Date
    ${duration}=    Subtract Date From Date    ${end_time}    ${SUITE_START_TIME}
    Log    测试套件执行完成,总耗时: ${duration}秒
    Log To Console    \n测试套件执行完成!\n

测试套件 Setup/Teardown 使用场景:

  • ✅ 全局浏览器管理(打开/关闭浏览器)

  • ✅ 设置全局超时时间

  • ✅ 记录套件执行时间

  • ✅ 初始化全局变量

  • ✅ 清理所有测试共用的资源

2. 测试用例文件级别的 Setup/Teardown

在 login_tests.robot 文件中定义:

*** Settings ***
Test Setup       Login Test Setup
Test Teardown    Login Test Teardown
Resource         resources/common_keywords.robot
Variables        resources/variables.py

*** Keywords ***
Login Test Setup
    [Documentation]    登录测试的初始化操作
    Log    正在准备登录测试环境...
    Go To    ${LOGIN_URL}
    Wait Until Page Contains Element    id=login-form    5s
    Capture Page Screenshot    login_setup_{index}.png
    
Login Test Teardown
    [Documentation]    登录测试的清理操作
    Log    正在清理登录测试环境...
    Run Keyword If Test Failed    Capture Page Screenshot    login_failed_{index}.png
    Clear Browser Cookies
    Go To    ${LOGOUT_URL}
    Wait Until Page Contains    您已成功登出    3s

3. 测试用例级别的 Setup/Teardown

在 cart_tests.robot 文件中定义:

*** Test Cases ***
Add Item To Cart
    [Documentation]    测试添加商品到购物车
    [Setup]    Add To Cart Setup
    [Teardown]    Add To Cart Teardown
    
    Click Element    id=add-to-cart-btn
    Wait Until Page Contains    已添加到购物车    3s
    Element Should Be Visible    css=.cart-notification
    
    # 验证购物车数量
    ${cart_count}=    Get Text    id=cart-item-count
    Should Be Equal As Integers    ${cart_count}    1
    
Remove Item From Cart
    [Documentation]    测试从购物车移除商品
    [Setup]    Add To Cart Setup
    [Teardown]    Add To Cart Teardown
    
    Click Element    id=add-to-cart-btn
    Wait Until Page Contains    已添加到购物车    3s
    
    # 进入购物车
    Go To    ${CART_URL}
    Click Element    css=.remove-item-btn
    Wait Until Page Contains    购物车已空    5s
    Page Should Contain    您的购物车是空的

*** Keywords ***
Add To Cart Setup
    [Documentation]    购物车测试的初始化操作
    Log    准备购物车测试环境...
    Login With Valid Credentials
    Search For Product    Robot Framework Book
    Select First Search Result
    
Add To Cart Teardown
    [Documentation]    购物车测试的清理操作
    Log    清理购物车测试环境...
    Clear Shopping Cart
    Run Keyword If Test Failed    Capture Page Screenshot    cart_failed_{index}.png

4. 公共关键字文件 (resources/common_keywords.robot)

*** Keywords ***
Login With Valid Credentials
    [Arguments]    ${username}=${VALID_USER}    ${password}=${VALID_PASS}
    Go To    ${LOGIN_URL}
    Input Text    id=username    ${username}
    Input Password    id=password    ${password}
    Click Button    id=login-btn
    Wait Until Page Contains    欢迎回来    5s

Search For Product
    [Arguments]    ${search_term}
    Input Text    id=search-box    ${search_term}
    Press Keys    id=search-box    ENTER
    Wait Until Page Contains    搜索结果    5s

Select First Search Result
    Click Element    css=.search-results li:first-child
    Wait Until Page Contains    商品详情    5s

Clear Shopping Cart
    Go To    ${CART_URL}
    ${item_count}=    Get Element Count    css=.cart-item
    FOR    ${index}    IN RANGE    ${item_count}
        Click Element    css=.remove-item-btn:first-child
        Wait Until Element Is Not Visible    css=.remove-item-btn:first-child    5s
    END

5. 变量文件 (resources/variables.py)

# 环境配置
BROWSER = "chrome"
BASE_URL = "https://www.example-shop.com"

# 页面URL
LOGIN_URL = f"{BASE_URL}/login"
LOGOUT_URL = f"{BASE_URL}/logout"
CART_URL = f"{BASE_URL}/cart"

# 测试账号
VALID_USER = "test_user@example.com"
VALID_PASS = "secure_password_123"

执行流程说明

测试套件执行顺序:

具体执行顺序示例:
  1. 测试套件 Setup (__init__.robot)

    • 打开浏览器

    • 最大化窗口

    • 设置超时时间

  2. 执行 login_tests.robot 文件

    • 文件级别 Setup (每个测试用例前执行)

      • 导航到登录页

      • 等待登录表单加载

    • 执行登录测试用例

    • 文件级别 Teardown (每个测试用例后执行)

      • 清除cookies

      • 执行登出

  3. 执行 cart_tests.robot 文件

    • 测试用例级别 Setup (仅针对特定用例)

      • 登录用户

      • 搜索商品

      • 选择商品

    • 执行添加商品到购物车测试

    • 测试用例级别 Teardown

      • 清空购物车

      • 失败时截图

  4. 测试套件 Teardown (__init__.robot)

    • 关闭所有浏览器

    • 计算执行时间

不同级别 Setup/Teardown 使用场景总结

级别Setup 使用场景Teardown 使用场景执行频率
测试套件- 打开浏览器
- 设置全局超时
- 初始化全局变量
- 关闭浏览器
- 生成报告摘要
- 清理全局资源
整个套件执行一次
测试文件- 导航到模块首页
- 准备模块测试环境
- 登录
- 模块级别清理
- 登出用户
- 失败截图
文件中每个用例执行前
测试用例- 准备特定测试数据
- 进入特定状态
- 预置条件
- 清理测试数据
- 恢复初始状态
- 验证后置条件
仅针对特定用例

最佳实践建议

  1. 层级选择原则

  2. Teardown 注意事项

    • 总是处理失败场景(如失败截图)

    • 清理操作要有容错机制(如使用 Run Keyword And Ignore Error

    • 恢复环境到初始状态

  3. 避免常见错误

    • 不要在套件Setup中做用例级别的初始化

    • 避免在Setup中包含业务逻辑

    • Teardown中不要包含关键断言

  4. 高级技巧

    *** Test Cases ***
    Advanced Teardown Example
        [Teardown]    Run Keywords
        ...    Run Keyword If Test Failed    Capture Full Page Screenshot
        ...    AND    Clear Test Data
        ...    AND    Restore Default Settings

通过合理使用不同级别的 Setup/Teardown,可以使测试代码更清晰、更易维护,同时确保测试环境的正确初始化和清理,提高测试的稳定性和可靠性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值