如何使用Robot Framework获取进程ID?解决Start Process与POST Request参数冲突报错问题
问题分析与修正方案
你这里的核心问题是把Process库和RequestsLibrary的关键字完全搞混了!Start Process是Process库用来启动本地系统进程(比如打开一个.exe程序)的工具,根本不是用来发送HTTP POST请求的——所以你把data、headers这些HTTP请求参数传给它,自然会抛出'data' is not supported by this keyword的错误。
结合你的代码逻辑,你实际是想调用API接口/api/processing/executeNow来触发任务,然后获取该任务的进程ID。这时候应该用RequestsLibrary的HTTP请求关键字来实现,以下是修正后的代码:
Get pid [Arguments] ${session} ${token} ${domain} ${task_name} ${params}=${EMPTY} &{headers} = Create Dictionary Content-Type=application/x-www-form-urlencoded domain=${domain} Accept=application/json Authorization=${token} ${current_date} = Get Current Date result_format=%Y%m%d &{data} = Create Dictionary id=${task_name} hold=false processingTimestamp=${current_date} parameters=${params} # 用RequestsLibrary的Post Request发送HTTP请求,替代错误的Start Process ${response} = Post Request ${session} /api/processing/executeNow data=${data} headers=${headers} # 从接口返回的JSON响应中提取进程ID(请根据实际返回字段调整键名) ${pid} = Get From Dictionary ${response.json()} pid [Return] ${pid}
额外说明:
- 确认接口返回字段:要保证你调用的
/api/processing/executeNow接口返回的JSON数据里,确实包含进程ID的字段(比如pid、processId等),如果字段名和示例里的pid不一样,记得修改Get From Dictionary里的键名。 - 会话准备:确保你的
${session}是之前通过Create Session创建好的有效会话,比如在测试套件里的设置如下:
*** Settings *** Library RequestsLibrary *** Test Cases *** Demo Get PID ${session} = Create Session TaskSession https://your-api-base-domain.com ${task_pid} = Get pid ${session} ${your_auth_token} ${your_domain} ${target_task_name} Log Successfully got task PID: ${task_pid}
如果你的需求其实是启动本地系统进程并获取PID(而非调用API),那Process库的正确用法应该是这样:
*** Settings *** Library Process *** Keywords *** Get Local Process PID [Arguments] ${command_to_run} ${process_handle} = Start Process ${command_to_run} ${pid} = Get Process Id ${process_handle} [Return] ${pid}
内容的提问来源于stack exchange,提问作者szaman219
相关产品推荐
相关产品推荐

