如何解决jmeter(cli)中的转换错误

Posted

技术标签:

【中文标题】如何解决jmeter(cli)中的转换错误【英文标题】:How to solve conversion error in jmeter (cli) 【发布时间】:2021-04-20 11:28:59 【问题描述】:

我想用 jmeter 做一些测试。当我启动 jmeter 时,它说

不要使用 GUI 模式进行负载测试!,仅用于测试创建和测试 调试。

所以我尝试在无 gui 模式下启动测试,但我总是遇到同样的错误 (See the image)。

这是我在 jmeter gui 模式下所做的文件“cli-test.xml”的 XML 代码(只对 google 进行简单的 GET 请求):

<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.1">
  <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">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>
      </ThreadGroup>
      <hashTree>
        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" 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">google.com</stringProp>
          <stringProp name="HTTPSampler.port">80</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>
          <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>
  </hashTree>
</jmeterTestPlan>

有人知道如何解决这个问题吗?

【问题讨论】:

【参考方案1】:

尝试运行您的测试:

./jmeter -n -t cli-test.jmx -l cli-result.jtl

这个-l 键告诉JMeter 将结果存储在.jtl file,这个文件以后可以用Listener 打开,或者你可以从它generate a html reporting dashboard 中打开

当您的命令正在执行您的操作系统PATH 上的 JMeter 时,很可能它是一种与最新 JMeter 5.4.1 中使用的 jmx test plan 格式不兼容的过时版本

你可以运行jmeter --version命令只是为了好玩,看看你安装了什么,你可能想执行升级以避免将来出现这种情况。

更多信息:How Do I Run JMeter in Non-GUI Mode?

【讨论】:

非常感谢,我没有错误了。所以可以肯定的是,这是因为我没有添加 -l cli-result.jtl 吗?当我输入 jmeter --version 时,结果是 Version 2.13.20180731 这是因为在您的情况下,jmeter 执行 JMeter 2.13,这很好但 6 岁,./jmeter 从可能是 JMeter 5.4.1 的当前文件夹中执行 JMeter,并且不能执行更新的测试计划使用旧版 JMeter 运行

以上是关于如何解决jmeter(cli)中的转换错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在jmeter中为SOAP请求添加正确的签名

如何解决“vue-cli-service”不被识别为内部或外部命令?

如何解决 Solana 自定义 spl 令牌创建错误

如何解决 pentaho 数据网格中的错误?

如何解决嵌套地图函数中的 SPARK-5063

angular-cli中的SCSS加载错误