在为加特林请求生成 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。
我正在使用 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。