免责声明:我对 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]?在文档中我也只看到字符串......
您链接的页面说
表达
大多数 Gattle DSL 方法实际上采用 Expression[T] 参数,这是 Session => Validation[T] 的类型别名。
那么为什么还可以传递字符串和其他值呢?
原因是存在隐式转换:
当传递一个字符串时,它会被自动解析,通过 Ga特林 EL 编译器将它们转换为表达式。
当传递另一种类型的值时,它会自动包装到始终返回此静态值的表达式中。
所以问题是隐式转换由于某种原因没有被触发。从http://gadling.io/docs/2.2.2/session/validation.html#validation,您可以尝试:
添加import io.gatling.commons.validation._。
如果这没有帮助,请Success("""{ "myContent": "value" }""")明确使用。