You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter 5.2.1中提取会话信息、传递单值及替换ID方法咨询

问题场景

使用JMeter 5.2.1时,收到如下响应内容:

<!DOCTYPE html>
        <html>
            <head>

                <script id="web.layout.odooscript" type="text/javascript">
                    var odoo = {
                        csrf_token: "123123..",
                        debug: "",
                    };
                </script>
                <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"/>
                <meta name="theme-color" content="#875A7B"/>
                <script type="text/javascript">
                    xx.__session_info__ = {"uid": 2, "is_system": true, "is_admin": true, "user_context": {"lang": "en_US", "uid": 2}, "db": "test", "server_version_info": [1, 0, 0, "final", 0, "e"], "support_url": "https://www.test.com", "name": "admin", "username": "admin", "partner_id": 1 };
                </script>                
                <script type="text/javascript" ...></script>
                <script type="text/javascript" ...></script>
            </head>
            <body class="o_web_client">
            </body>
        </html>

需动态提取响应中的uid(值为2)和username(值为admin),传递至后续请求;同时简化短数值uid的替换操作。

提取uid和username的方案

方案1:正则表达式提取器

为目标请求添加子节点正则表达式提取器,分别提取两个字段:

提取uid

  • 引用名称:uid
  • 正则表达式:"uid": (\d+)
  • 模板:$1$
  • 匹配数字:1(取第一个匹配结果)

提取username

  • 引用名称:username
  • 正则表达式:"username": "([^"]+)"
  • 模板:$1$
  • 匹配数字:1

方案2:JSR223提取器(Groovy)

添加JSR223提取器,选择Groovy语言,脚本框输入以下代码:

def response = prev.getResponseDataAsString()
// 匹配session_info的JSON内容
def sessionInfoMatcher = response =~ /xx.__session_info__ = ({.*?});/
if (sessionInfoMatcher.find()) {
    def sessionInfo = new groovy.json.JsonSlurper().parseText(sessionInfoMatcher[0][1])
    vars.put("uid", sessionInfo.uid.toString())
    vars.put("username", sessionInfo.username)
}

该方法直接解析JSON结构,避免正则匹配的歧义问题。

简化uid替换的方案
  1. 直接变量引用:在后续请求的URL、请求体、参数中,直接使用${uid}和${username},JMeter会自动替换为提取到的值,无需手动修改固定ID。
  2. 跨线程组共享变量:若需在多线程组间传递,可在提取后添加JSR223元件,执行代码将变量设为全局属性:
props.put("global_uid", vars.get("uid"))
props.put("global_username", vars.get("username"))

后续线程组中用${__P(global_uid,)}和${__P(global_username,)}引用全局变量。

内容的提问来源于stack exchange,提问作者ankit dasani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:20:54