【问题标题】:Jmeter 5.5 XML SMTP Sampler config - cannot set headersJmeter 5.5 XML SMTP 采样器配置 - 无法设置标头
【发布时间】:2022-11-08 01:55:34
【问题描述】:

我正在尝试使用此 .jmx 文件(XML)设置本地 Jmeter 运行:

<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4">
  <hashTree>
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Perf Tests" 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="Big - 8mb attachment" 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">10</stringProp>
        </elementProp>
        <stringProp name="ThreadGroup.num_threads">5</stringProp>
        <stringProp name="ThreadGroup.ramp_time">5</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>
        <SmtpSampler guiclass="SmtpSamplerGui" testclass="SmtpSampler" testname="Email - 8mb attachment" enabled="true">
          <stringProp name="SMTPSampler.server">localhost</stringProp>
          <stringProp name="SMTPSampler.serverPort">8080</stringProp>
          <stringProp name="SMTPSampler.serverTimeout">15000</stringProp>
          <stringProp name="SMTPSampler.serverConnectionTimeout">15000</stringProp>
          <stringProp name="SMTPSampler.mailFrom">bobby.hill@hey.com</stringProp>
          <stringProp name="SMTPSampler.replyTo"></stringProp>
          <stringProp name="SMTPSampler.receiverTo">bobby.hill@hey.com</stringProp>
          <stringProp name="SMTPSampler.receiverCC"></stringProp>
          <stringProp name="SMTPSampler.receiverBCC"></stringProp>
          <stringProp name="SMTPSampler.subject">Perf Test - 1 attachment 8mb</stringProp>
          <stringProp name="SMTPSampler.suppressSubject">false</stringProp>
          <stringProp name="SMTPSampler.include_timestamp">false</stringProp>
          <stringProp name="SMTPSampler.message">Hello World - Perf Test!</stringProp>
          <stringProp name="SMTPSampler.plainBody">false</stringProp>
          <stringProp name="SMTPSampler.attachFile">8mb-content-size.pdf</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">false</stringProp>
          <collectionProp name="SMTPSampler.headerFields"/>
        </SmtpSampler>
        <hashTree/>
      </hashTree>
    </hashTree>
  </hashTree>
</jmeterTestPlan>

此 XML 将电子邮件消息发送到位于 localhost:8080 的本地服务器,没有任何错误。

但是,我想为这些电子邮件设置日期标题。 在SmtpSampler 元素前面,我尝试添加这样的 HeaderManager:

<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
          <collectionProp name="HeaderManager.headers">
            <elementProp name="Date" elementType="Header">
              <stringProp name="Header.name">Date</stringProp>
              <stringProp name="Header.value">Fri, 21 Nov 1997 09:55:06 -0600</stringProp>
            </elementProp>
          </collectionProp>
        </HeaderManager>

但是这个 XML 没有正确设置 SMTP 消息的标头。

我尝试用扩展元素替换 &lt;collectionProp name="SMTPSampler.headerFields"/&gt;

<collectionProp name="SMTPSampler.headerFields">
            <elementProp name="Date" elementType="Header">
              <stringProp name="Header.name">Date</stringProp>
              <stringProp name="Header.value">Fri, 21 Nov 1997 09:55:06 -0600</stringProp>
            </elementProp>
          </collectionProp>

这导致以下堆栈跟踪:

java.lang.ClassCastException: class org.apache.jmeter.protocol.http.control.Header cannot be cast to class org.apache.jmeter.config.Argument (org.apache.jmeter.protocol.http.control.Header and org.apache.jmeter.config.Argument are in unnamed module of loader org.apache.jmeter.DynamicClassLoader @372f7a8d)

我也试过这个:

<collectionProp name="SMTPSampler.headerFields">
              <elementProp name="date" elementType="Argument">
                <stringProp name="Argument.name">Date</stringProp>
                <stringProp name="Argument.value">Fri, 21 Nov 1997 09:55:06 -0600</stringProp>
              </elementProp>
            </collectionProp>

此配置也失败。

我很想看到在 SMTP Sampler XML 中设置标头的示例,但我在官方 Apache 文档中找不到任何内容。

谢谢!

【问题讨论】:

    标签: java jmeter jmeter-5.0


    【解决方案1】:

    正如其名称所证明的那样,HTTP Header Manager 控制 HTTP 协议的标头

    如果您需要为SMTP protocol 添加标题,SMTP sampler 中有一个特殊的输入:

    或者,如果您更喜欢手动编辑 XML:

    <collectionProp name="SMTPSampler.headerFields">
      <elementProp name="foo" elementType="Argument">
        <stringProp name="Argument.name">foo</stringProp>
        <stringProp name="Argument.value">bar</stringProp>
      </elementProp>
    </collectionProp>
    

    【讨论】:

    • 恐怕我们不能以这种方式设置标题 - 它会导致我上面提到的 ClassCastException。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 2022-11-19
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    相关资源
    最近更新 更多