非Selenium环境下,如何在Robot Framework/Python实现用例并行执行?
并行执行Robot Framework测试用例的方案(非Selenium场景)
完全理解你的痛点——当测试用例数量庞大时,串行执行确实会拖慢整个测试周期。好在不管是Robot Framework生态还是Python本身,都有成熟的并行执行方案,而且完全适配非Selenium的测试场景,下面给你详细拆解:
方案一:用Pabot(Robot官方推荐的并行工具)
Pabot是专门为Robot Framework打造的并行执行工具,它能自动拆分测试用例/文件,分配到不同进程并行运行,无需修改原有测试代码,上手成本很低。
步骤1:安装Pabot
用pip直接安装:
pip install pabot
步骤2:基础并行执行示例
如果你想并行运行整个测试套件下的所有测试文件,直接用pabot命令替代robot命令即可:
pabot --processes 4 ./your_test_suite
这里--processes 4指定用4个进程并行,你可以根据机器CPU核心数调整(一般设为CPU核心数的1-2倍)。
步骤3:更精细的控制(按标签/用例分组)
如果想按测试用例的标签来分组并行,比如只运行带@smoke标签的用例并并行:
pabot --processes 3 --include smoke ./your_test_suite
或者按测试文件拆分,确保每个文件在单独进程运行:
pabot --processes 5 --testlevelsplit ./your_test_suite
方案二:Python自定义并行(用Robot Framework的Python API)
如果需要更灵活的并行逻辑(比如自定义用例分组、执行前后的复杂操作),可以用Python的多进程库(比如multiprocessing或concurrent.futures)调用Robot Framework的Python API来实现。
示例代码:
from concurrent.futures import ProcessPoolExecutor from robot import run # 定义要并行执行的测试文件/用例列表 test_items = [ "./tests/test_case_1.robot", "./tests/test_case_2.robot", "./tests/test_case_3.robot", "./tests/test_case_4.robot" ] def run_robot_test(test_path): # 调用Robot的run方法执行单个测试项,每个测试生成独立输出文件 return run(test_path, output=f"output_{test_path.split('/')[-1].replace('.robot', '')}.xml") if __name__ == "__main__": # 用4个进程并行执行 with ProcessPoolExecutor(max_workers=4) as executor: results = executor.map(run_robot_test, test_items) # 收集并查看测试结果 for idx, result in enumerate(results): print(f"测试项{idx+1}执行结果码: {result}")
这个脚本会把每个测试文件分配到单独的进程执行,每个测试都生成独立的输出文件,避免串行时的输出覆盖问题。
注意事项
- 确保你的测试用例是无状态的——也就是用例之间不共享全局变量、文件锁等资源,否则并行时会出现竞争条件导致失败。
- 如果测试用例需要读写同一个文件,一定要加锁(比如Python的
multiprocessing.Lock),或者为每个进程分配独立的文件路径。 - Pabot默认会处理输出文件的隔离与合并,而Python自定义方案需要你自己处理输出文件的命名,避免冲突。
内容的提问来源于stack exchange,提问作者user5717949
相关产品推荐
相关产品推荐

