为什么在使用 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)
我正在尝试 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)