2016-06-21 73 views
2

声明:我对Scala并不熟悉,所以我可能会做一些愚蠢的事情。类型不匹配:找到字符串,要求io.gatling.core.validation.Validation [String]

我们正在使用Gatling进行性能测试。目前,我想要得到它提交POST请求我们的API,使用类似以下内容:

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

正如你所看到的,我使用的是表达功能为StringBody在行标// 1 ,这应该是可能的according to the Gatling documentation

当我尝试运行,但是,我得到一个错误ZincCompiler对确切行:

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

为什么期待Validation[String]?在本文档中我只看到字符串,以及...

+0

我们需要看你的进口。你有没有包含'import io.gatling.core.Predef._'? –

+0

@Ivan你应该发布这个答案,而不是评论,因为它很可能是正确的。 –

+0

这似乎是@IvanBalashov,猜测它真的是时间来修复我坏了的IDE ...任何指向什么导入以及它如何神奇地将我的字符串转换为正确的类型?我很想知道它是如何在斯卡拉实际工作的... – Vincent

回答

1

您链接的网页显示

表达

大多数加特林DSL方法,其实需要表达[T]参数,这是一个类型别名会话=>验证[T]。

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

的原因是,有隐式转换:

  • 传递一个字符串时,它就会自动地解析他们变成归功于加特林EL表达式的编译器。

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

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

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

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

+0

导入应该是'import io.gatling.commons.validation._' –

+0

@ZdenekF你是对的,谢谢(对于Gatling 2.2)。 –

相关问题