背景
微信小程序项目中的接口需要授权登录后才能调用,及在header中添加Authorization传递登录信息。但登录接口有两种状态,获取微信授权和登录本网账户,所设置的Authorization是不同的。需要在第一次授权登录后取到access_token作为下一次的登录凭证。
使用Session记录登录信息,登录成功后修改Session中的值,作为其他接口的登录信息。
在Session设置Attributes的三种方式
- 通过Feeders设置
- 通过接口返回数据saveAs保存
- 使用Gatling 的Session API设置
这里使用后面两种方式。
代码实现
package WeChat
import io.gatling.core.Predef._
import scala.concurrent.duration._
class Api_Test extends Simulation{
val demo_test = scenario("test")
//设置第一次登录的token参数,固定参数,客户端生成
.exec(_.set("token","Basic YmVubGFpX21pbmlwcm9ncmFtOjdhOTRmMTkwNjA5MzExZTdhNmYxNWZiMDlmNWY4Y2Yw"))
.exec(
Request.post(Config.Token,data)
.check( jsonPath("$.msg").is("success"))
//session中保存接口返回的access_token
.check( jsonPath("$..access_token").saveAs("access_token") )
)
//拼接登录后的token信息,修改之前保存在session的token值
.exec(session => session.set("token","bearer "+session("access_token").as[String]))
setUp(
demo_test.inject(
atOnceUsers(1)
)
)
}
将接口请求做统一处理,不用每次设置Authorization
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.http.request.builder.HttpRequestBuilder
object Request {
def post(url:String,data:Map[String,Any]):HttpRequestBuilder={
http(url).post(Config.root+url)
//data 为接口请求参数,params为公参。两者的数据类型均为 Map[String,Any]
.formParamMap(data++params)
.header("Authorization","${token}")
.check(status.is(200))
}
}
参考资料
Stackoverflow论坛: 向所需的Gatling会话添加值的基本示例
Gatling官方文档:Session API