【robotframework】使用RequestsLibrary的Get File For Streaming Upload关键字实现文件上传

昨天组内成员遇到一问题找到我,说使用RequestsLibrary调测上传接口的时候,接口一直提示文件格式错误,她和另外一名同事琢磨了很久,没搞定,于是找到我这边。该同事的描述就是“我使用postman是好的呀,通过关键字上传就不行了”。昨天由于有更高优先级的任务,于是今天上午帮该同事看了一下,经过几次尝试,问题解决,本文主要记录下问题现象以及解决过程。

 

最开始编写的用例:

*** Settings ***
Library           Collections
Library           RequestsLibrary
Library           OperatingSystem

*** Variables ***
${BASE_URL}       http://xx.xx.xx.xx

*** Test Cases ***
文件上传测试-POST
    [Documentation]    文件上传测试-POST
    Create Session    file_upload    ${BASE_URL}    verify=True
    # 打开文件
    ${file_data}=    Get Binary File    D:/test01.xlsx
    # 文件参数
    &{file_parts}=    Create Dictionary
    Set To Dictionary    ${file_parts}    test01.xlsx=${file_data}
    # 文件上传参数
    ${resp}=    Post On Session    file_upload    /basic/file/upload    files=${file_parts}

执行该用例后,接口报如下错误:

 

 

 

查看发送的报文,发现如下信息:

 

 

 

于是将用例中的test01.xlsx=${file_data} 修改为file=${file_data}后,用例如下:

*** Settings ***
Library           Collections
Library           RequestsLibrary
Library           OperatingSystem

*** Variables ***
${BASE_URL}       http://xx.xx.xx.xx

*** Test Cases ***
文件上传测试-POST
    [Documentation]    文件上传测试-POST
    Create Session    file_upload    ${BASE_URL}    verify=True
    # 打开文件
    ${file_data}=    Get Binary File    D:/test01.xlsx
    # 文件参数
    &{file_parts}=    Create Dictionary
    Set To Dictionary    ${file_parts}    file=${file_data}
    # 文件上传参数
    ${resp}=    Post On Session    file_upload    /basic/file/upload    files=${file_parts}

 

执行该用例后,报新的错误:

 

 

 

查看日志中发送的报文,发现如下信息:

 

 

 POST报文中Cotent-Diposition头域中的filename也变成file了,应该是具体的文件名才对

 

于是谷歌了一把,在https://forum.robotframework.org/t/facing-issue-with-testing-file-upload-api-using-robot-framework/254中找到了如下信息:

 

 

于是将原先测试用例中的Get Binary File关键字替换成Get File For Streaming Upload关键字:

*** Settings ***
Library           Collections
Library           RequestsLibrary
Library           OperatingSystem

*** Variables ***
${BASE_URL}       http://106.12.185.21

*** Test Cases ***
文件上传测试-POST
    [Documentation]    文件上传测试-POST
    Create Session    file_upload    ${BASE_URL}    verify=True
    # 打开文件
    ${file_data}=    Get File For Streaming Upload    D:/test01.xlsx
    # 文件参数
    &{file_parts}=    Create Dictionary
    Set To Dictionary    ${file_parts}    file=${file_data}
    # 文件上传参数
    ${resp}=    Post On Session    file_upload    /basic/file/upload    files=${file_parts}

 

 再次尝试,问题解决:

 

 

 请求报文如下:

 

 

 

RequestsLibrary库中的Get File For Streaming Upload关键字帮助信息如下:

 

posted on 2021-05-27 11:18  东西南北风  阅读(684)  评论(0编辑  收藏  举报

导航