Skip to Content
Technical Articles
Author's profile photo Jacky Liu

CPI Iflow Concurent Test with Jmeter

For some high concurrent integration scenarios, we need to design iflow  with some method like using async API in target system, using event mesh, etc . Of cource  we need to take out concurrent test for deployed  iflow in Q system. Today I will demo how to use jmeter to carry out concurrent test for deployed iflow .

For the testing , I have built and deployed an iflow in CPI as the following:

 

Use postman to test iflow first:

Use Jmeter to do concurrent test:

Check the result in CPI:

The End.

Thank you for your time!

Best regards!

Jacky Liu

 

 

Assigned Tags

      5 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Michal Krawczyk
      Michal Krawczyk

      Good blog Jacky!  On the EDA testing from Ent Level, I've also posted a similar blog:

      https://blogs.sap.com/2023/04/07/event-driven-architecture-eda-performance-testing-for-sap-event-mesh/

       

      BR,

      Michal Krawczyk

      Author's profile photo Jacky Liu
      Jacky Liu
      Blog Post Author

      Hi, Michal Krawczyk,

      Thanks for your information! It really help to explain how to utilize EDA integration for high concurrent integration scenarios .

      BR.

      Jacky Liu

      Author's profile photo Daniel Graversen
      Daniel Graversen

      Hi Jacky,

      I think JMeter is a great tool to test the performance of your integration suite and like the ID generate you are using.

      I guess you can change the usage of bearer token to just send the service id/key as username password.

      My experiment with jmeter where you can see what I tried to use.

       

      Daniel

      Author's profile photo Jacky Liu
      Jacky Liu
      Blog Post Author

      Hi, Daniel,

      Thank you so much! It is a so wonderful demo video about CPI performance test  with Jmeter . I can't wait to try the method !

       

      Jacky

       

       

      Author's profile photo Jacky Liu
      Jacky Liu
      Blog Post Author

      Hi, Danial

      I tested with your method and succeed .

      Copy the following code and save as jmx file  . Maintain the default variable and post path and body . The test is succeed .

       

      <?xml version="1.0" encoding="UTF-8"?>
      <jmeterTestPlan version="1.2" properties="5.0" jmeter="5.5">
        <hashTree>
          <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="CPIPerformanceTest" 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>
            <ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="BaseURL" enabled="true">
              <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
                <collectionProp name="Arguments.arguments"/>
              </elementProp>
              <stringProp name="HTTPSampler.domain">${BaseServiceURL}</stringProp>
              <stringProp name="HTTPSampler.port"></stringProp>
              <stringProp name="HTTPSampler.protocol">https</stringProp>
              <stringProp name="HTTPSampler.contentEncoding"></stringProp>
              <stringProp name="HTTPSampler.path"></stringProp>
              <stringProp name="HTTPSampler.concurrentPool">6</stringProp>
              <stringProp name="HTTPSampler.connect_timeout"></stringProp>
              <stringProp name="HTTPSampler.response_timeout"></stringProp>
            </ConfigTestElement>
            <hashTree/>
            <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="Default Variables" enabled="true">
              <collectionProp name="Arguments.arguments">
                <elementProp name="client_id" elementType="Argument">
                  <stringProp name="Argument.name">client_id</stringProp>
                  <stringProp name="Argument.value">sb-6c6f5786-45d9-40c3-b238-fc3fd251b8ab!b126731|it-rt-integration-suite-92lelxp5!b117912</stringProp>
                  <stringProp name="Argument.metadata">=</stringProp>
                </elementProp>
                <elementProp name="client_secret" elementType="Argument">
                  <stringProp name="Argument.name">client_secret</stringProp>
                  <stringProp name="Argument.value">5404072e-9642-425c-b307-759e3af7c703$QJJVbp14s85DyTzquCJpZ7nwbOpj2NEwuU6zlX51YzU=</stringProp>
                  <stringProp name="Argument.metadata">=</stringProp>
                </elementProp>
                <elementProp name="isBasic" elementType="Argument">
                  <stringProp name="Argument.name">isBasic</stringProp>
                  <stringProp name="Argument.value">0</stringProp>
                  <stringProp name="Argument.metadata">=</stringProp>
                  <stringProp name="Argument.desc">set 1 if you would like to use basic authentication. </stringProp>
                </elementProp>
                <elementProp name="BaseServiceURL" elementType="Argument">
                  <stringProp name="Argument.name">BaseServiceURL</stringProp>
                  <stringProp name="Argument.value">integration-suite-92lelxp5.it-cpi018-rt.cfapps.eu10-003.hana.ondemand.com</stringProp>
                  <stringProp name="Argument.metadata">=</stringProp>
                  <stringProp name="Argument.desc">used during service call</stringProp>
                </elementProp>
                <elementProp name="BaseTokenURL" elementType="Argument">
                  <stringProp name="Argument.name">BaseTokenURL</stringProp>
                  <stringProp name="Argument.value">integration-suite-92lelxp5.authentication.eu10.hana.ondemand.com</stringProp>
                  <stringProp name="Argument.metadata">=</stringProp>
                  <stringProp name="Argument.desc">used for fetching token</stringProp>
                </elementProp>
                <elementProp name="basicToken" elementType="Argument">
                  <stringProp name="Argument.name">basicToken</stringProp>
                  <stringProp name="Argument.value">nana</stringProp>
                  <stringProp name="Argument.metadata">=</stringProp>
                  <stringProp name="Argument.desc">used only in basic authentication</stringProp>
                </elementProp>
              </collectionProp>
              <stringProp name="TestPlan.comments">all variables values used in th script can be modified only in this place.</stringProp>
            </Arguments>
            <hashTree/>
            <SetupThreadGroup guiclass="SetupThreadGroupGui" testclass="SetupThreadGroup" testname="getToken" enabled="true">
              <stringProp name="TestPlan.comments">Do not modify anything here</stringProp>
              <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>
              <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
            </SetupThreadGroup>
            <hashTree>
              <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="GetToken" enabled="true">
                <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
                  <collectionProp name="Arguments.arguments">
                    <elementProp name="client_id" elementType="HTTPArgument">
                      <boolProp name="HTTPArgument.always_encode">true</boolProp>
                      <stringProp name="Argument.value">${client_id}</stringProp>
                      <stringProp name="Argument.metadata">=</stringProp>
                      <boolProp name="HTTPArgument.use_equals">true</boolProp>
                      <stringProp name="Argument.name">client_id</stringProp>
                    </elementProp>
                    <elementProp name="client_secret" elementType="HTTPArgument">
                      <boolProp name="HTTPArgument.always_encode">true</boolProp>
                      <stringProp name="Argument.value">${client_secret}</stringProp>
                      <stringProp name="Argument.metadata">=</stringProp>
                      <boolProp name="HTTPArgument.use_equals">true</boolProp>
                      <stringProp name="Argument.name">client_secret</stringProp>
                    </elementProp>
                    <elementProp name="grant_type" elementType="HTTPArgument">
                      <boolProp name="HTTPArgument.always_encode">true</boolProp>
                      <stringProp name="Argument.value">client_credentials</stringProp>
                      <stringProp name="Argument.metadata">=</stringProp>
                      <boolProp name="HTTPArgument.use_equals">true</boolProp>
                      <stringProp name="Argument.name">grant_type</stringProp>
                    </elementProp>
                  </collectionProp>
                </elementProp>
                <stringProp name="HTTPSampler.domain">${BaseTokenURL}</stringProp>
                <stringProp name="HTTPSampler.port"></stringProp>
                <stringProp name="HTTPSampler.protocol">https</stringProp>
                <stringProp name="HTTPSampler.contentEncoding"></stringProp>
                <stringProp name="HTTPSampler.path">/oauth/token</stringProp>
                <stringProp name="HTTPSampler.method">POST</stringProp>
                <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
                <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
                <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
                <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
                <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
                <stringProp name="HTTPSampler.implementation">HttpClient4</stringProp>
                <stringProp name="HTTPSampler.connect_timeout"></stringProp>
                <stringProp name="HTTPSampler.response_timeout"></stringProp>
              </HTTPSamplerProxy>
              <hashTree>
                <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
                  <collectionProp name="HeaderManager.headers">
                    <elementProp name="" elementType="Header">
                      <stringProp name="Header.name">Accept</stringProp>
                      <stringProp name="Header.value">*/*</stringProp>
                    </elementProp>
                  </collectionProp>
                </HeaderManager>
                <hashTree/>
                <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract Token" enabled="true">
                  <stringProp name="RegexExtractor.useHeaders">false</stringProp>
                  <stringProp name="RegexExtractor.refname">token</stringProp>
                  <stringProp name="RegexExtractor.regex">access_token&quot;:&quot;(.+?)&quot;</stringProp>
                  <stringProp name="RegexExtractor.template">$1$</stringProp>
                  <stringProp name="RegexExtractor.default">null</stringProp>
                  <stringProp name="RegexExtractor.match_number">1</stringProp>
                </RegexExtractor>
                <hashTree/>
                <BeanShellPostProcessor guiclass="TestBeanGUI" testclass="BeanShellPostProcessor" testname="BeanShell PostProcessor" enabled="true">
                  <stringProp name="filename"></stringProp>
                  <stringProp name="parameters"></stringProp>
                  <boolProp name="resetInterpreter">false</boolProp>
                  <stringProp name="script">import org.apache.jmeter.util.JMeterUtils;
      
      
      token=vars.get(&quot;token&quot;);
      
      log.info(&quot;token is&quot;+token);
      String mainToken=&quot;Bearer &quot;+token;
      
      
      if (${isBasic}==1)
      {
      mainToken=&quot;Basic &quot;+vars.get(&quot;basicToken&quot;);
      
      }
      
      log.info(&quot;main token is&quot;+mainToken);
      JMeterUtils.setProperty(&quot;globalToken&quot;, mainToken);</stringProp>
                </BeanShellPostProcessor>
                <hashTree/>
              </hashTree>
            </hashTree>
            <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="MaterialCreateIflow" enabled="true">
              <stringProp name="TestPlan.comments">Loop count can control number of messages</stringProp>
              <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>
                <intProp name="LoopController.loops">-1</intProp>
              </elementProp>
              <stringProp name="ThreadGroup.num_threads">10</stringProp>
              <stringProp name="ThreadGroup.ramp_time"></stringProp>
              <boolProp name="ThreadGroup.scheduler">true</boolProp>
              <stringProp name="ThreadGroup.duration">10</stringProp>
              <stringProp name="ThreadGroup.delay"></stringProp>
              <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
            </ThreadGroup>
            <hashTree>
              <RandomVariableConfig guiclass="TestBeanGUI" testclass="RandomVariableConfig" testname="material number" enabled="true">
                <stringProp name="variableName">matnr</stringProp>
                <stringProp name="outputFormat">MAT00000</stringProp>
                <stringProp name="minimumValue">1</stringProp>
                <stringProp name="maximumValue">19999</stringProp>
                <stringProp name="randomSeed"></stringProp>
                <boolProp name="perThread">true</boolProp>
              </RandomVariableConfig>
              <hashTree/>
              <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="POST Service 1" enabled="true">
                <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
                <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
                  <collectionProp name="Arguments.arguments">
                    <elementProp name="" elementType="HTTPArgument">
                      <boolProp name="HTTPArgument.always_encode">false</boolProp>
                      <stringProp name="Argument.value">
      &lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; &gt;
         &lt;soapenv:Header/&gt;
         &lt;soapenv:Body&gt;
      &lt;Z1MATMAS05&gt;
      	&lt;IDOC BEGIN=&quot;1&quot;&gt;
      		&lt;EDI_DC40 SEGMENT=&quot;1&quot;&gt;
      		&lt;/EDI_DC40&gt;
      		&lt;E1MARAM SEGMENT=&quot;1&quot;&gt;
      			&lt;MATNR&gt;${matnr}&lt;/MATNR&gt;
      			&lt;MTART&gt;FERT&lt;/MTART&gt;
      			&lt;MEINS&gt;PC&lt;/MEINS&gt;
                  &lt;MBRSH&gt;M&lt;/MBRSH&gt;
      			&lt;E1MAKTM SEGMENT=&quot;1&quot;&gt;
      				&lt;MAKTX&gt;Reifen&lt;/MAKTX&gt;
      				&lt;SPRAS_ISO&gt;DE&lt;/SPRAS_ISO&gt;
      			&lt;/E1MAKTM&gt;
      			&lt;E1MAKTM SEGMENT=&quot;1&quot;&gt;
      				&lt;MAKTX&gt;Tire&lt;/MAKTX&gt;
      				&lt;SPRAS_ISO&gt;EN&lt;/SPRAS_ISO&gt;
      			&lt;/E1MAKTM&gt;
      			&lt;E1MAKTM SEGMENT=&quot;1&quot;&gt;
      				&lt;MAKTX&gt;Neumatico&lt;/MAKTX&gt;
      				&lt;SPRAS_ISO&gt;ES&lt;/SPRAS_ISO&gt;
      			&lt;/E1MAKTM&gt;
      		&lt;/E1MARAM&gt;
      	&lt;/IDOC&gt;
      &lt;/Z1MATMAS05&gt;
         &lt;/soapenv:Body&gt;
      &lt;/soapenv:Envelope&gt;</stringProp>
                      <stringProp name="Argument.metadata">=</stringProp>
                    </elementProp>
                  </collectionProp>
                </elementProp>
                <stringProp name="HTTPSampler.domain"></stringProp>
                <stringProp name="HTTPSampler.port"></stringProp>
                <stringProp name="HTTPSampler.protocol"></stringProp>
                <stringProp name="HTTPSampler.contentEncoding"></stringProp>
                <stringProp name="HTTPSampler.path">/cxf/product</stringProp>
                <stringProp name="HTTPSampler.method">POST</stringProp>
                <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
                <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
                <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
                <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
                <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
                <stringProp name="HTTPSampler.implementation">HttpClient4</stringProp>
                <stringProp name="HTTPSampler.connect_timeout"></stringProp>
                <stringProp name="HTTPSampler.response_timeout"></stringProp>
                <stringProp name="TestPlan.comments">Created from cURL on 2022-08-19T14:11:19.780452</stringProp>
              </HTTPSamplerProxy>
              <hashTree>
                <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
                  <collectionProp name="HeaderManager.headers">
                    <elementProp name="" elementType="Header">
                      <stringProp name="Header.name">Authorization</stringProp>
                      <stringProp name="Header.value">${__property(globalToken)}</stringProp>
                    </elementProp>
                    <elementProp name="" elementType="Header">
                      <stringProp name="Header.name">Content-Type</stringProp>
                      <stringProp name="Header.value">application/xml</stringProp>
                    </elementProp>
                    <elementProp name="" elementType="Header">
                      <stringProp name="Header.name">Accept</stringProp>
                      <stringProp name="Header.value">*/*</stringProp>
                    </elementProp>
                  </collectionProp>
                </HeaderManager>
                <hashTree/>
              </hashTree>
              <TestAction guiclass="TestActionGui" testclass="TestAction" testname="ThinkTime" enabled="true">
                <intProp name="ActionProcessor.action">1</intProp>
                <intProp name="ActionProcessor.target">0</intProp>
                <stringProp name="ActionProcessor.duration">${__Random(1000,5000,)}</stringProp>
              </TestAction>
              <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>
              <boolProp name="ResultCollector.success_only_logging">true</boolProp>
            </ResultCollector>
            <hashTree/>
            <ResultCollector guiclass="SimpleDataWriter" testclass="ResultCollector" testname="Error Result" enabled="true">
              <boolProp name="ResultCollector.error_logging">true</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>true</responseData>
                  <samplerData>true</samplerData>
                  <xml>true</xml>
                  <fieldNames>false</fieldNames>
                  <responseHeaders>true</responseHeaders>
                  <requestHeaders>true</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">Error_${__time(dd-MM-yyyy-hh-mm-ss,)}.jtl</stringProp>
            </ResultCollector>
            <hashTree/>
            <ResultCollector guiclass="SimpleDataWriter" testclass="ResultCollector" testname="CSV Result" 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">CSV_${__time(dd-MM-yyyy-hh-mm-ss,)}.jtl</stringProp>
            </ResultCollector>
            <hashTree/>
            <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" 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/>
            <ResultCollector guiclass="StatVisualizer" testclass="ResultCollector" testname="Aggregate Report" 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>
      </jmeterTestPlan>