使用带有数据和文件的 Balkan 请求库发送 POST 请求(机器人框架)

Sending a POST request using Balkan's requests lib with data and files (Robot Framework)

我正在尝试使用 Balkan 的请求库从用 Robot Framework http://bulkan.github.io/robotframework-requests/#Post 编写的测试用例发送一个请求 (post),其中有两个参数作为数据和文件。不幸的是,我总是遇到如下所述的相同错误。

我的测试用例:

X_T_Should Upload File Correctly And Get HTTP 200
    Send Default File To SUT And Return Response

*** Keywords ***
Send Default File To SUT And Return Response
    [Arguments]    ${user_login}=${USER_LOGIN}    ${user_password}=${USER_PASSWORD}
    ${url}=    Get URL
    ${auth}=    Create List    ${user_login}    ${user_password}
    Create Session    rm    ${url}    auth=${auth}
    &{headers}=    Create Dictionary    Content-Type=application/x-www-form-urlencoded
    &{data}=    Create Dictionary    name=file    filename=${DEFAULT_FILE_NAME}
    ${file_data}=    Get Binary File    ${CURDIR}${/}Resources${/}${DEFAULT_FILE_NAME}
    &{files}=    Create Dictionary    file=${file_data}
    ${resp}=    Post Request    rm    ${UPLOAD_URI}    files=${files}    data=${data}    headers=${headers}
    Delete All Sessions

错误(来自机器人框架):

20160525 09:47:10.645 :  FAIL : ValueError: Data must not be a string.

问题出在关键字 Post 请求上。当我不设置参数文件或数据时,一切都很好,但如果我同时设置两个参数。我看到这些奇怪的错误。

这是库中的错误吗?

根据文档,files 参数是文件 名称 的列表。您正在将实际文件内容传递到关键字中。这或许可以解释为什么您得到 "Data must not be a string"。

我们也遇到过这个异常。 Requests Python 库中似乎出现了异常。 在 line 119 of requests/models.py

elif isinstance(data, basestring)

检查 data 是否为字符串。和 robotframework-requests seems to be casting data into a string almost always. There is an issue 用于关于异常的 robotframework-requests。