如何在“exec”中失败加特林测试?

时间:2014-09-02 11:36:25

标签: scala assert gatling

带有exec链的Gatling场景。请求后,保存返回的数据。之后它会被处理,并且根据处理结果,它应该失败或通过测试。

这似乎是最简单的可能情况,但我无法找到任何可靠的信息,如何在exec块中失败测试。 断言打破了场景并且看似加特林(例如:例外投掷并不会使测试失败)。

示例:

// The scenario consists of a single test with two exec creating the execChain
val scn = scenario("MyAwesomeScenario").exec(reportableTest(

     // Send the request
     exec(http("127.0.0.1/Request").get(requestUrl).check(status.is(200)).check(bodyString.saveAs("MyData")

     // Process the data
    .exec(session => { 
         assert(processData(session.attributes("MyData")) == true, "Invalid data");
    })
))

在线上某处的场景"监护人失败,关闭系统"。

现在这似乎是一个有用的,经常使用的事情 - 我可能会遗漏一些简单的事情。怎么做?

4 个答案:

答案 0 :(得分:3)

您必须遵守Gatling API。

  1. 通过检查,您不会“失败”测试,而是请求。如果您正在寻找整个测试失败的原因,那么您应该查看Assertions API和Jenkins plugin
  2. 您只能在请求网站上执行检查,而不是稍后。其中一个很好的理由是,如果将bodyString存储在Sessions中,就像你正在做的那样,你将结束使用大量内存并可能崩溃(仍然引用,因此不是垃圾收集)。您必须在支票中执行processData,通常是transform可选步骤。

答案 1 :(得分:2)

你在寻找像

这样的东西吗?
  .exec(http("getRequest")
    .get("/request/123")
    .headers(headers)
    .check(status.is(200))
    .check(jsonPath("$.request_id").is("123")))

答案 2 :(得分:1)

因为编辑队列已经满了。

这已经在新版本的 Gatling 中解决了。 3.4.0 版

他们添加了

exitHereIf

exitHereIf("${myBoolean}")
exitHereIf(session => true)

如果条件成立,让用户从此时退出场景。条件参数是一个表达式[布尔]。

答案 3 :(得分:0)

我使用exitHereIfFailed实现了一些听起来完全像您要完成的任务。我通常在虚拟用户尝试登录后使用它。

exitHereIfFailed的使用方式

val scn = scenario("MyAwesomeScenario")
.exec(http("Get data from endpoint 1")
  .get(request1Url)
  .check(status.is(200))
  .check(bodyString.saveAs("MyData"))
  .check(processData(session.attributes("MyData")).is(true)))
.exitHereIfFailed // If we weren't able to get the data, don't continue
.exec(http("Send the data to endpoint 2")
  .post(request2Url)
  .body(StringBody("${MyData}"))

如果exitHereIfFailed之前的任何检查失败,则此情况将在exitHereIfFailed处中止。