我正在使用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方法调用中复制所有查询参数名称和值,这显然是一种不好的做法。有可能避免这种情况吗?