Переопределение контроллера JMeter ForEach Имя выходной переменной? - PullRequest
0 голосов
/ 30 января 2019

При использовании JMeter ForEach Controller в группе потоков я определил начальный индекс переменной, например: ${startFrom}, который отличается для каждого потока и имя выходной переменной как currentFile.За ним следует сэмплер журналирования, и я вижу, что startFrom передается, как ожидается, и отличается для каждого потока, но ВСЕ потоки имеют одинаковое currentFile.

Я ожидал, что каждый поток будет иметь разные currentFile, поскольку они должны начинаться с другого индекса.Что я делаю неправильно, и как я могу заставить каждый поток иметь правильный currentFile?

-EDIT-

На самом деле я пытаюсь сделать следующее: получить все файлы изFTP в одном потоке, затем разделяет файлы на пакеты, чтобы каждый поток извлекал равное количество тех файлов, которые я извлек в этом одном потоке.Я добавлю краткое изменение, показывающее мою проблему.

Пример, показывающий эту проблему:

<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.0 r1840935">
  <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.serialize_threadgroups">true</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="FTP Fetch" 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">1</stringProp>
        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
        <boolProp name="ThreadGroup.scheduler">false</boolProp>
        <stringProp name="ThreadGroup.duration"></stringProp>
        <stringProp name="ThreadGroup.delay"></stringProp>
      </ThreadGroup>
      <hashTree>
        <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="Generate FTP dummy files" enabled="true">
          <stringProp name="cacheKey">true</stringProp>
          <stringProp name="filename"></stringProp>
          <stringProp name="parameters"></stringProp>
          <stringProp name="script">def range = 1..10
for (n in range) {
    props.put(&apos;file_&apos; + n, String.valueOf(n))
}
</stringProp>
          <stringProp name="scriptLanguage">groovy</stringProp>
        </JSR223Sampler>
        <hashTree/>
      </hashTree>
      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="FTP pull" 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">5</stringProp>
        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
        <boolProp name="ThreadGroup.scheduler">false</boolProp>
        <stringProp name="ThreadGroup.duration"></stringProp>
        <stringProp name="ThreadGroup.delay"></stringProp>
      </ThreadGroup>
      <hashTree>
        <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="Copy from props to vars for visibility in FTP requests" enabled="true">
          <stringProp name="TestPlan.comments">Not really used in this example, but still...</stringProp>
          <stringProp name="scriptLanguage">groovy</stringProp>
          <stringProp name="parameters"></stringProp>
          <stringProp name="filename"></stringProp>
          <stringProp name="cacheKey">true</stringProp>
          <stringProp name="script">def range = 1..10
for (n in range) {
    vars.put(&apos;file_&apos; + n, props.get(&apos;file_&apos; + n))
    log.info(&apos;Copied: &apos; + vars.get(&apos;file_&apos; + n))
}

// this would be paging logic with startFrom as well as endWith
vars.put(&apos;startFrom&apos;, String.valueOf(ctx.getThreadNum() + 2)) </stringProp>
        </JSR223Sampler>
        <hashTree/>
        <ForeachController guiclass="ForeachControlPanel" testclass="ForeachController" testname="ForEach Controller" enabled="true">
          <stringProp name="ForeachController.inputVal">file</stringProp>
          <stringProp name="ForeachController.returnVal">currentFile</stringProp>
          <boolProp name="ForeachController.useSeparator">true</boolProp>
          <stringProp name="ForeachController.startIndex">${startFrom}</stringProp>
        </ForeachController>
        <hashTree>
          <DebugSampler guiclass="TestBeanGUI" testclass="DebugSampler" testname="Print debug values" enabled="true">
            <boolProp name="displayJMeterProperties">true</boolProp>
            <boolProp name="displayJMeterVariables">true</boolProp>
            <boolProp name="displaySystemProperties">false</boolProp>
          </DebugSampler>
          <hashTree/>
          <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="JSR223 Sampler" enabled="true">
            <stringProp name="scriptLanguage">groovy</stringProp>
            <stringProp name="parameters"></stringProp>
            <stringProp name="filename"></stringProp>
            <stringProp name="cacheKey">true</stringProp>
            <stringProp name="script">log.info(&apos;Copying file: &apos; + vars.get(&apos;currentFile&apos;))</stringProp>
          </JSR223Sampler>
          <hashTree/>
        </hashTree>
        <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
          <boolProp name="ResultCollector.error_logging">false</boolProp>
          <objProp>
            <name>saveConfig</name>
            <value class="SampleSaveConfiguration">
              <time>true</time>
              <latency>true</latency>
              <timestamp>true</timestamp>
              <success>true</success>
              <label>true</label>
              <code>true</code>
              <message>true</message>
              <threadName>true</threadName>
              <dataType>true</dataType>
              <encoding>false</encoding>
              <assertions>true</assertions>
              <subresults>true</subresults>
              <responseData>false</responseData>
              <samplerData>false</samplerData>
              <xml>false</xml>
              <fieldNames>true</fieldNames>
              <responseHeaders>false</responseHeaders>
              <requestHeaders>false</requestHeaders>
              <responseDataOnError>false</responseDataOnError>
              <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
              <assertionsResultsToSave>0</assertionsResultsToSave>
              <bytes>true</bytes>
              <sentBytes>true</sentBytes>
              <url>true</url>
              <threadCounts>true</threadCounts>
              <idleTime>true</idleTime>
              <connectTime>true</connectTime>
            </value>
          </objProp>
          <stringProp name="filename"></stringProp>
        </ResultCollector>
        <hashTree/>
      </hashTree>
    </hashTree>
  </hashTree>
</jmeterTestPlan>

Почему каждый поток показывает в журнале, что копирует каждый файл, когда отладка показывает разные startFromценности?Скорее всего, я что-то неправильно использую, но что?

1 Ответ

0 голосов
/ 31 января 2019

Я не могу воспроизвести вашу проблему:

  1. Предполагая следующие Переменные JMeter определены:

    foo_2=bar
    foo_3=baz
    foo_4=qux
    
  2. Иследующая ForEach Controller конфигурация

    enter image description here

  3. JMeter начинается со смещения, заданного __ threadNum() функция, то есть:

    • пользователь 1 повторяет все переменные
    • пользователь 2 повторяет только 2-й и 3-й переменная
    • пользователь 3 получает только 3-й переменная

      enter image description here

Принимая все вышеизложенное:

  • Либо ваше понимание того, как работает контроллер ForEach, неверно
  • Или значение переменной ${startFrom} одинаково для всех потоков,вы можете дважды проверить его с помощью Debug Sampler

Также обратите внимание на плагин Confisting Listing Config , если вам нужно условно выполнить итерацию черезGH файлы в папке - это может быть гораздо проще в использовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...