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替换的方案
- 直接变量引用:在后续请求的URL、请求体、参数中,直接使用
${uid}和${username},JMeter会自动替换为提取到的值,无需手动修改固定ID。 - 跨线程组共享变量:若需在多线程组间传递,可在提取后添加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
相关产品推荐
相关产品推荐

