使用 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】:

我认为您需要将参数化实现分成两部分:

    协议(httpws)。由于这 2 个协议由不同的采样器处理,您需要有可能根据一些变量在实现之间切换,最简单的方法是使用 Switch Controller,定义您的测试计划如下:

    开关控制器 - 开关值 -> $protocol

    Simple Controller 同名 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的主要内容,如果未能解决你的问题,请参考以下文章

jmeter参数化

jmeter用户登录参数化

jmeter参数化

jmeter参数化

JMeter参数化

Jmeter组件参数化