【问题标题】:Passing a variable from response to request in Jmeter在Jmeter中将变量从响应传递到请求
【发布时间】:2017-11-01 18:48:35
【问题描述】:

所以我登录后有以下响应:

       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 运行时令牌更改)

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

谢谢

【问题讨论】:

  • 请出示您的测试计划,您是否将令牌变量分配到另一个地方作为用户参数?

标签: jmeter


【解决方案1】:
  1. JSON Extractor添加为第一个请求的子节点并配置如下:

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

    • X-Token 的值为 ${token}
    • X-User-Id 的值为 ${__base64Encode(GTBA6520506207,)}

您需要安装Custom JMeter Functions 插件包才能拥有__base64Encode() function,您可以使用JMeter Plugins Manager 安装自定义JMeter 功能。


如果由于某种原因您不能使用 JMeter 插件,您可以使用 __groovy() function 对您的用户名进行编码

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

【讨论】:

    【解决方案2】:

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

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

    您还可以使用 JSON 路径提取器完成工作。

    JSON 路径提取器的表达式,

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

    这里${token}用于在需要的地方调用token的值。

    JSON Path Extractor

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多