在Jmeter中将响应中的变量传递给请求

时间:2017-10-31 22:54:14

标签: jmeter

登录后我有以下回复:

       Response Data: {"status":"ok","userId":"GTBA6520506207","token":"74bb0ba8be426d50"}
Request type : POST

我需要形成我的正则表达式提取器。应该是什么参数?我使用以下内容:

Reference name : token
Regular expression : "$token":"(.+?)"
Template: $1$.

示例请求标头:

Request Headers:
Connection: keep-alive
Referer: ****************/
Accept-Language: en-US,en;q=0.5
X-Token: 59d7ff6833495fcc
X-User-Id: R1RCQTY1MjA1MDYyMDc=
DNT: 1
Accept-Encoding: gzip, deflate, br
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: application/json, text/plain, */*
Host: **************

令牌在Jmeter中登录页面的每次登录时都会更改,但对于所有其他页面,令牌保持不变并且不会更改。我该怎么做才能解决这个问题?

Jmeter结果树:

登录页面 - (每个Jmeter运行时令牌更改)

Page 1 Page 2&第3页 - 令牌保持不变。

谢谢

2 个答案:

答案 0 :(得分:2)

  1. JSON Extractor添加为第一个请求的子节点,并按如下方式对其进行配置:

    • 参考名称:token
    • JSON路径表达式:$.token
    • 其他字段可以保留原样
  2. HTTP Header Manager添加为第二个请求的子级,并将其配置为发送以下标头:

    • X-Token,其值为${token}
    • X-User-Id,其值为${__base64Encode(GTBA6520506207,)}
  3. 您需要安装Custom JMeter Functions插件包才能拥有__base64Encode() function,您可以使用JMeter Plugins Manager安装自定义JMeter功能。

    如果由于某种原因您无法使用JMeter插件,则可以使用__groovy() function编码您的用户名

    ${__groovy('GTBA6520506207'.bytes.encodeBase64() as String,)}
    

答案 1 :(得分:0)

使用以下表达式, 参考名称:令牌 正则表达式:“令牌”:“(。+?)” 模板: $ 1 $

上面的表达式可以正常工作。 “$ {token}”用于调用加载的令牌值。

您还可以使用JSON Path Extractor完成工作。

JSON路径提取器的表达式,

变量名称:令牌 JSON路径表达式: $ ..令牌 比赛号码: -1 默认值:0

此处$ {token}用于在需要的地方调用令牌的值。

JSON Path Extractor