项目中的某个接口必须先登录后调用,但是 header 中的Authorization 需要在登录返回的token中添加一个字串,所以需要先获得 token 并修改后传递给该接口的请求。

虽然这是常见的关联的问题,但是由于刚开始研究gatling, 苦于中文相关文档有限,看了官方文档,也是有些茫然,尝试了不同的方法后,终于看到请求成功了。

package advisorApp

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._

class application extends Simulation {

val httpConf = http
.baseURL("https://xxxx.xxxx") // Here is the root for all relative URLs
.acceptHeader("application/json, text/plain, */*") // Here are the common headers
.acceptLanguageHeader("zh-CN,zh;q=0.9,en;q=0.8")
.acceptEncodingHeader("gzip, deflate, br")
.userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36")

val headers_10 = Map("Content-Type" -> "application/json") // Note the headers specific to a given request

val scn = scenario("SigningAdvisor")
.exec(http("login")
.post("/advisor-auth/api/auth/xxxx/_actions/loginOrRegisterUser") //test data
.headers(headers_10)
.body(StringBody("""{ "phone": "177xxxxxxxx","verificationCode":"7777"}""")).asJSON
.check(status.is(200))
.check(jsonPath("$..userId").saveAs("userId"))
.check(jsonPath("$..token").exists)
.check(jsonPath("$..token").saveAs("token"))
)

// 取出 token 值并修改
.exec(session => {
val token = session("token").as[String]
val token2 = "Bearer " + token
session.set("token",token2)
})

// 打印 session 验证正确性
.exec { session => println(session)
session
}

.exec(http("advisorSigning")
.post("/bms-advisor/api/advisors")
.headers(headers_10)
.header("Authorization","${token}")
.body(StringBody("""{"userId": "5a5d9d1f30c49e0008c1c913",
"advisorPhone": "xxxxxx", //  test data
"emailAddress": "Q@123.com",
"advisorName": "xxxx", //test data
"idCardNumber": "xxxxxxx", //test data
"nation": "Han",
"highestDegree": "doctor",
"politicalStatus": "ptgm",
"provinceCompanyId": "59f422cdb2b14f0008a1166d"}""")).asJSON)

setUp(scn.inject(atOnceUsers(1)).protocols(httpConf))
}

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #454545 }

打印出的session 结果:

Session(SigningAdvisor,1,Map(gatling.http.cache.dns -> io.gatling.http.resolver.ShuffleJdkNameResolver@54fba1c8, userId -> 5a5daee230c49e0008c1c915, token -> Bearer eyJhbGciOiJIUzI1NiJ9.eyJwcmluY2lwYWwiOiI1YTVkYWVlMjMwYzQ5ZTAwMDhjMWM5MTUiLCJkYXRhIjoiMzI5MDQyNDQtZTUwZC00ZmExLWIyMWYtY2MxNjM3ZTZlOGI3IiwiZXhwIjoxNTE2Njk2MDc3fQ.yJsKzVk1wkT4j6Ygdua4jpoxq1V3zzXZ8hDuk3EI4Pw),1516091277053,151,OK,List(),io.gatling.core.protocol.ProtocolComponentsRegistry$$Lambda$409/115086468@687d0e8a)

