首页 > 解决方案 > 使用 Json Parse 错误消息在空手道中发布 400 错误请求错误的请求

问题描述

我正在尝试在请求的正文中发布一个 json。在此之前我正在阅读它,然后使用空手道框架中的 set 方法更新几个键。但是测试通过但在控制台中我可以看到它显示 400 bad request 错误

与 Postman 相比,我验证了所有必需的参数。邮递员中设置的相同 Post 请求按预期工作。

Background:

     * json foojson = read ('foo.json')
     * set foojson.foo = 'foo1'
     * set foojson.foo4[0].foo7 = 'fooo8'  

Scenario: 
     Given url 
      And headers
      And json foo1json = foojson 
     And request foo1json
     And print request
     When method post
     Then status 200

请找到如下的 Json 示例

{
  "foo": "",
  "fooA": "",
  "fooB": "",
  "fooFoo": [
    {
      "foo1": "foo A",
      "foo2": "foo AA",
      "foo3": "foo AAAA",
      "foo4": {
        "foo5": " ",
        "foo6": "foo AAAA",
        "foo7": "foo AAAA"
      },
      "foo8": "foo AAAA",
      "foo9": 0,
      "foo10": 0,
      "foo11": [
      ]
    }
  ],
  "fooC": "foo AAAA",
  "fooD": [
  ],
  "fooE": ""
}

实际的 :

场景在这里失败

scenarios: 1 | passed: 0 | failed: 1 | time: 2.2143

但跟踪显示以下内容:

 DEBUG com.intuit.karate - response time in milliseconds: 2156.14

1 < 400

1 < Access-Control-Allow-Credentials: true

1 < Access-Control-Allow-Headers: Origin,Accept,X-Requested-With,Content-Type,Content-Disposition,Access-Control-Request-Method,Access-Control-Request-Headers,X-HTTP-Method-Override,

1 < Access-Control-Allow-Methods: POST, GET, HEAD, OPTIONS, PUT, PATCH, DELETE

1 < Access-Control-Max-Age: 3600

1 < Cache-Control: no-cache

1 < Connection: keep-alive

1 < Content-Security-Policy: child-src 'self'

1 < Content-Type: application/json;charset=UTF-8

具体错误如下:

{"timestamp":1557310988561,"traceId":"","path":"[POST] "", "errors":[{"httpStatusCode":"BAD_REQUEST","code":"BAD_REQUEST", "message" :"JSON 解析错误:无法反序列化foo超出 START_OBJECT 令牌的实例;嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException:无法foo在 [Source: (PushbackInputStream); 处反序列化超出 START_OBJECT 令牌\n 的实例;行:1,列:1]"}]}

请让我知道是否有人可以帮助我

标签: karate

解决方案


与 Postman 相比,我验证了所有必需的参数

这是一个非常无益的说法。现在,关于这个错误:

无法从 START_OBJECT 令牌中反序列化 foo 的实例;嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException

很明显服务器已经抛出了这个错误,看起来空手道已经正确发送了 JSON,但是你没有提供请求,所以没有提供信息的人无法判断。

看起来空手道确实在您的服务器中发现了一个错误——这就是API 测试的重点:) 所以请再次检查。

如果您仍然认为空手道存在问题,请按照以下流程操作:https ://github.com/intuit/karate/wiki/How-to-Submit-an-Issue


推荐阅读