【测试框架篇】Robot Framework简介

robotframework框架

其主要分为Settings(设置区)、Test Cases(测试用例区)、KeyWords(关键词区)、Variables(变量区)

Settings 设置区

1. Documentation: 主要是用来描述这个测试套件的用途

2. Resource: 资源文件,文件类型为.robot或.resource,包括可复用的关键字、变量定义和测试用例

3. Library: 测试库,文件类型为.py文件或Java库,提供底层实现的函数/类方法

4. Variables:

5. Test Tags: 套件级标签,需要和单个测试用例标签的区分

6. Suite Setup: 测试套件初始化设置,用于定义在整个测试套件(Test Suite)开始执行前必须运行的初始化操作。

作用:

  • 初始化测试环境:创建与 BMC 的 Redfish 会话、连接数据库、启动被测系统等
  • 减少重复代码:如果多个测试用例都需要相同的初始化步骤(如登录 BMC),可以放在 Suite Setup 里,避免在每个用例中重复写。
  • 确保测试环境一致:在运行任何测试用例之前,先确保环境已准备就绪(如网络连接、API 会话、配置文件加载等)。

6. Suite Teardown: 测试套件清理机制,用于定义在整个测试套件(Test Suite)执行完毕后必须运行的清理操作。它的核心作用是 释放资源、恢复环境状态,确保测试结束后系统不会残留临时数据或占用资源。

Test Cases

每个测试用例都有名称

  • [Documentation]: 用来描述测试用例的目的
  • [Tags]: 为测试用例添加标签,便于分类和执行
  • ${rsp}: 执行IPMI命令后的返回值
  • Should Not Contain: 断言判断

举例: Should Not Contain ${rsp} 1 : 断言响应${rsp}中不包含预期错误值1,如果包含,则测试失败,说明命令执行异常

Should Contain: 断言判断

举例: Should Contain ${rsp} 1 :断言响应${rsp}中包含预期值1,如果不包含,则测试失败,说明命令执行异常

Keywords

在 Robot Framework 中,Keywords(关键字)是封装的可复用操作单元,类似于其他编程语言中的函数或方法。

  • 作用:将一系列操作(如命令执行、数据处理、断言等)封装成一个逻辑块,供测试用例或其他关键字调用
  • 优点:代码复用–避免重复代码;可读性–通过有意义的名称来提升脚本可维护性;模块化–分离测试逻辑和底层实现细节
  • 类别:用户自定义关键字和库关键字
  • [Documentation]: 描述关键字功能

在关键字可以调用自定义的关键字或者在python写的函数

易错点

Test Tags vs Tags

Test Tags:套件级标签

核心特性:

  • 作用范围:应用整个测试套件(当前.robot文件中的所有测试用例)
  • 继承性:当前.robot文件的所有测试用例会自动继承这个标签
  • 不可覆盖性:无法在单个测试用例中移除套件级标签

[Tags]: 用例级标签

核心特性:

  • 作用范围:仅应用于单个测试用例
  • 可组合性:可为每个用例定义多个标签(空格分隔)
  • 优先级:比套件级标签更具体

Robot Framework中的空格处理

在 Robot Framework 中,空格的处理规则对于关键字参数和变量解析非常重要,直接影响脚本的执行逻辑和可读性

  • 关键字参数中的空格

Robot Framework 使用`2个或更多空格`作为参数之间的分隔符。单个空格通常会被忽略(除非在字符串值内)。

  • 变量中的空格

变量赋值或引用时,空格的处理取决于上下文:

${var}    Set Variable    Hello World  # ${var} = “Hello World”(保留中间空格)
  • 字符串比较中的空格

在断言或比较时,字符串内的空格会被严格处理:

${text}    Set Variable    Hello World

Should Be Equal    ${text}    Hello World  # 通过(完全匹配,包括空格)

Should Be Equal    ${text}    HelloWorld   # 失败(缺少空格)
  • 续行符与空格

使用 … 续行时,行首的空格会被忽略,但参数内的空格保留:

