如何基于JSON文件条件自动执行对应Robot Framework脚本
Robot Framework下按JSON文件数量触发对应脚本的实现方案
你可以选以下两种可直接落地的方案,不需要额外安装第三方依赖:
方案1:纯Robot脚本调度(符合框架原生使用习惯)
直接编写一个入口调度Robot文件作为统一执行入口,核心逻辑是先等待Python脚本生成的JSON文件写入稳定,再统计数量做条件分支:
*** Settings *** Library OperatingSystem *** Variables *** # 替换为实际存放生成JSON文件的文件夹路径 ${JSON_SAVE_DIR} ./output_json ${MAX_WAIT_TIME} 30s ${CHECK_INTERVAL} 2s *** Test Cases *** Auto Trigger Corresponding Test Suite # 如果需要调度器自动触发JSON生成的Python脚本,取消下一行注释替换成实际脚本路径 # Run python your_json_generate_script.py Wait Until Keyword Succeeds ${MAX_WAIT_TIME} ${CHECK_INTERVAL} Verify JSON Write Finish ${json_num} Count JSON Files In Dir IF $json_num == 1 Run robot --loglevel TRACE Timeautomation.robot ELSE IF $json_num == 2 Run robot --loglevel TRACE Timeautomation1.robot ELSE Fail 当前检测到${json_num}个JSON文件,不符合预期的1/2个,执行终止 END *** Keywords *** Count JSON Files In Dir ${all_files} List Files In Directory ${JSON_SAVE_DIR} ${json_files} Get Matching Items ${all_files} *.json [Return] ${len(json_files)} Verify JSON Write Finish ${first_count} Count JSON Files In Dir Sleep 1s ${second_count} Count JSON Files In Dir IF $first_count != $second_count Fail JSON文件仍在生成中,继续等待 END
使用注意事项:
- 等待文件写入稳定的逻辑是为了避免Python脚本还没写完文件就开始统计,导致数量判断错误,可根据自己脚本生成文件的实际速度调整超时和间隔参数
- 如果Python脚本需要调度器自动触发,删掉脚本里对应Run命令的注释替换成实际脚本路径即可,不需要额外手动执行Python脚本
方案2:Python轻量调度(适合后续扩展复杂逻辑)
如果后续需要加文件内容校验、多分支判断等更复杂的逻辑,可以直接写一个极简Python脚本作为执行入口,逻辑更直观:
import os import time import glob import subprocess JSON_DIR = "./output_json" # 执行生成JSON的Python脚本,替换为实际脚本路径 subprocess.run(["python", "your_json_generate_script.py"], check=True) # 等待文件写入完成 last_count = -1 while True: current_count = len(glob.glob(os.path.join(JSON_DIR, "*.json"))) if current_count == last_count and current_count in (1, 2): break last_count = current_count time.sleep(1) # 执行对应Robot命令 run_cmd = ["robot", "--loglevel", "TRACE", "Timeautomation.robot"] if current_count == 1 \ else ["robot", "--loglevel", "TRACE", "Timeautomation1.robot"] subprocess.run(run_cmd, check=True)
这个方案的优势是逻辑修改更灵活,不需要记忆Robot内置关键字的用法,适合有Python基础的场景。
内容的提问来源于stack exchange,提问作者Nikhil
相关产品推荐
相关产品推荐

