检查加特林模拟中的字符串

时间:2019-10-11 14:45:14

标签: scala gatling

尝试检查主体上是否存在字符串。类似于检查状态.check(status.is(200))。我也想检查字符串。尝试了.check(bodyString.is("greeting")),但遇到了错误:

val scn = scenario("GreetingPages")
.during(testTimeSecs) {
  exec(
    http ("greeting")
      .get("/greeting")
      .check(status.is(200))
      .check(bodyString.is("Greeting"))
  ).pause(minWaitMs,maxWaitMs)
  .exec(
    http("greeting1")
      .get("/greeting1")
      .check(status.is(200))
      .check(bodyString.is("Greeting1"))
  ).pause(minWaitMs,maxWaitMs)
  .exec(
    http("Third page")
      .get("/greeting2")
      .check(status.is(200))
      .check(bodyString.is("Greeting2"))
  ).pause(minWaitMs,maxWaitMs)

}

----错误------------------------------------------ --------------------------

  

bodyString.find.is(问候),但实际上找到了{“ message”:“ G 9(47.37%)   et”   bodyString.find.is(Greeting1),但实际上找到了{“ message”:“ 5(26.32%)   Greeting1“}   bodyString.find.is(Greeting2),但实际上发现了{“ message”:“ 5(26.32%)   Greeting2“}

1 个答案:

答案 0 :(得分:0)

原因是bodyString返回完整的响应正文,如documentation中所述。

您可以使用in匹配器(您可以看到实现here - look for InMatcher[A],但是它不起作用,因为您需要将expected.contains(actualValue)expected.contains(expected)切换

我建议您实施自己的MyOwnInMatcher

class MyOwnInMatcher[A](expected: Seq[A]) extends Matcher[A] {

  def name: String = "customIn"

  protected def doMatch(actual: Option[A]): Validation[Option[A]] = actual match {
    case Some(actualValue) =>
      if (expected.contains(actualValue))
        actual.success
      else
        s"found $actualValue".failure
    case _ => Validator.FoundNothingFailure
  }
}

并使用它:

.check(jsonPath("$.message").validate(customIn("Greeting")))),它检查json响应正文的message属性中是否存在“问候语”。