2

当我在线程组上使用大量循环计数(15 个 HTTP 请求上的 100 次迭代)运行 JMeter 测试时,我从 JMeter 中得到一个巨大的 JTL 文件。

这是我正在使用的 jmeter-maven-plugin ( https://github.com/jmeter-maven-plugin/jmeter-maven-plugin ) 的问题,它使用 java.util.Scanner 扫描 JTL 文件查找为“false”以查看测试是否失败。因为文件太大(1.8GB)我得到以下失败。

[ERROR] Failed to execute goal com.lazerycode.jmeter:jmeter-maven-plugin:1.10.1:jmeter (jmeter-tests) on project performance-tests: Execution jmeter-tests of goal com.lazerycode.jmeter:jmeter-maven-plugin:1.10.1:jmeter failed. IllegalArgumentException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.lazerycode.jmeter:jmeter-maven-plugin:1.10.1:jmeter (jmeter-tests) on project performance-tests: Execution jmeter-tests of goal com.lazerycode.jmeter:jmeter-maven-plugin:1.10.1:jmeter failed.
       at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:224)
       at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
       at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
       at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
       at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
       at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
       at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
       at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
       at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
       at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
       at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862)
       at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286)
       at org.apache.maven.cli.MavenCli.main(MavenCli.java:197)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:497)
       at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
       at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
       at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
       at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution jmeter-tests of goal com.lazerycode.jmeter:jmeter-maven-plugin:1.10.1:jmeter failed.
       at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145)
       at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
       ... 20 more
Caused by: java.lang.IllegalArgumentException
       at java.nio.CharBuffer.allocate(CharBuffer.java:334)
       at java.util.Scanner.makeSpace(Scanner.java:840)
       at java.util.Scanner.readInput(Scanner.java:795)
       at java.util.Scanner.findWithinHorizon(Scanner.java:1685)
       at com.lazerycode.jmeter.FailureScanner.hasTestFailed(FailureScanner.java:36)
       at com.lazerycode.jmeter.JMeterMojo.parseTestResults(JMeterMojo.java:70)
       at com.lazerycode.jmeter.JMeterMojo.execute(JMeterMojo.java:54)
       at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
       ... 21 more

我正在使用 ignoreResultFailures = true 作为 jmeter-maven-plugin 的参数来解决这个问题,这可以避免使用 java.util.Scanner 并失败。理想情况下,jmeter-maven-plugin 将处理非常大的 JTL 文件,但 JTL 文件的大小似乎有点极端。

是否有任何 JMeter 设置可以减小 JTL 文件的大小?

4

2 回答 2

1

检查您的测试计划是否启用了“功能测试模式”。

http://jmeter.apache.org/usermanual/listeners.html

要保存的信息是可配置的。有关最大信息,请选择“xml”作为格式并在测试计划元素上指定“功能测试模式”。如果未选中此框,则默认保存的数据包括时间戳(自 UTC 1970 年 1 月 1 日午夜以来的毫秒数)、数据类型、线程名称、标签、响应时间、消息和代码,和成功指标。如果选中,将记录所有信息,包括完整的响应数据。

如果选中,这将导致 JTL 文件很大,因为所有详细的请求和响应数据都已保存。也许您打开它来调试您的测试并忘记将其关闭?

于 2016-01-18T22:45:23.607 回答
0

看起来您存储了太多,即导致大量开销的响应数据。所以建议:

  • 使用 CSV 输出格式
  • 不要存储响应数据(至少对于成功的采样器)

因此,在user.properties文件中添加接下来的 2 行(位于 JMeter 安装的 /bin 文件夹下)

jmeter.save.saveservice.output_format=csv
jmeter.save.saveservice.response_data=false

您需要重新启动 JMeter 以获取更改。

示例“好”结果保存配置应如下所示:

JMeter SaveService 配置

参考资料:

于 2016-01-19T03:21:01.733 回答