类型不匹配:找到字符串,必需 io.gadling.core.validation.Validation[String]

Vin*_*ent 5 scala gatling

免责声明:我对 Scala 不太熟悉,所以我可能做了一些愚蠢的事情。

我们使用加特林进行性能测试。我目前正在尝试让它向我们的 API 提交 POST 请求,使用如下内容:

exec(http("post request")
  .post("http://ourApi")
  .body(
      StringBody(
          session => """{ "myContent": "value" }""" // 1
      )
  )
  .asJSON
  .check(status.is(200))
)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我StringBody在标记的行中使用了表达式函数,根据 Ga特林文档,// 1这应该是可能的。

然而,当我尝试运行该程序时,我在该行上收到 ZincCompiler 错误:

type mismatch;
 found   : String("{ \"myContent\": \"value\" }")
 required: io.gatling.core.validation.Validation[String]
Run Code Online (Sandbox Code Playgroud)

为什么它期待 a Validation[String]?在文档中我也只看到字符串......

Ale*_*nov 3

您链接的页面说

表达

大多数 Gattle DSL 方法实际上采用 Expression[T] 参数,这是 Session => Validation[T] 的类型别名。

那么为什么还可以传递字符串和其他值呢?

原因是存在隐式转换:

  • 当传递一个字符串时,它会被自动解析,通过 Ga特林 EL 编译器将它们转换为表达式。

  • 当传递另一种类型的值时,它会自动包装到始终返回此静态值的表达式中。

所以问题是隐式转换由于某种原因没有被触发。从http://gadling.io/docs/2.2.2/session/validation.html#validation,您可以尝试:

  1. 添加import io.gatling.commons.validation._

  2. 如果这没有帮助,请Success("""{ "myContent": "value" }""")明确使用。