${cmd}    Set Variable

…    ipmitool -H 172.25.31.141

…    -U Administrator

…    -P Admin@9000

实际值:${cmd} = “ipmitool -H 172.25.31.141 -U Administrator -P Admin@9000”(自动拼接,保留参数内空格)

字典构造语法要求

1. 嵌套字典必须逐层显示构造

2. 不能直接使用json格式的嵌套结构

3. 变量表达式中的引导需要正确处理

Suite Setup vs Test Setup

| 关键字 | 作用范围 | 执行时机 | 适用场景 |

| ------ | ------- | -------- | ------- |

| Suite Setup | 整个测试套件(所有测试用例) | 在测试套件开始前执行一次 | 全局初始化(如登录 BMC、启动服务)|

| Test Setup | 单个测试用例 | 在每个测试用例执行前运行 | 用例级别的初始化(如重置状态、清理缓存) |

.robot文件如何调用python函数

Robot Framework (RF) 本身是用 Python 编写的,因此天然支持与 Python 代码的深度交互。

直接调用Python函数(Evaluate关键字)

适用场景:临时执行简单的 Python 表达式或函数。

关键字:Evaluate(来自 BuiltIn 库

*** Test Cases ***
Call Python Function
    ${result} = Evaluate 1 + 2

    Should Be Equal ${result} 3
    ${random} = Evaluate random.randint(1,100) random
    Log Random number: ${random}

解析说明:

  • 通过 Evaluate 可以直接执行任意 Python 表达式
  • 若需使用 Python 模块(如 random),需在 Evaluate 后声明模块名(如 random)

通过 Library 导入 Python 模块

需要复用复杂的 Python 功能(如自定义工具类)

1. 创建一个Python文件,如mytools.py

def add(a, b):
   return a+b
def get_device_info():
   return {"name": "BMC", "version":"1.0"}

2. 在.robot文件中导入这个模块

*** Settings ***

Library mytools.py

*** Test Cases ***

Test Python Functions
    ${sum} = Add 2 3

    Should Be Equal ${sum} 5

    ${device} = Get Device Info

    Log Device Name: ${device\['name'\]}

解析说明:

  • Python 文件需放在 RF 的搜索路径
  • 函数名在 RF 中会被转换为 首字母大写(如 add → Add)

使用Python Library动态库

需要更灵活的库初始化或动态传参

1. 创建一个python文件,如dynamic.py

class DynamicLib:
    def __init__(self, arg1="default"):

        self.arg1=arg1

   def show_arg(self):

       return f"Arg is: {self.arg1}"

2. 在.rotbot文件中调用

*** Settings ***

Library dynamic.py arg1=Hello

*** Test Cases ***
Test Dynamic Library

    ${msg} = Show Arg

    Should Contain ${msg} Hello

通过Run Keyword调用Python脚本

场景:执行独立的python脚本并获取输出

关键字:Run(来自OperatingSystem库)


*** Test Cases ***
Run Python Script
    ${output} = Run python dynamic.py arg1

    Log  ...

常见函数

Run And Return Rc And Output

Run And Return Rc And Output 是 Robot Framework OperatingSystem 标准库提供的一个关键字,用于 执行系统命令 并同时捕获:

  • 命令的返回值(Return Code)
  • 命令的输出内容(Output)

它是调试外部命令(如 ipmitool、ping、curl)的核心工具,尤其适合验证 IPMI、SSH 或命令行工具的交互。

Set Variable

Set Variable 是 Robot Framework BuiltIn 标准库中的一个基础关键字,用于 创建或修改变量。它虽然简单,但在动态赋值、数据传递和临时存储中非常关键。

${variable_name}=    Set Variable    value

解析说明:

  • value:可以是字符串、数字、列表、字典或变量引用
  • 返回值:直接将 value 赋给 ${variable_name}

最后的最后,很重要,在qemu组件仓的test/docs目录下存放了一些和robot framework相关的资料,欢迎指正!

1 个赞