Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala “如何从内部通过加特林测试”;执行官;?_Scala_Assert_Gatling - Fatal编程技术网

Scala “如何从内部通过加特林测试”;执行官;?

Scala “如何从内部通过加特林测试”;执行官;?,scala,assert,gatling,Scala,Assert,Gatling,带有exec链的Gatling场景。请求后,将保存返回的数据。稍后它被处理,根据处理结果,它应该失败或通过测试 这似乎是最简单的可能场景,但我无法从exec块中找到任何关于如何使测试失败的可靠信息。assert打破了场景,看起来像是Gatling(比如:异常抛出并不仅仅是测试失败) 例如: // The scenario consists of a single test with two exec creating the execChain val scn = scenario("MyAwe

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

这似乎是最简单的可能场景,但我无法从exec块中找到任何关于如何使测试失败的可靠信息。assert打破了场景,看起来像是Gatling(比如:异常抛出并不仅仅是测试失败)

例如:

// 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");
    })
))
上面的场景是“guardian失败,关闭系统”


现在这似乎是一个有用的,经常使用的事情-我可能错过了一些简单的东西。如何做到这一点?

你必须遵守加特林API

  • 通过检查,您不会“失败”测试,而是请求。如果您希望在整个测试中失败,那么您应该看看API和
  • 您只能在请求站点执行检查,不能在以后执行。其中一个很好的原因是,如果您像现在这样在会话中存储bodyString,那么最终将使用大量内存,可能会崩溃(仍然被引用,因此不可垃圾回收)。您必须在检查中执行
    processData
    ,通常是在可选步骤中

  • 你在找类似的东西吗

      .exec(http("getRequest")
        .get("/request/123")
        .headers(headers)
        .check(status.is(200))
        .check(jsonPath("$.request_id").is("123")))
    

    我实现了一些东西,这听起来正是你想要实现的。我通常在虚拟用户尝试登录后使用它

    是这样使用的

    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}"))
    

    如果
    退出失败
    之前的任何检查失败,此场景将在
    退出失败
    时正常中止。

    ,因为编辑队列已满

    新版本的《加特林》已经解决了这一问题。3.4.0版

    他们补充说

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

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

    谢谢您的回答。我将研究断言API。关于检查:afaik检查将打破执行链,阻止进一步的数据清理/日志开始,我希望避免丢失这一点(我已经阅读了一些关于实现“缓慢失败”的对话)。在这个特定的测试中,内存也不重要:我们使用Gatling进行功能“yes/no”和性能测试。不,默认情况下check不会中断执行链。仅当您封装在exitBlockOnFail块中时:对不起,我以为已经安装了一个较旧版本的Gatling。断言实际上似乎是完美的。我可以问您是否可以从scn(…).assertions(…)级别断言会话数据?不,支持统计数据仅全局计算,因此断言仅在设置级别atm可用。我们计划在2.1中重构断言引擎,这样您就可以打开一个功能请求了。再次感谢您,我将尝试这样做。