【问题标题】:Upload a zip file with Post request using robot framework and REST使用机器人框架和 REST 上传带有 Post 请求的 zip 文件
【发布时间】:2020-02-24 18:12:28
【问题描述】:

需要帮助。 我正在尝试将执行 POST 请求的 zip 文件上传到 REST API。我正在使用机器人框架和请求库。看到一些例子后,我无处可去。 这是我的代码:

${DATA}= Get Binary File C:\\Users\\${USERNAME}\\data\\Lampadaires.zip 
${DATA}= Get File C:\\Users\\${USERNAME}\\data\\Lampadaires.zip encoding=CP437 
&{dictFiles} Create Dictionary file=${DATA} type=application/x-zip-compressed 
&{headers} Create Dictionary Content-Type=multipart/form-data accept=*/* 
Create Session session http://[test_url]docker.net:8080 headers=${headers}
${resp} Post Request session /rest/v1/organizations/${ORGANIZATION_ID}/upload files=${dictFiles}
Should Be Equal As Strings ${resp.status_code} 200

我想执行与这个 CURL 相同的请求

curl -X POST "http://[test_url]docker.net:8080/rest/v1/organizations/${ORGANIZATION_ID}/upload" -H "accept: */*" -H "Content-Type: multipart/form-data" -F "file=C:\Users\${USERNAME}\data\Lampadaires.zip;type=application/x-zip-compressed"

【问题讨论】:

    标签: rest file-upload http-post robotframework


    【解决方案1】:

    经过一番研究,我找到了上传 zip 文件的解决方案。 第一件事: 不需要在标头中设置内容类型,因为请求库会为您完成这项工作。 第二: 要上传文件,您需要创建具有某些特定配置的字典,因为您还需要提供数据 Content-Disposition: form-data;名称=“文件”; filename="Lampadaires.zip" Content-Type: application/x-zip-compressed 在我的例子中。 所以使用 Get Binary File 关键字是不够的。

    这是我最后的代码

    Library    RequestsLibrary       
    Library    Collections 
    Library    OperatingSystem
    
    ***Variables***
    ${ORGANIZATION_ID}    1234
    ${ALIAS}    MyAlias
    ${MCS_URL}    http://test_url:8080
    ${FILE_UPLOAD_PATH}    C:\\Users\\Daryll\\Documents\\data\\Lampadaires.zip
    ***Test Cases***
    Zip File Upload
       Create Session    ${ALIAS}    ${MCS_URL}
       &{headers}=    Create Dictionary    Accept=*/*
       &{fileParts}=    Create Dictionary
       Create Multi Part    ${fileParts}    file    ${FILE_UPLOAD_PATH}    application/x- 
       zip-compressed
    
       ${response}=    Post Request    ${ALIAS}    
       /rest/organizations/${ORGANIZATION_ID}/upload    files=${fileParts}    
       headers=${headers}
    
       Log    ${response.status_code}    console=${True}
       Log    ${response.json()}    console=${True}
    
    *** Keywords ***
    Create Multi Part    [Arguments]    ${addTo}    ${partName}     ${filePath}    
        ${contentType}    ${content}=${None}
        ${fileData}=    Run Keyword If    '''${content}''' != '''${None}'''    Set 
        Variable    ${content}
        ...            ELSE    Get Binary File    ${filePath}
        ${fileDir}    ${fileName}=    Split Path    ${filePath}
        ${partData}=    Create List    ${fileName}    ${fileData}    ${contentType}
        Set To Dictionary    ${addTo}    ${partName}=${partData}
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 2018-07-25
      • 1970-01-01
      • 2013-02-13
      • 2021-09-18
      • 2016-04-07
      • 2020-08-30
      • 2017-05-17
      • 2018-12-20
      相关资源
      最近更新 更多