sunny_teo
sunny_teo

Reputation: 1999

Blank attachment sent by SMTP Sampler

I have 2 thread groups. After first thread group is executed, the second thread group will send an email with SMTP sampler along with attachment of the result file generated from the first thread group. I am receiving the email, but it is blank.

-Test Plan (Execute thread group one by one)

-Thread Group1

-Multiple http requests

-View Results Tree (generate result file)

-Thread Group 2

-SMTP Sampler to send the email with result file (multipart)

I have tried with teardown thread group again the same result. I am running in GUI mode and want result of first thread group to be sent via email after thread group 1 execution is completed.

Jmeter version 5.1.1

Running on windows 7.

TestPlan Snapshot:- enter image description here

TestPlan

<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.1.1 r1855137">
  <hashTree>
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Smoke Test Suite Prod" 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>
      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
    </TestPlan>
    <hashTree>
      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Smoke Test Suite Prod" 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>
        <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Browse" enabled="true"/>
        <hashTree>
          <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Browse Page1" 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">www.google.com</stringProp>
            <stringProp name="HTTPSampler.port"></stringProp>
            <stringProp name="HTTPSampler.protocol">http</stringProp>
            <stringProp name="HTTPSampler.contentEncoding"></stringProp>
            <stringProp name="HTTPSampler.path"></stringProp>
            <stringProp name="HTTPSampler.method">GET</stringProp>
            <boolProp name="HTTPSampler.follow_redirects">false</boolProp>
            <boolProp name="HTTPSampler.auto_redirects">true</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.connect_timeout"></stringProp>
            <stringProp name="HTTPSampler.response_timeout"></stringProp>
          </HTTPSamplerProxy>
          <hashTree/>
          <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Browse Page 2" 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">www.yahoo.com</stringProp>
            <stringProp name="HTTPSampler.port"></stringProp>
            <stringProp name="HTTPSampler.protocol">http</stringProp>
            <stringProp name="HTTPSampler.contentEncoding"></stringProp>
            <stringProp name="HTTPSampler.path"></stringProp>
            <stringProp name="HTTPSampler.method">GET</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.connect_timeout"></stringProp>
            <stringProp name="HTTPSampler.response_timeout"></stringProp>
          </HTTPSamplerProxy>
          <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>true</encoding>
              <assertions>false</assertions>
              <subresults>false</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>
              <fileName>true</fileName>
              <hostname>true</hostname>
              <threadCounts>true</threadCounts>
              <sampleCount>true</sampleCount>
              <idleTime>true</idleTime>
              <connectTime>true</connectTime>
            </value>
          </objProp>
          <stringProp name="filename">Smoke_Test_Results.csv</stringProp>
        </ResultCollector>
        <hashTree/>
      </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">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>
        <TestAction guiclass="TestActionGui" testclass="TestAction" testname="Pause Action" enabled="true">
          <intProp name="ActionProcessor.action">1</intProp>
          <intProp name="ActionProcessor.target">0</intProp>
          <stringProp name="ActionProcessor.duration">5000</stringProp>
        </TestAction>
        <hashTree/>
        <SmtpSampler guiclass="SmtpSamplerGui" testclass="SmtpSampler" testname="Email Sampler" enabled="true">
          <stringProp name="SMTPSampler.server"></stringProp>
          <stringProp name="SMTPSampler.serverPort"></stringProp>
          <stringProp name="SMTPSampler.mailFrom"></stringProp>
          <stringProp name="SMTPSampler.replyTo"></stringProp>
          <stringProp name="SMTPSampler.receiverTo"></stringProp>
          <stringProp name="SMTPSampler.receiverCC"></stringProp>
          <stringProp name="SMTPSampler.receiverBCC"></stringProp>
          <stringProp name="SMTPSampler.subject">Smoke Test Report</stringProp>
          <stringProp name="SMTPSampler.suppressSubject">false</stringProp>
          <stringProp name="SMTPSampler.include_timestamp">false</stringProp>
          <stringProp name="SMTPSampler.message">Hi All,

Please find the attached Test Report with Thread Group.

