一个简单的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的内容为
在这里插入图片描述

你可能感兴趣的:(Gatling,性能测试)