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

问题描述 投票:0回答:3

我正在尝试使用 Robot 框架对几个 API 进行 api 测试。 当我尝试用方括号测试 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在Robot框架中点击给出

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

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

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

python-3.x api url robotframework web-api-testing
3个回答
4
投票

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

对于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
投票

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

但是这里有两个对包含方括号的 URL 执行基本 GETS 的实现。请注意,我在

\
之前使用了反斜杠 (
=
),否则它被视为命名参数。

使用

requests
库实现

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

0
投票

我对 POST 请求也有同样的问题(我的请求包含方括号)。 基本思想:我对大括号使用“创建字典”关键字,对方括号使用“创建列表”。

${customerInternal}     Create Dictionary     id=${id}
${customer}     Create List     ${customerInternal}
${data}     Create Dictionary     totalcount=${totalcount}      customer=${customer} 
${body}    Create Dictionary    data=${data}
${body}    Evaluate    json.dumps(${body})    json
${header}=    Create Dictionary    Content-Type=application/json
© www.soinside.com 2019 - 2024. All rights reserved.