微信平板模式双设备登录:WeChatPad原理、实操与风控指南
2026/9/26 8:28:30
成功场景:
用户定义变量:ip = ${__P(u8_ip)}
执行命令:jmeter -n -t script.jmx -J u8_ip=10.16.28.12
结果:测试成功,IP正确替换
失败场景:
用户定义变量:ip = ${u8_ip}
执行相同命令
结果:测试失败,URL显示为http://${u8_ip}/...(未替换)
全局有效:整个JMeter实例共享
来源:命令行参数(-J)、配置文件、代码设置
引用方式:${__P(属性名)}
局部有效:通常在定义的作用域内
来源:用户定义变量、提取器、CSV文件
引用方式:${变量名}
| 方面 | 属性 | 变量 |
|---|---|---|
| 作用域 | 全局 | 局部 |
| 命令行传递 | ✅ 支持(-J) | ❌ 不支持 |
| 引用语法 | ${__P(name)} | ${name} |
| 默认值支持 | ${__P(name,默认值)} | 需额外处理 |
命令行传递的是属性,不是变量:
-J u8_ip=10.16.28.12→ 设置属性u8_ip
${__P(u8_ip)}→ 查找属性,找到值
${u8_ip}→ 查找变量,未定义,保持原样
properties
# 用户定义变量中 ip = ${__P(u8_ip, 127.0.0.1)} # 支持默认值 port = ${__P(u8_port, 8080)}在测试开始时,通过前置处理器转换:
groovy
// JSR223前置处理器 vars.put("ip", props.get("u8_ip"));明确来源:命令行参数用属性引用,内部数据用变量
设置默认值:${__P(参数名, 默认值)}
统一管理:集中处理命令行参数
清晰命名:区分属性和变量
命令行传的是属性,要用${__P()}引用;内部定义的是变量,用${}引用。