Robot Framework:一篇文章搞定Web、API、数据库自动化测试

Robot Framework简介与核心功能

什么是Robot Framework?

Robot Framework是一个通用的自动化测试框架,支持**关键字驱动(Keyword-Driven)行为驱动开发(BDD)**模式。它通过自然语言风格的语法编写测试用例,使得测试脚本易于阅读和维护,甚至非技术人员也能参与其中。

核心功能亮点

  • 多领域支持:覆盖Web、API、数据库、移动端、桌面应用等多种测试场景。
  • 插件化扩展:通过第三方库(如SeleniumLibrary、RequestsLibrary)轻松扩展功能。
  • 数据驱动测试:支持从外部文件(Excel、CSV)加载数据,实现参数化测试。
  • 标签管理:通过标签分类测试用例,灵活选择执行范围。
  • 自动化报告:生成详细的HTML报告和日志,便于结果分析与问题追踪。
  • 跨平台运行:兼容Windows、Linux、macOS,无缝集成CI/CD工具(如Jenkins、GitLab CI)。

快速安装与环境搭建

前提

  • 确保已安装Python 3.6+(推荐使用最新版本)。
  • 使用pip包管理工具安装Robot Framework及其常用库。

安装步骤

# 安装Robot Framework核心库
pip install robotframework

# 安装Web测试库SeleniumLibrary
pip install robotframework-seleniumlibrary

# 安装API测试库RequestsLibrary
pip install robotframework-requests

# 安装数据库测试库DatabaseLibrary
pip install robotframework-databaselibrary

验证安装

在终端输入以下命令,若显示版本号则安装成功:

robot --version

编写测试用例:Web自动化示例

创建测试文件

新建一个.robot文件(如baidu_search.robot),编写以下内容:

*** Settings ***
Library    SeleniumLibrary

*** Test Cases ***
Search for Robot Framework
    Open Browser    https://www.baidu.com    Chrome
    Input Text      name=q    Robot Framework
    Press Keys      name=q    ENTER
    Wait Until Page Contains    Results
    Close Browser

代码解析

  • Settings:引入依赖库(如SeleniumLibrary)。
  • Test Cases:定义测试步骤,使用关键字(如Open BrowserInput Text)模拟用户操作。

运行测试

在终端执行命令:

robot google_search.robot

查看报告

执行完成后,生成report.htmllog.html文件,详细展示测试结果与操作日志。


Robot Framework语法与关键字

测试文件结构

Robot Framework测试文件通常包含以下部分:

  • Settings:引入库、资源文件或定义元数据。
  • Variables:定义全局变量。
  • Test Cases:编写具体的测试用例。
  • Keywords:封装可复用的自定义关键字。
  • Tasks(RPA场景):定义自动化任务。

关键字类型

  • 内置关键字:框架原生支持,如Log(打印日志)、Should Be Equal(断言相等)。
  • 库关键字:来自第三方库,如SeleniumLibraryClick Element
  • 用户自定义关键字:通过组合现有关键字实现复杂逻辑。

变量使用

  • 标量变量${var},用于存储单个值。
  • 列表变量@{list},存储多个值。
  • 字典变量&{dict},存储键值对。

示例:

*** Variables ***
${URL}    https://example.com
@{CREDENTIALS}    admin    secret

*** Test Cases ***
Login Test
    Open Browser    ${URL}    Chrome
    Input Text      id=username    ${CREDENTIALS}[0]
    Input Password  id=password    ${CREDENTIALS}[1]

常用功能与高级用法

数据驱动测试

通过[Template]标签实现多组数据测试。

示例:验证不同用户的登录场景

*** Test Cases ***
Invalid Login Scenarios
    [Template]    Login With Invalid Credentials
    invalid_user    valid_pass    Error: User not found
    valid_user      invalid_pass    Error: Incorrect password
    ${EMPTY}        ${EMPTY}       Error: Username required

*** Keywords ***
Login With Invalid Credentials
    [Arguments]    ${username}    ${password}    ${error}
    Input Text     id=username    ${username}
    Input Password id=password    ${password}
    Click Button   Login
    Page Should Contain    ${error}

标签管理

通过[Tags]分类测试用例,灵活控制执行范围。

示例:

*** Test Cases ***
Search Product
    [Tags]    smoke    search
    # 测试步骤...

Checkout Process
    [Tags]    regression    checkout
    # 测试步骤...

运行指定标签的测试:

robot --include smoke tests.robot

并行测试

使用pabot库加速测试执行:

pip install robotframework-pabot
pabot --processes 4 tests/

自定义库开发

通过Python编写自定义关键字库(示例):

# mylibrary.py
from robot.api.deco import keyword

class MyLibrary:
    @keyword
    def generate_email(self, username):
        return f"{
      
      username}@example.com"

在测试文件中引用:

*** Settings ***
Library    mylibrary.py

*** Test Cases ***
Generate Test Email
    ${email}=    Generate Email    user123
    Log    ${email}  # 输出 [email protected]

典型应用场景与示例

Web自动化测试(SeleniumLibrary)

*** Settings ***
Library    SeleniumLibrary

*** Test Cases ***
Add Product to Cart
    Open Browser    https://shop.example.com    Chrome
    Input Text      id=search    Laptop
    Click Element   css=.search-button
    Wait Until Page Contains    Laptop
    Click Element   css=.add-to-cart
    Element Should Contain    css=.cart-count    1
    Close Browser

API测试(RequestsLibrary)

*** Settings ***
Library    RequestsLibrary

*** Test Cases ***
Get User Details
    Create Session    api    https://api.example.com
    ${response}=    GET On Session    api    /users/1
    Status Should Be    200    ${response}
    ${json}=    Set Variable    ${response.json()}
    Should Be Equal    ${json["name"]}    John Doe

数据库验证(DatabaseLibrary)

*** Settings ***
Library    DatabaseLibrary

*** Test Cases ***
Check Orders Count
    Connect To Database    pymysql    dbname=orders    user=root    password=secret
    ${count}=    Row Count    SELECT * FROM orders WHERE status='completed'
    Should Be True    ${count} >= 10

RPA自动化(RPA Framework)

*** Settings ***
Library    RPA.Browser

*** Tasks ***
Download Report
    Open Available Browser    https://internal.site.com
    Input Text    id=username    admin
    Input Password    id=password    secret
    Click Button    Login
    Download    link=Monthly Report
    Close Browser

集成CI/CD与最佳实践

与Jenkins集成

在Jenkins中配置Robot Framework插件,添加构建步骤:

robot --outputdir results/ tests/

猜你喜欢

转载自blog.csdn.net/zhangkexin_z/article/details/145828870
今日推荐