Gatling - 用 session 实现关联 传递 token 值的更多相关文章

  1. Jmeter关联-获取token值

    1. token就是令牌,比如你授权(登录)一个程序时,他就是个依据,判断你是否已经授权该软件:也叫关联 2. cookie就是写在客户端的一个txt文件,里面包括你登录信息之类的,这样你下次在登录某 ...

  2. session 、cookie、token的区别及联系

    本文转自:https://blog.csdn.net/jikeehuang/article/details/51488020:https://blog.csdn.net/weixin_37196194 ...

  3. Session、Cookie与Token

    http协议是无状态协议 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到 ...

  4. 彻底弄懂session,cookie,token

    session,cookie和token究竟是什么 简述 我在写之前看了很多篇session,cookie的文章,有的人说先有了cookie,后有了session.也有人说先有session,后有co ...

  5. 接口测试彻底弄懂Session、Cookie、Token的区别及联系hold住面试官--hold住了开3万,hold不住开3K!

    一.前言:接口测试之伤:cookie,session,token本是一家! cookie,session,token的区别早就已经成为测试同行的心病,各大论坛,各大博客,各大视频网站无不充斥着各种疑问 ...

  6. Session、Cookie、Token 【浅谈三者之间的那点事】

    Cookie 和 Session HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录:Session 和 Cookie 的主要目的 ...

  7. javascript中值传递与值引用的研究

    今天重新看了一下<javascript高级程序设计>,其中讲到了javascript中的值传递和值引用,所以就自己研读了一下,但是刚开始没有明白函数中的参数只有值传递,有的场景好像参数是以 ...

  8. session 、cookie、token的区别

    session session的中文翻译是“会话”,当用户打开某个web应用时,便与web服务器产生一次session.服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后sess ...

  9. python接口自动化4-常用取token值方法

    前言 在接口测试中我们经常是需要一个登陆token,或者获取其他用到的参数来关联下一个接口用到的参数.这里介绍一些本人常用的方法. 一.简介 不过在哪里我们也是能实现自动化api测试的,我们都知道to ...

随机推荐

  1. iOS 点击屏幕空白区隐藏键盘方法

    iOS开发中,经常要用到输入框,可默认情况下,输入框出来之后,除非点击键盘上面的“Done”或“Next”按钮才能将其隐藏.站在用户体验的角度上看,这种情况很不友好,尤其是不能突显苹果操作的便捷性. ...

  2. 剑指offer 第一个只出现一次的字符 hash

    思路:i表示字符的ASCII码值,cntp[i]表示字符出现的次数. AC代码 class Solution { public: int FirstNotRepeatingChar(string st ...

  3. R︱Linux+Rstudio Server尝鲜笔记(打造最佳Rstudio体验+报错的解决方案)

    Rstudio Server 是Rstudio开发的基于R语言的网页版(只能在Linux),你在手机上都可以运行R,还是挺方便的.就是配置起来有点麻烦.      官方下载链接:https://www ...

  4. Sparklyr与Docker的推荐系统实战

    作者:Harry Zhu 链接:https://zhuanlan.zhihu.com/p/21574497 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 相关内容: ...

  5. 用DriverStudio开发USB驱动程序

    很多写Windows Device Driver的开发人员基本上都是使用Windows DDK进行开发的.但是,现在也有不少人都开始借助一些辅助工具.笔者去年开始接触到DriverStudio,发现它 ...

  6. My97 DatePicker图标触发

    My97 DatePicker图标触发 1.设计源码 <%@ page language="java" import="java.util.*" page ...

  7. AM335x(TQ335x)学习笔记——使用dtb方式启动内核

    老式的u-boot使用ATAGS的方式启动linux内核,本文使用新式的dtb方式启动内核. 我使用的内核是linux-3.17.2版本,下面开始编译内核. (1) 解压内核 [php] view p ...

  8. Spring Boot 文件上传

    其实网上已经有很多这样的文章了.为什么我还要记录一下呢?原因是在工作中对接外系统时,碰到了他们调取我们文件上传接口确存在着http请求头部规范的情况,从而导致用传统方法获取不到参数.今天就来整理下Sp ...

  9. C# wav语音文件合并

    开发完成语音播报产品,由于客户所使用的播放产品种类繁多,在使用HDMI接口播放音频时,由于采用的声卡不同,个别机器会出现播报声音过小,或者不播报的情况.所以采用将语音文件合并播放的方式,来解决此问题. ...

  10. C#图解教程 第十七章 泛型

    泛型 什么是泛型 一个栈的示例 C#中的泛型 继续栈示例 泛型类声明泛型类创建构造类型创建变量和实例 使用泛型的栈的示例比较泛型和非泛型栈 类型参数的约束 Where子句约束类型和次序 泛型方法 声明 ...