Scala 如何创建具有扩展功能的自己的exec函数?

Scala 如何创建具有扩展功能的自己的exec函数?,scala,gatling,Scala,Gatling,因此,我有许多gatling rest调用函数,看起来或多或少像: val restCall = { exec(http("RestCall") .post("/restCall") .body(ElFileBody("json/body.json")).asJson .check(saveResponseToSession(status,bodyString,header)) ) .exec(session => {vali

因此,我有许多gatling rest调用函数,看起来或多或少像:

  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))
{validateResponse(session)}您只需要一个函数,它让链接生成器运行,然后运行验证和暂停步骤

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

出于兴趣,你在validateResponse做什么?如果将验证从api调用中移开,则会降低脚本的可读性,因此,除非您检查的是真正通用的内容,否则这可能不是一个好方法感谢您的关注!很明显,我对加特林和斯卡拉还不熟悉,所以我正在做的验证可能是。。。尴尬。我想打印正文、标题sessionid和HTTP状态,以防出现错误,从而能够进一步调试问题。因此,验证响应的具体操作如下:def validateResponse(session:session):Validation[session]={val statusCode=session(“HTTP_STATUS_CODE”)。as[String]val body=session(“response_body”)。as[String]val sessionId=session(“response_session_ID”)。as[String]if(body.isEmpty()| body.contains(“error\:”)| statusCode!=“200”){println(s“错误:会话id:[$sessionId],状态代码:[$statusCode],正文:[$body]”)}返回会话}默认情况下,gatling将在控制台中记录失败的请求和会话的内容-因此您实际上不需要手动获取日志的响应详细信息。大多数失败的请求都是通过HTTP 200发送回来的,因此gatling认为没有问题。
      .check(saveResponseToSession(status,bodyString,header))
    )
    .exec(session => {validateResponse(session)})
    .pause(Config.minDelayValue seconds, Config.maxDelayValue seconds)
  }
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))