【问题标题】:Sending a POST request using Balkan's requests lib with data and files (Robot Framework)使用带有数据和文件的 Balkan 请求库发送 POST 请求(机器人框架)
【发布时间】:2023-03-29 19:00:02
【问题描述】:

我正在尝试使用 Balkan 的请求库从用 Robot Framework http://bulkan.github.io/robotframework-requests/#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 Request 上。当我没有设置参数文件或数据时,一切都很好,但如果我设置了两个参数。我看到这些奇怪的错误。

这是库中的错误吗?

【问题讨论】:

    标签: robotframework


    【解决方案1】:

    根据文档,files 参数是文件名称的列表。您正在将实际文件内容传递给关键字。这可以解释为什么您会得到“数据不能是字符串”。

    【讨论】:

    • 我明白了。谢谢。最后,我用python写了一个关键字。它更具可读性。
    • 我不确定这在 2016 年是否正确,但文档实际上说“files 包含要 POST 到服务器的文件数据的文件名字典”,因此提供的字典应该是正确的? bulkan.github.io/robotframework-requests/#Post%20Request
    【解决方案2】:

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

    elif isinstance(data, basestring)
    

    检查data 是否为字符串。并且机器人框架请求seems 几乎总是将data 转换为字符串。关于异常的机器人框架请求有一个issue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-25
      • 2019-07-21
      • 2021-09-18
      • 2016-11-02
      • 2018-04-04
      • 2013-10-06
      • 1970-01-01
      • 2012-05-27
      相关资源
      最近更新 更多