使用 JMeter 参数化变量 $URL
Posted
技术标签:
【中文标题】使用 JMeter 参数化变量 $URL【英文标题】:Parametrization variables $URL using JMeter 【发布时间】:2018-10-13 16:30:51 【问题描述】:我在 JMeter 中测试后端项目 我想可以同时测试 localhost 和 url 开发地址。 我想在 localhost 和 url 开发地址之间切换 JMeter 中的 URL 地址,并且可以在 http://$url 和 ws://$url 之间更改 $url 变量。
所以我想设置变量 $URL 并且可以在 websocket 和 http 连接之间进行更改,例如我可以选择是否要将 POST 发送到 web socket 或 http 连接。 我也想在 localhost 和开发 URL 之间进行更改。
我可以在 JMeter 中最好地设置什么? ;) 请逐步描述我。
【问题讨论】:
【参考方案1】:我认为您需要将参数化实现分成两部分:
协议(http
或 ws
)。由于这 2 个协议由不同的采样器处理,您需要有可能根据一些变量在实现之间切换,最简单的方法是使用 Switch Controller,定义您的测试计划如下:
开关控制器 - 开关值 -> $protocol
http
HTTP Samplers
名称为ws
的简单控制器
WebSocket Samplers
因此,如果$protocol
变量值为http
- 您将执行HTTP Request
采样器,反之亦然,如果需要,请查看Selection Statements in JMeter Made Easy 文章以获得详细说明。
URL 变量 - 希望你知道如何参数化它,一旦你以某种方式定义了它的值,只需将其放入相关采样器的 Path 字段中
关于参数化本身,根据您希望变量值的位置,可能会有不同的方法。我个人坚持使用命令行参数,因为这是提供外部参数的最CI 友好的方式。
将User Defined Variables 添加到您的测试计划并像这样配置它
使用-J command-line argument 提供值,例如:
jmeter -Jprotocol=http -JURL=example.com -n -t test.jmx -l result.jtl
【讨论】:
【参考方案2】:JMeter 不直接采用origin 参数,而是要求您将每个组件作为单独的参数提供,这有点不方便。
如果您可以使用 Bash 和 Python,以下单行代码将自动执行此过程:
function jmorigin python3<<<"from urllib.parse import *; a=urlsplit(\"$1\"); print('-Jserver='+a.hostname+' -Jprotocol='+a.scheme+' -Jport='+str(a.port))" ;
使用这个,可以简化JMeter的参数化:
ORIGIN=https://example.com:443
jmeter $(jmorigin $ORIGIN)
扩展为...
jmeter -Jserver=example.com -Jprotocol=https -Jport=443
【讨论】:
以上是关于使用 JMeter 参数化变量 $URL的主要内容,如果未能解决你的问题,请参考以下文章