在为加特林请求生成 MAC 时避免查询参数重复

Avoid query parameters duplication when generating a MAC for requests in gatling

我正在使用 gatling (2.1.7) 来对 API.

进行压力测试

我必须请求交易 ID 和共享密钥,以便对所有后续调用进行身份验证。

scenario("API").exec(http("authorize")
  .post("/api/v1/xxx/authorize")
  .formParam("client_key", "a_very_strong_key")
  .check(jsonPath("$.response.txId").saveAs("id"))
  .check(jsonPath("$.response.txSecret").saveAs("secret")))

所有其他调用必须包含一个查询参数 signature,它是其他请求参数的 mac。

我写了这段代码来做到这一点

scenario("API").exec(http("call")
  .get("/api/v1/call")
  .queryParam("id", "${id}")
  .queryParam("param1", "aaaaaa")
  .queryParam("param2", "bbbbbb")      
  .queryParam("signature", session => sign(session, Map(
    "id" -> session("id").as[String],
    "param1" -> "aaaaaa",
    "param2" -> "bbbbbb"))))

/* ... */

def sign(session: Session, params: Map[String, String]) : String = {
    val str = canonicalize(params)
    format_mac(session("secret").as[String], str)
}

但是我必须在 sign 方法调用中复制所有查询参数名称和值,这显然是一种不好的做法。可以避免吗?

您想签署一个请求,所以使用 SignatureCalculator