Robot Framework测试用例版本兼容执行方案咨询
解决Robot Framework版本兼容测试用例筛选问题
问题根源
Robot Framework的标签筛选仅支持字符串精确匹配、通配符匹配,不支持直接的版本号数值比较,所以robot -i version<=2.2这种写法完全无效。
可行解决方案
方案1:预运行脚本(推荐,适合大量用例)
通过Robot的--prerunmodifier参数,用Python脚本在测试执行前过滤不符合版本要求的用例:
- 先给测试用例补充兼容版本范围标签,比如:
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 ... - 编写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() - 安装依赖库:
pip install packaging(用于正确解析版本号,避免字符串比较的坑,比如v1.10 vs v1.2) - 运行测试:
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
相关产品推荐
相关产品推荐