</stringProp>
          <stringProp name="SMTPSampler.plainBody">false</stringProp>
          <stringProp name="SMTPSampler.attachFile">XXXXXPathXXX\apache-jmeter-5.1.1\bin\Smoke_Test_Results.csv</stringProp>
          <stringProp name="SMTPSampler.useSSL">false</stringProp>
          <stringProp name="SMTPSampler.useStartTLS">false</stringProp>
          <stringProp name="SMTPSampler.trustAllCerts">false</stringProp>
          <stringProp name="SMTPSampler.enforceStartTLS">false</stringProp>
          <stringProp name="SMTPSampler.useLocalTrustStore">false</stringProp>
          <stringProp name="SMTPSampler.trustStoreToUse"></stringProp>
          <stringProp name="SMTPSampler.tlsProtocols"></stringProp>
          <boolProp name="SMTPSampler.use_eml">false</boolProp>
          <stringProp name="SMTPSampler.emlMessageToSend"></stringProp>
          <stringProp name="SMTPSampler.useAuth">false</stringProp>
          <stringProp name="SMTPSampler.password"></stringProp>
          <stringProp name="SMTPSampler.username"></stringProp>
          <stringProp name="SMTPSampler.messageSizeStatistics">false</stringProp>
          <stringProp name="SMTPSampler.enableDebug">true</stringProp>
          <collectionProp name="SMTPSampler.headerFields"/>
        </SmtpSampler>
        <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>
              <threadCounts>true</threadCounts>
              <idleTime>true</idleTime>
              <connectTime>true</connectTime>
            </value>
          </objProp>
          <stringProp name="filename"></stringProp>
        </ResultCollector>
        <hashTree/>
      </hashTree>
      <PostThreadGroup guiclass="PostThreadGroupGui" testclass="PostThreadGroup" testname="tearDown 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">1</stringProp>
        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
        <boolProp name="ThreadGroup.scheduler">false</boolProp>
        <stringProp name="ThreadGroup.duration">6</stringProp>
        <stringProp name="ThreadGroup.delay">5</stringProp>
      </PostThreadGroup>
      <hashTree>
        <TestAction guiclass="TestActionGui" testclass="TestAction" testname="Pause Action" enabled="true">
          <intProp name="ActionProcessor.action">1</intProp>
          <intProp name="ActionProcessor.target">0</intProp>
          <stringProp name="ActionProcessor.duration">5000</stringProp>
        </TestAction>
        <hashTree/>
        <SmtpSampler guiclass="SmtpSamplerGui" testclass="SmtpSampler" testname="Email Sampler" enabled="true">
          <stringProp name="SMTPSampler.server"></stringProp>
          <stringProp name="SMTPSampler.serverPort"></stringProp>
          <stringProp name="SMTPSampler.mailFrom"></stringProp>
          <stringProp name="SMTPSampler.replyTo"></stringProp>
          <stringProp name="SMTPSampler.receiverTo"></stringProp>
          <stringProp name="SMTPSampler.receiverCC"></stringProp>
          <stringProp name="SMTPSampler.receiverBCC"></stringProp>
          <stringProp name="SMTPSampler.subject">Smoke Test Report</stringProp>
          <stringProp name="SMTPSampler.suppressSubject">false</stringProp>
          <stringProp name="SMTPSampler.include_timestamp">false</stringProp>
          <stringProp name="SMTPSampler.message">Hi All,

Please find the attached Test Report with tearDown.

Thanks &amp; Regards,
</stringProp>
          <stringProp name="SMTPSampler.plainBody">false</stringProp>
          <stringProp name="SMTPSampler.attachFile">XXXXXPathXXX\apache-jmeter-5.1.1\bin\Smoke_Test_Results.csv</stringProp>
          <stringProp name="SMTPSampler.useSSL">false</stringProp>
          <stringProp name="SMTPSampler.useStartTLS">false</stringProp>
          <stringProp name="SMTPSampler.trustAllCerts">false</stringProp>
          <stringProp name="SMTPSampler.enforceStartTLS">false</stringProp>
          <stringProp name="SMTPSampler.useLocalTrustStore">false</stringProp>
          <stringProp name="SMTPSampler.trustStoreToUse"></stringProp>
          <stringProp name="SMTPSampler.tlsProtocols"></stringProp>
          <boolProp name="SMTPSampler.use_eml">false</boolProp>
          <stringProp name="SMTPSampler.emlMessageToSend"></stringProp>
          <stringProp name="SMTPSampler.useAuth">false</stringProp>
          <stringProp name="SMTPSampler.password"></stringProp>
          <stringProp name="SMTPSampler.username"></stringProp>
          <stringProp name="SMTPSampler.messageSizeStatistics">false</stringProp>
          <stringProp name="SMTPSampler.enableDebug">true</stringProp>
          <collectionProp name="SMTPSampler.headerFields"/>
        </SmtpSampler>
        <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>

Upvotes: 0

Views: 499

Answers (2)

Dmitri T
Dmitri T

Reputation: 168072

Don't use Listeners during your JMeter load test execution, they should only be used for tests development and/or debugging. Listeners don't add any value, but only consume resources.

In particular your case View Results Tree listener opens the result file in such a way that it cannot be used by other programs, including JMeter itself.

The solution would be:

  1. Remove all the listeners from your test plan
  2. Add the next line to user.properties file:

    jmeter.save.saveservice.autoflush=true
    
  3. Run your test in command-line non-GUI mode like:

    jmeter -n -t your_test.jmx -l Smoke_Test_Results.csv
    
  4. That's it, upon test completion you should get the email with the results.

Upvotes: 1

SAIR
SAIR

Reputation: 499

Make sure the scope of JMeter Elements are properly aligned.

  1. Create 2 Thread Groups in Test Plan and select Run Thread Group Consecutively in Test Plan
  2. First Thread Group will execute the Sampler and create the output/result file from View Result Tree. Save it to disk
  3. Second Thread Group will execute SMTP Sampler with attachment.

Note : Attachment name can also be parameterized.

Practical example shown below:

enter image description here enter image description here enter image description here

Upvotes: 0

Related Questions