Jmeter + 金牛座。如何通过 属性 函数设置线程组属性
Jmeter + Taurus. How to set up thread group properties via property function
我目前正在为我们公司测试小型 API,我们需要随机分配对 API 的所有方法的调用次数。我正在使用 Jmeter 5.3 和金牛座。
线程数量是通过 JSR223 采样器 groovy 脚本根据传递的 属性 文件中指定的数量生成的。 Rampup 周期和循环计数通过调用函数指定 ${__P(rampup.period,)}
${__P(loop.count,)}
问题是当我从命令行运行独立使用 jmeter 时,所有功能都正常工作。但是,如果我尝试在该场景中使用 taurus,则所有从属性中获取加速周期、循环计数和线程计数的线程组都无法正常工作。在金牛座中 运行 时,jmeter 似乎无法通过函数获取属性。下面是我的场景和 属性 文件。我必须从文件中省略一些可能是机密的数据
我的金牛座yml是:
execution:
- executor: jmeter
scenario: test
scenarios:
test:
script: *path to jmx file here*
included-configs:
- *path to yml property file here*
modules:
jmeter:
path: *path to existing jmeter executor here*
reporting:
- module: console
- module: final-stats
summary: true # overall samples count and percent of failures
percentiles: true # display average times and percentiles
failed-labels: false # provides list of sample labels with failures
test-duration: true # provides test duration
我的 yml 文件的一部分具有以下属性:
number.of.users: 10000
rampup.period: 300
loop.count: 1
client.id: *client id*
array.of.clients: [*array of ids*]
eks.ids: [1,2,3]
总的来说,我对金牛座、jmeter 和负载测试还比较陌生。我做错了什么(也许我必须获取属性或以其他方式传递它们)还是某种错误?我现在能想到的唯一解决方法是使用 props.put
通过 JSR 采样器放置所有属性,然后执行类似 ${__groovy(props.get('loop.count'),)} (出于某种原因,在此版本的 jmeter 中,您只能以这种方式访问通过脚本放置的道具)
尝试以下操作:
properties.yaml
modules:
jmeter:
properties:
my-number.of.users: 10
test.yaml
execution:
- executor: jmeter
scenario: test
scenarios:
test:
script: test.jmx
included-configs:
- properties.yaml
modules:
jmeter:
path: jmeter
test.jmx
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.3">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">1</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">${__P(my-number.of.users,)}</stringProp>
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
<boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
</ThreadGroup>
<hashTree>
<DebugSampler guiclass="TestBeanGUI" testclass="DebugSampler" testname="Debug Sampler" enabled="true">
<boolProp name="displayJMeterProperties">false</boolProp>
<boolProp name="displayJMeterVariables">true</boolProp>
<boolProp name="displaySystemProperties">false</boolProp>
</DebugSampler>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</jmeterTestPlan>
图片版本:
线程数的文字表示:
${__P(my-number.of.users,)}
每当您在 properties.yaml
的 my-number.of.users: 10
行中更改 10
时,更改将反映在执行的线程数中
更多信息:
我目前正在为我们公司测试小型 API,我们需要随机分配对 API 的所有方法的调用次数。我正在使用 Jmeter 5.3 和金牛座。
线程数量是通过 JSR223 采样器 groovy 脚本根据传递的 属性 文件中指定的数量生成的。 Rampup 周期和循环计数通过调用函数指定 ${__P(rampup.period,)}
${__P(loop.count,)}
问题是当我从命令行运行独立使用 jmeter 时,所有功能都正常工作。但是,如果我尝试在该场景中使用 taurus,则所有从属性中获取加速周期、循环计数和线程计数的线程组都无法正常工作。在金牛座中 运行 时,jmeter 似乎无法通过函数获取属性。下面是我的场景和 属性 文件。我必须从文件中省略一些可能是机密的数据
我的金牛座yml是:
execution:
- executor: jmeter
scenario: test
scenarios:
test:
script: *path to jmx file here*
included-configs:
- *path to yml property file here*
modules:
jmeter:
path: *path to existing jmeter executor here*
reporting:
- module: console
- module: final-stats
summary: true # overall samples count and percent of failures
percentiles: true # display average times and percentiles
failed-labels: false # provides list of sample labels with failures
test-duration: true # provides test duration
我的 yml 文件的一部分具有以下属性:
number.of.users: 10000
rampup.period: 300
loop.count: 1
client.id: *client id*
array.of.clients: [*array of ids*]
eks.ids: [1,2,3]
总的来说,我对金牛座、jmeter 和负载测试还比较陌生。我做错了什么(也许我必须获取属性或以其他方式传递它们)还是某种错误?我现在能想到的唯一解决方法是使用 props.put
通过 JSR 采样器放置所有属性,然后执行类似 ${__groovy(props.get('loop.count'),)} (出于某种原因,在此版本的 jmeter 中,您只能以这种方式访问通过脚本放置的道具)
尝试以下操作:
properties.yaml
modules: jmeter: properties: my-number.of.users: 10
test.yaml
execution: - executor: jmeter scenario: test scenarios: test: script: test.jmx included-configs: - properties.yaml modules: jmeter: path: jmeter
test.jmx
<?xml version="1.0" encoding="UTF-8"?> <jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.3"> <hashTree> <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true"> <stringProp name="TestPlan.comments"></stringProp> <boolProp name="TestPlan.functional_mode">false</boolProp> <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp> <boolProp name="TestPlan.serialize_threadgroups">false</boolProp> <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="TestPlan.user_define_classpath"></stringProp> </TestPlan> <hashTree> <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true"> <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> <boolProp name="LoopController.continue_forever">false</boolProp> <stringProp name="LoopController.loops">1</stringProp> </elementProp> <stringProp name="ThreadGroup.num_threads">${__P(my-number.of.users,)}</stringProp> <stringProp name="ThreadGroup.ramp_time">1</stringProp> <boolProp name="ThreadGroup.scheduler">false</boolProp> <stringProp name="ThreadGroup.duration"></stringProp> <stringProp name="ThreadGroup.delay"></stringProp> <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp> </ThreadGroup> <hashTree> <DebugSampler guiclass="TestBeanGUI" testclass="DebugSampler" testname="Debug Sampler" enabled="true"> <boolProp name="displayJMeterProperties">false</boolProp> <boolProp name="displayJMeterVariables">true</boolProp> <boolProp name="displaySystemProperties">false</boolProp> </DebugSampler> <hashTree/> </hashTree> </hashTree> </hashTree> </jmeterTestPlan>
图片版本:
线程数的文字表示:
${__P(my-number.of.users,)}
每当您在 properties.yaml
的 my-number.of.users: 10
行中更改 10
时,更改将反映在执行的线程数中
更多信息: