Почему квадратные скобки в URL не учитываются при тестировании API с использованием роботизированной системы? - PullRequest
1 голос
/ 31 января 2020

Я пытаюсь API-интерфейсы протестировать несколько API, используя Robot Framework. когда я пытаюсь проверить API с квадратными скобками, это не учитывается и получает неправильный ответ. Тогда как тот же API может дать правильный ответ в POSTMAN.

У меня есть следующий API: https://orbit.com/s2e/api/q1/client/?filter [customField.ID] = 1003

Когда я нажимаю в Почтальоне я получаю действительный ответ как

 "data": {
    "total_count": "1",
    "customer": [
        {
            "id": "123" } ] }

Тот же API https://orbit.com/s2e/api/q1/client/?filter [customField.ID] = 1003 попадание в среде робота дает

"data": {
    "total_count": "0",
    "customer": [] }

Затем я увидел различное кодирование и обнаружил, что вместо [и] используется% 5B и% 5D, но этот API работает должным образом в почтальоне, но в роботизированной структуре он дает все данные, т.е. фильтр не работает.

https://orbit.com/s2e/api/q1/client/?filter%5BcustomField.ID%5D=1003 Кто-нибудь может направить меня сюда?

Ответы [ 2 ]

4 голосов
/ 31 января 2020

Попробуйте закодировать URL-путь путем создания пользовательской библиотеки для Robotframework.

Для Python V2

import urllib   
def encodeUrlPath(s): 
   return urllib.quote_plus(s)

Для Python V3

import urllib.parse
def encodeUrlPath(s): 
  return urllib.parse.quote_plus(s)
2 голосов
/ 31 января 2020

Возможно, проблема не в квадратных скобках, а в знаке равенства. Трудно понять, с какой проблемой вы сталкиваетесь, поскольку вы не передаете свой код робота.

Но вот две реализации базовых c GETS, выполняемых для URL, которые содержат квадратные скобки. Обратите внимание, что я использовал backsla sh (\) перед =, в противном случае он рассматривается как именованный аргумент.

Реализация с requests library :

*** Settings ***
Library  requests

*** Test Case ***
mytest
    ${response} =  requests.get  https://postman-echo.com/get?foo1\=[bar1]&foo2\=bar2
    Log To Console  ${response.json()}

Реализация с RequestsLibrary библиотека :

*** Settings ***
Library  RequestsLibrary

*** Test Case ***
mytest
    Create Session  postman_echo  https://postman-echo.com
    ${response} =  Get Request  postman_echo  /get?foo1\=[bar1]&foo2\=bar2  
    Log To Console  ${response.json()}  
...