一个简单的Gatling登录并获取token值进行关联的例子

一个简单的Gatling登录并获取token值进行关联的例子

import io.gatling.core.Predef._
import io.gatling.http.Predef._

class TestDemo extends Simulation {

  val user_params = csv("user_info.csv").random // 随机读取数据进行参数化

  var headers_default =                                       // 设置默认的请求头
    Map(
      "User-Agent" -> "Dalvik/2.1.0 (Linux; U; Android 7.1.1; 1707-A01 Build/NMF26X)",
      "Content-Type" -> "application/json; charset=UTF-8",
    )

  val assert_rsp_status = status.is(200) // 正常HTTP响应码为200

  object Login {

    val login =
      feed(user_params)
        .exec(
          http("登录")
            .post("/auth/user/login_by_phone/")
            .headers(headers_default)
            .body(StringBody("""{"phone":"${phone}","password":"${passwd}"}""")).asJSON // ${phone},${passwd}为参数化文件user_info.csv第一行的参数字段名,存储在session中,所以可以直接按照格式获取
            .check(assert_rsp_status)
            .check(jsonPath("$.code").is("0")) // 断言-业务响应码是否为0
            .check(jsonPath("$.data").exists.saveAs("resp_login")) // 保存响应的data内容至session中
            .check(jsonPath("$.data.ticket").exists.saveAs("ticket")) // 保存响应的ticket值至session中
        )
        .exec(addCookie(Cookie("ticket", "${ticket}")))  // 为后续的请求设置cookie,key为ticket,value为从响应中获取的ticket值

        // 打印 session 的信息
        .exec { session =>
        println("session:" + session)
        println("resp_login :" + session.get("resp_login").as[String])
        println("ticket :" + session.get("ticket").as[String])
        session
      }
  }

  object Growth {

    val growth =
      exec(
        http("获取成长值")
          .get("/growth/exp_record/")
          .headers(headers_default)
          .check(assert_rsp_status)
          .check(jsonPath("$.msg").is("请求成功"))
      )
  }

  val httpProtocol = http
    .baseURL("http://XXX.XXX.XXX")
    .inferHtmlResources(BlackList(""".*\.css""", """.*\.js""", """.*\.ico""", """.*\.gif""", """.*\.jpeg""", """.*\.jpg""", """.*\.woff""", """.*\.(t|o)tf""", """.*\.png"""), WhiteList(""".*cfmoto.*"""))
    .acceptEncodingHeader("gzip")
    .userAgentHeader("MOBILE|Android|7.1.1|KLICEN_APP|2.0.0|Dalvik/2.1.0 (Linux; U; Android 7.1.1; 1707-A01 Build/NMF26X)|1080*2016|652de42a1cac4d25|100")

  val cfmoto = scenario("android").exec(Login.login, Growth.growth)

  setUp(
    cfmoto.inject(rampUsers(1) over (1))
  ).protocols(httpProtocol)

}

user_info.csv的内容为
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lbxoqy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值