传递表单数据作为ROBOT框架的一部分



我正在尝试在ROBOT框架中传递以下API请求:

curl --request POST --url <API End Point>  --form 'mldata={"id": “idname”, "author": “author name, "title": “title name, "description": “description details“, "version": "0.0.4", "image": “/path/to/image”, "icon": "base64 encoded image"};type=application/json' --header "Authorization: <Bearer Token>”

在ROBOT框架[版本:3.2.2]中编写了相同的内容,但得到了error: "status=400, reason=Bad Request body={"message":"Request is not a multipart request!"}"strongtext

我似乎没有以正确的方式传递表单数据请求帮助传递表单数据[--表单'mldata={quot;id":"idname","author":"author name,"title":"title name,"description":"description details","version":"0.0.4&","image":"/path/to/image","icon":"base64编码的image"quot;};type=application/json']。

我应该如何以正确的方式通过?

Onboard ML From External Repo
[Arguments]    ${token}=default
Create Session    session    ${host}
${data}=    Create Dictionary    id=${id}    author=${author}    title=${title}    description=${description}    version=${version}    image=${repo_path}
${form_data}=    Evaluate    {'mldata=': ${data}}
${header}=    Create Dictionary    Authorization=${token}
${response}=   Post Request    session    /v1/ml    data=${form_data}    headers=${header}
Should Be Equal As Strings    ${response.status_code}    200

我尝试了下面的代码,它成功了。我对原来的帖子做了两处修改。

  1. 不创建字典,而是直接评估所有项
  2. 在后请求中传递"文件"而不是"数据",对于多表单请求,需要文件
Onboard ML From External Repo
[Arguments]    ${token}=default
Create Session    mxesession    ${host}
# ${data}=    Create Dictionary    id=${id}    author=${author}    title=${title}    description=${description}    version=${version}    image=${repo_path}    "icon": ${icon_image}
${form_data}=    Evaluate    {'mldata': (None,'{"id": "${id}", "author": "${author}", "title": "${title}", "description": "${description}", "version": "${version}", "image": "${repo_path}", "icon": "${icon_image}"}')}
# ${form_data}=    Evaluate    {'mldata': "'"+${data}+"'"}
# ${form_data}=    Evaluate    {'mldata': str(${data})}
# ${form_data}=    Evaluate    {'mldata': (None,str(${data}))}
# ${form_data}=    Evaluate    {'mldata': (None,${data})}
${header}=    Create Dictionary    Authorization=${token}
${response}=   Post Request    session    /v1/ml    files=${form_data}    headers=${header}
Should Be Equal As Strings    ${response.status_code}    200

我不确定这是否是传递多表单数据的正确方式,但它在我的情况下起到了作用。如果有人有更好的可行想法,请评论。这将有助于我将此代码细化为更好的形状。

根据@PDHide评论更新了答案。

Onboard ML From External Repo
[Arguments]    ${token}=default
Create Session    mxesession    ${host}
${data}=    Create Dictionary    id=${id}    author=${author}    title=${title}    description=${description}    version=${version}    image=${repo_path}    "icon": ${icon_image}
${form_data}=    Evaluate    {'mldata=': str(${data}).replace("'",'"')}
${header}=    Create Dictionary    Authorization=${token}
${response}=   Post Request    session    /v1/ml    files=${form_data}    headers=${header}
Should Be Equal As Strings    ${response.status_code}    200

附言:感谢@PDHide的支持。

它应该作为字符串发送,而且不需要相等的

${form_data}=    Evaluate    {'mldata=': str(${data}).replace("'",'"')}

正如你所观察到的,我们必须通过

files=${form_data} 

这就是我的工作结束。对于其他有这个问题的人

${data}=    Evaluate    {'username': (None, 'myusername'), 'password': (None, 'mypwd')}
${response}=  Post Request  ${Session_id}  ${AUTH_TOKEN_URL_PATH}  files=${data}

最新更新