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 中,您只能以这种方式访问​​通过脚本放置的道具)

尝试以下操作:

  1. properties.yaml

    modules:
      jmeter:
        properties:
          my-number.of.users: 10
    
  2. test.yaml

    execution:
      - executor: jmeter
        scenario: test
    
    scenarios:
      test:
        script: test.jmx
    
    included-configs:
    - properties.yaml
    
    modules:
      jmeter:
        path: jmeter
    
  3. 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.yamlmy-number.of.users: 10 行中更改 10 时,更改将反映在执行的线程数中

更多信息: