首页 > 解决方案 > 如何创建自己的具有扩展功能的 exec 函数?

问题描述

所以我有许多看起来或多或少像的加特林休息调用函数:

  val restCall = {
    exec(http("RestCall")
      .post("/restCall")
      .body(ElFileBody("json/body.json")).asJson
      .check(saveResponseToSession(status,bodyString,header))
    )
    .exec(session => {validateResponse(session)})
    .pause(Config.minDelayValue seconds, Config.maxDelayValue seconds)
  }

.check(saveResponseToSession(status,bodyString,header))<-- 将正文、状态和标题保存为会话变量

.exec(session => {validateResponse(session)})<-- 正在根据我的自定义需求验证状态、正文和标题。

.pause(Config.minDelayValue seconds, Config.maxDelayValue seconds)<-- 用于我所有交易的模拟级别暂停

这三个函数在我所有的 API 调用上都执行,这对我来说意味着数百行代码重复...

我正在寻找一种创建/覆盖 .exec 链函数的方法,它将在每次调用结束时包含这 3 个函数。

因此,例如,上面的示例将如下所示:

  val restCall = {
    customExec(http("RestCall")
      .post("/restCall")
      .body(ElFileBody("json/body.json")).asJson)

但还将包括:

      .check(saveResponseToSession(status,bodyString,header))
    )
    .exec(session => {validateResponse(session)})
    .pause(Config.minDelayValue seconds, Config.maxDelayValue seconds)
  }

正如我在第一个示例中所示。

标签: scalagatling

解决方案


您可以只拥有一个运行 ChainBuilder 的函数,然后运行验证和暂停步骤。

val restCall = {
  exec(http("RestCall")
    .post("/restCall")
    .body(ElFileBody("json/body.json")).asJson
    .check(saveResponseToSession(status,bodyString,header))
  )
}

def validateAndWait(chain: ChainBuilder) = 
  exec(chain)
  .exec(session => {validateResponse(session)})
  .pause(Config.minDelayValue seconds, Config.maxDelayValue seconds)

def scn = scenario("action with validation").exec(validateAndWait(restCall))

推荐阅读