Gatling 学习实践(一)Session的设置和修改

背景

微信小程序项目中的接口需要授权登录后才能调用,及在header中添加Authorization传递登录信息。但登录接口有两种状态,获取微信授权和登录本网账户,所设置的Authorization是不同的。需要在第一次授权登录后取到access_token作为下一次的登录凭证。

使用Session记录登录信息,登录成功后修改Session中的值,作为其他接口的登录信息。

在Session设置Attributes的三种方式

  1. 通过Feeders设置
  2. 通过接口返回数据saveAs保存
  3. 使用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

你可能感兴趣的:(Gatling 学习实践(一)Session的设置和修改)