【robotframework】使用RequestLibrary编写通过表单方式提交xlsx文件的测试用例
最近小组成员碰到一个需求,需要使用Robot Framework的RequestLibrary库实现通过表单的方式提交xlsx到接口的测试用例。研究了一下RequestLibrary的相关文档,RequestLibrary是可以支持这样的操作的。
RequestLibrary的官方文档现在建议使用Post On Session来实现POST,文档如下:
但是文档中并没有说明上传文件需要指定的参数,继续查阅被废弃的Post Request的文档:
结合stackoverflow上的相关讨论(https://stackoverflow.com/questions/38827417/uploading-files-using-multipart-form-data-through-rest-api),结合几次尝试,最终确定使用两个参数来传递接口需要的参数:
1. files:最终传入一个字典,注意这个字典的key是文件名,value是通过Get Binary File这个关键字返回的文件内容
2. data:传入的也是一个字段,key/value指定接口要求的参数
最终调试完成的测试用例如下:
*** Settings *** Library Collections Library RequestsLibrary Library String Library OperatingSystem Suite Setup 用户登录 *** Variables *** ${BASE_URL} https://YourTestSystemURL *** Test Cases *** 文件上传测试 Create Session sys_test ${BASE_URL} # 构造Cookie参数,带上session ID &{headers}= Create Dictionary Cookie=${SESSION_ID} # 打开文件 ${file_data}= Get Binary File D:/debug/file_upload.xlsx # 文件参数 &{file_parts}= Create Dictionary Set To Dictionary ${file_parts} file_upload.xlsx=${file_data} # 文件上传参数 &{post_data}= Create Dictionary createdBy=YourUserName fileName=file_upload.xlsx ${resp}= Post On Session sys_test /api/upload_url files=${file_parts} headers=${headers} data=${post_data} Log ${resp.json()} *** Keywords *** 用户登录 &{headers}= Create Dictionary Content-Type=application/json;charset=utf-8 Create Session sys_test ${BASE_URL} headers=${headers} &{data}= Create Dictionary userName=YourUserName password=YourPassword ${resp} POST On Session sys_test /api/signin json=${data} ${cookie_value} Get From Dictionary ${resp.headers} Set-Cookie ${session_id} Fetch From Left ${cookie_value} ; Set Suite Variable ${SESSION_ID} ${session_id} Log ${SESSION_ID}