You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Robot Framework测试用例版本兼容执行方案咨询

解决Robot Framework版本兼容测试用例筛选问题

问题根源

Robot Framework的标签筛选仅支持字符串精确匹配、通配符匹配,不支持直接的版本号数值比较,所以robot -i version<=2.2这种写法完全无效。

可行解决方案

方案1:预运行脚本(推荐,适合大量用例)

通过Robot的--prerunmodifier参数,用Python脚本在测试执行前过滤不符合版本要求的用例:

  1. 先给测试用例补充兼容版本范围标签,比如:
    TC1 - v1.0
       [tags]  version_min=1.0  version_max=2.2
       ...
    
    TC1 - v2.0
       [tags]  version_min=3.0  version_max=99.9
       ...
    
    TC2 - v1.0
       [tags]  version_min=2.0  version_max=2.5
       ...
    
  2. 编写Python筛选脚本(比如VersionFilter.py):
    from robot.api import SuiteVisitor
    from packaging import version
    
    class VersionFilter(SuiteVisitor):
        def __init__(self, target_version):
            self.target_version = version.parse(target_version)
    
        def visit_test(self, test):
            # 提取用例的最小/最大兼容版本标签
            min_v_str = next((t.split('=')[1] for t in test.tags if t.startswith('version_min=')), None)
            max_v_str = next((t.split('=')[1] for t in test.tags if t.startswith('version_max=')), None)
            
            if min_v_str and max_v_str:
                min_v = version.parse(min_v_str)
                max_v = version.parse(max_v_str)
                # 判断当前目标版本是否在兼容范围内
                if not (min_v <= self.target_version <= max_v):
                    test.mark_skipped(f"跳过:不兼容版本 {self.target_version}")
                    # 清空用例步骤,避免执行
                    test.keywords.clear()
    
  3. 安装依赖库:pip install packaging(用于正确解析版本号,避免字符串比较的坑,比如v1.10 vs v1.2)
  4. 运行测试:
    robot --prerunmodifier VersionFilter:2.2 myTestSuite.robot
    

方案2:标签分组(适合大版本迭代)

把兼容不同大版本的用例打对应标签,比如:

  • 兼容v1.x的用例打compat_v1
  • 兼容v2.x的用例打compat_v2
  • 兼容v3.x的用例打compat_v3

测试v2.2时,运行兼容v1和v2的用例:

robot -i compat_v1 -i compat_v2 myTestSuite.robot

缺点:小版本迭代多时,标签维护成本高。

方案3:用例内条件判断(适合少量用例)

在每个测试用例开头加入版本判断逻辑,直接跳过不兼容的用例:

*** Settings ***
Library    Collections

*** Variables ***
${TARGET_VERSION}    2.2

*** Test Cases ***
TC1 - v1.0
    [Tags]    version=1.0
    ${min_compat} =    Set Variable    1.0
    ${max_compat} =    Set Variable    2.2
    # 解析版本号并比较
    ${is_ok} =    Evaluate    packaging.version.parse('${min_compat}') <= packaging.version.parse('${TARGET_VERSION}') <= packaging.version.parse('${max_compat}')
    Run Keyword If    not ${is_ok}    Skip Test    不兼容当前版本 ${TARGET_VERSION}
    # 以下是测试步骤
    Log    执行TC1-v1.0的测试逻辑

TC2 - v1.0
    [Tags]    version=2.0
    ${min_compat} =    Set Variable    2.0
    ${max_compat} =    Set Variable    2.5
    ${is_ok} =    Evaluate    packaging.version.parse('${min_compat}') <= packaging.version.parse('${TARGET_VERSION}') <= packaging.version.parse('${max_compat}')
    Run Keyword If    not ${is_ok}    Skip Test    不兼容当前版本 ${TARGET_VERSION}
    Log    执行TC2-v1.0的测试逻辑

运行时可以动态传版本变量:

robot -v TARGET_VERSION:2.2 myTestSuite.robot

缺点:每个用例都要写重复的判断逻辑,维护麻烦。

关键注意点

不要手动用字符串比较版本号(比如'1.10' > '1.2'会返回False),一定要用packaging.version这类专业库来解析和比较,保证版本判断的准确性。

内容的提问来源于stack exchange,提问作者lagarkane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:40:25