
本文介绍在 robot framework 中不依赖标签(tags)机制,仅通过 `-t` 参数组合匹配的方式,实现“运行某个具体测试用例 + 运行整个测试套件”并行执行的实用技巧。
Robot Framework 的命令行参数中,-s(--suite)和 -t(--test)默认是互斥过滤逻辑:当同时使用多个 -s 或混用 -s 与 -t 时,框架会取它们的交集(AND),而非并集(OR)。这也是你执行 robot -s d2 -t case10 -s d1 mytestcase 时只运行 case10、而 d2 下所有用例被忽略的根本原因——Robot 按照“属于 suite d1 且 名为 case10”来筛选,自然排除了 d2 中的用例。
✅ 正确解法:统一使用 -t,借助 Robot 的“全名匹配规则”实现逻辑并集
Robot Framework 中每个测试用例的完整名称(full name) 格式为:ParentSuite.SubSuite.TestCaseName(多级目录对应点分隔的层级结构)。例如:
- d1.f1.case10
- d2.f2.case20
- d2.f2.case21
- d3.f3.case30
因此,你可以用通配符 * 精准匹配:
- -t case10 → 匹配所有名为 case10 的用例(如 d1.f1.case10)
- -t *d2.f2* → 匹配所有父级路径包含 d2.f2 的用例(即 d2/f2.robot 中全部用例)
? 注意:*d2.f2* 中的 * 是 Shell 通配符,会被 shell 展开;为避免意外解析,强烈建议用单引号包裹,确保原样传给 Robot。
✅ 最终推荐命令:
robot -t 'case10' -t '*d2.f2*' mytestcase
✅ 验证效果:
- ✅ d1/f1.robot 中的 case10 被执行
- ✅ d2/f2.robot 中所有用例(case20, case21, …)均被执行
- ❌ d3/f3.robot 及 d1 中其他用例(如 case11)被自动排除
? 补充说明与注意事项:
- 不要混用 -s 和 -t 实现“多目标执行”,这是设计限制,非 bug;
- 若目录/文件名含空格或特殊字符(如 my tests),务必用引号包裹路径,如 'my tests';
- *d2.f2* 本质是模糊匹配,若存在 d2x.f2x 等相似命名,可能误匹配——此时可改用更精确模式,如 -t 'd2.f2.*'(需 Robot Framework ≥ 6.0,支持正则风格通配);
- 该方法完全绕过标签系统,适用于无法修改 .robot 文件(如第三方测试集)、或组织策略禁止打标等场景。
? 总结:Robot Framework 的 -t 参数能力远超字面意义——它支持基于全限定测试名的灵活模式匹配。善用 * 通配与层级命名约定,即可在不侵入测试代码的前提下,实现高度定制化的执行调度。










