为什么在使用 robotframework 的 api 测试中不考虑 URL 中的方括号?

Why square brackets in URL is not considered in api testing using robotframework?

我正在尝试 api 使用 Robot 框架测试几个 API。 当我尝试用方括号测试 api 时,它没有得到考虑并且得到错误的响应。而相同的 api 能够在 POSTMAN 中给出正确的响应。

我有以下 API: https://orbit.com/s2e/api/q1/client/?filter[customField.ID]=1003

当我输入 Postman 时,我得到了

的有效响应
 "data": {
    "total_count": "1",
    "customer": [
        {
            "id": "123" } ] }

一样API https://orbit.com/s2e/api/q1/client/?filter[customField.ID]=1003 在 Robot 框架中命中给出

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

然后我看到了各种编码,发现使用 %5B 和 %5D 而不是 [ 和 ],但是 API 在 postman 中工作正常,但在 robotframework 中,它提供所有数据,即过滤器不工作。

https://orbit.com/s2e/api/q1/client/?filter%5BcustomField.ID%5D=1003 有人可以指导我吗?

也许问题不在于方括号,而在于等号。 由于您不共享您的机器人代码,因此很难知道您面临什么问题。

但是这里有两个在 URL 上执行的包含方括号的基本 GETS 实现。请注意,我在 = 之前使用了反斜杠 (\),否则它会被视为命名参数。

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 library 的实施:

*** 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()}  

尝试通过为 Robotframework 创建自定义库来编码 URL 路径。

对于Python V2

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

对于PythonV3

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