使用RobotFramework调用SoapUI testrunner时出现PermissionError报错
排查及解决方法
1. 确认RobotFramework运行身份与手动执行CMD身份一致
手动执行CMD时的用户身份和RobotFramework启动进程的身份可能存在差异(比如RF通过IDE、定时任务、CI工具启动时会使用独立运行身份):
- 在RF用例中新增如下步骤打印运行身份:
${whoami_res} Run Process whoami Log ${whoami_res.stdout} - 将打印结果和手动CMD执行
whoami的结果比对,若不一致,调整RF的启动身份为你手动执行成功的用户身份即可。
2. 修正Run Process关键字的参数传递方式
Run Process不支持将命令和所有参数拼接为单个字符串传入,必须将每个参数单独拆分传递,错误的参数拼接会触发系统权限误报:
错误写法示例(当前写法易触发异常):
run process "AbsolutePath/testrunner.bat" -e"enpointURL" -t"aboslutePath/soap-projectSettings.xml" -s"testsuitename" -c"testcasename" -r"aboslutePath/soap-project.xml"
正确拆分写法:
${testrunner_path} Set Variable C:/xxx/SoapUI/bin/testrunner.bat ${endpoint} Set Variable http://你的接口地址 ${setting_path} Set Variable C:/xxx/soap-projectSettings.xml ${suite_name} Set Variable 你的测试套件名 ${case_name} Set Variable 你的测试用例名 ${project_path} Set Variable C:/xxx/soap-project.xml ${res} Run Process ${testrunner_path} -e${endpoint} -t${setting_path} -s${suite_name} -c${case_name} -r${project_path}
3. 指定进程运行工作目录
testrunner.bat运行时会默认写入临时文件到系统%TEMP%目录,若RF运行身份对该目录无权限也会触发报错,调用时通过cwd参数指定一个当前用户有完全控制权限的目录作为工作目录即可:
${res} Run Process ${testrunner_path} -e${endpoint} -t${setting_path} -s${suite_name} -c${case_name} -r${project_path} cwd=C:/你的RF测试用例目录
4. 如需管理员权限运行的正确调用方式
如果确认testrunner需要管理员权限才能运行,通过cmd的runas命令抬权调用即可:
${res} Run Process cmd.exe /c runas /savecred /user:你的管理员账号 "${testrunner_path} -e${endpoint} -t${setting_path} -s${suite_name} -c${case_name} -r${project_path}"
注:/savecred参数会保存密码,仅建议测试环境使用
5. 定位具体被拒绝的资源
如果以上方案都无效,使用Process Monitor工具筛选testrunner.bat的运行事件,找到标记为ACCESS_DENIED的资源项,针对性开通对应资源的权限即可。
内容的提问来源于stack exchange,提问作者a1995rz
相关产品推荐
相关产品推荐

