Robotframework.request - Как сделать запрос POST с содержимым «multipart / form-data» и значением ключа - PullRequest
0 голосов
/ 25 января 2019

Я хочу сделать POST-запрос в Robot Framework с «Content-Type: multipart / form-data», используя HttpRequestLibrary, но он не работает для меня.

Завиток запроса:

curl -X POST "https://xxx-approuter-xxx-xxxxxx" -H  "accept: application/json" -H  "Content-Type: multipart/form-data" -F "pkcsFile=" -F "crtFile=" -F "privateKey=" -F "jsonBody={'method' = 'BASIC_AUTH', 'username' = 'xxx', 'password' = 'xxxxx'}"

Проблема, с которой я столкнулся, заключается в том, что я не знаю, где и как следует определять переменную jsonBody с помощью робота scripr.В Postman он работает должным образом, потому что в теле запроса я могу выбрать данные формы, а затем определить ключ как jsonBody, а его значение как

{'method' = 'BASIC_AUTH', 'username' = 'xxx', 'password' = 'xxxxx'}

Ниже приведен пример моего сценария робота:

${headers}=    Create Dictionary    Content-Type=multipart/form-data  Authorization=${token}
${data}=  Create Dictionary  jsonBody={'method' = 'BASIC_AUTH', 'username' = 'xxx', 'password' = 'xxxxx'}
${resp}=    Post Request   my_session   /authentications  data=${data}  headers=${headers}

возвращает ошибку:

"message": "Required AuthenticationDto parameter jsonBody is not present"

Может кто-нибудь помочь мне с этим или напишите пример использования HttpRequestLibrary с Content-Type: multipart / form-data

Ответы [ 2 ]

0 голосов
/ 28 января 2019

После многих попыток я пришел к этому сценарию, но он также не удался:

Creates an authentication schema
    [Arguments]   ${providerType}  ${providerMode}  ${pkcsFile}  ${returnStatus}
    ${headers}=    Create Dictionary    Content-Type=multipart/form-data  Authorization=${jwt_token}
    ${data}=  Create Dictionary   method=BASIC_AUTH  username=xxx  password=xxx
    ${formData}=  Create Dictionary   jsonBody=${data}
    Log  ${formData}
    ${resp}=    Post Request   httpbin    /configuration/test/test/tests  data=${formData}  headers=${headers}
    Log  ${resp}
    Should Be Equal As Strings    ${resp.status_code}    ${returnStatus}

И результат:

"message": "Multipart request resolution failed. Please ensure that each part is properly formatted."

Я должен как-то предоставить значение ключа jsonBody, но я не уверен, правильно ли я это сделал

0 голосов
/ 25 января 2019

Если вы пытаетесь получить этот JSON:

{'method' = 'BASIC_AUTH', 'username' = 'xxx', 'password' = 'xxxxx'}

Ваш синтаксис словаря неверен

Изменение:

${data}=  Create Dictionary  jsonBody={'method' = 'BASIC_AUTH', 'username' = 'xxx', 'password' = 'xxxxx'}

, который дает результаты:

{'jsonBody': "{'method' = 'BASIC_AUTH', 'username' = 'xxx', 'password' = 'xxxxx'}"}

TO:

${data}=  Create Dictionary   method=BASIC_AUTH  username=xxx  password=xxx

, который дает результаты

{'method' = 'BASIC_AUTH', 'username' = 'xxx', 'password' = 'xxxxx'}

EDIT:

Если вам нужно получить эту строку

jsonBody={'method' = 'BASIC_AUTH', 'username' = 'xxx', 'password' = 'xxxxx'}

То, что вы пытаетесь сделать, это то, что вы используете jsonBody=${var}. Фреймворк робота примет jsonBody в качестве первого ключа словаря, создавая вложенный словарь, а вам нужна строка перед вашим диктонаром.

Вы можете использовать катанат, чтобы соединить строку

*** Test Cases ***
Test
        ${jsonBody} =  Set variable  jsonBody
        ${data}=  Create Dictionary   method=BASIC_AUTH  username=xxx  password=xxx
        ${finishedbody} =  Catenate   ${jsonBody}=${data}
        log  ${finishedbody}

Результаты

${finishedbody} =    jsonBody={'method': 'BASIC_AUTH', 'username': 'xxx', 'password': 'xxx'}
...