【问题标题】:Type mismatch: found String, required io.gatling.core.validation.Validation[String]类型不匹配:找到 String,需要 io.gatling.core.validation.Validation[String]
【发布时间】:2017-01-19 04:24:09
【问题描述】:

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

我们正在使用 Gatling 进行性能测试。我目前正试图让它向我们的 API 提交一个 POST 请求,使用如下内容:

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

如您所见,我在标记为// 1 的行处使用StringBody 的表达式函数,这应该是可能的according to the Gatling documentation

但是,当我尝试运行它时,我在该行得到了 ZincCompiler 错误:

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

为什么需要Validation[String]?在文档中,我也只看到字符串...

【问题讨论】:

  • 我们需要查看您的进口。您是否包含import io.gatling.core.Predef._
  • @Ivan 您应该将其发布为答案,而不是评论,因为它很可能是正确的。
  • 这似乎是@IvanBalashov,猜猜是时候修复我损坏的IDE了......关于导入的内容以及它如何以某种方式神奇地将我的String转换为正确类型的任何指针?我很想知道它在 Scala 中是如何工作的……

标签: scala gatling


【解决方案1】:

你链接的页面说

表达式

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

那怎么也可以传递字符串和其他值呢?

原因是存在隐式转换:

  • 当传递一个字符串时,由于 Gatling EL 编译器,它会被自动解析并转换为表达式。

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

所以问题是由于某种原因没有触发隐式转换。来自http://gatling.io/docs/2.2.2/session/validation.html#validation,你可以试试:

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

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

【讨论】:

  • 导入应该是import io.gatling.commons.validation._
  • 我只是注意到我从未接受过这个作为正确答案。我现在有,享受互联网积分;)
猜你喜欢
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2018-08-12
  • 2017-01-06
相关资源
最近更新 更多