7

我正在使用 gatling 对全新的 API 进行负载性能测试。这似乎相当简单且有据可查,但我面临的问题很简单,例如在标头上将 Content-Type 设置为“application/vnd.api+json”的 POST 请求。做 GET 的东西时一切正常,但是在启动 POST 测试时,我得到一个

HTTP response:
status=
415 Unsupported Media Type
headers= 
cache-control: [no-cache]
Content-Type: [application/vnd.api+json; charset=utf-8]
Date: [Fri, 08 Sep 2017 12:57:10 GMT]
Server: [nginx]
Vary: [Origin]
x-content-type-options: [nosniff]
x-frame-options: [SAMEORIGIN]
X-Request-Id: [ff993645-8e01-4689-82a8-2f0920e4f2a9]
x-runtime: [0.040662]
x-xss-protection: [1; mode=block]
Content-Length: [218]
Connection: [keep-alive]

body=
{"errors":[{"title":"Unsupported media type","detail":"All requests that create or update must use the 'application/vnd.api+json' Content-Type. This request specified 'application/json'.","code":"415","status":"415"}]}

这是我用于 http 请求的 scala 代码:

object PostTokenGcm {
 val token = exec {
  http("TestAPI POST /tokens")
    .post("/tokens")
    .headers(Map("Authorization" -> testApiToken,
       "Content-Type" -> "application/vnd.api+json",
        "Accept" -> "application/vnd.api+json" ))
    .body(StringBody(gcmTokenRequestBody)).asJSON
    .check(status.is(201))
    .check(bodyString.exists)
}}

好像没有设置Content-Type?

感谢您提供任何线索!

4

1 回答 1

11

在您的POST定义中,您正在使用asJSON. 根据有关请求标头的文档中的注释:

http("foo").get("bar").asJSON 等价于:

http("foo").get("bar")
  .header(HttpHeaderNames.ContentType,HttpHeaderValues.ApplicationJson)
  .header(HttpHeaderNames.Accept,HttpHeaderValues.ApplicationJson)

...因此,标题设置为:

.headers(Map("授权" -> testApiToken,
       “内容类型”->“应用程序/vnd.api+json”,
        “接受”->“应用程序/vnd.api+json”))

... 被asJSONto覆盖"application/json"(这是 的值HttpHeaderValues.ApplicationJson)。

于 2017-09-13T09:31:11.243 回答