【问题标题】:JMeter 3.0 Report Generation - Why is my report dashboard blank?JMeter 3.0 报告生成 - 为什么我的报告仪表板是空白的?
【发布时间】:2016-11-11 10:18:02
【问题描述】:

我是 JMeter 的新手,我正在尝试让 JMeter 为现有的测试脚本生成 html 报告仪表板。我在处理过程中没有遇到任何异常,并且日志表明生成报告没有问题:

2016/07/08 12:42:24 DEBUG - jmeter.report.dashboard.ReportGenerator: Start report generation
2016/07/08 12:42:25 INFO  - jmeter.report.processor.NormalizerSampleConsumer: Using format:ms to parse timeStamp field
2016/07/08 12:42:25 DEBUG - jmeter.report.dashboard.ReportGenerator: Start samples processing
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.AggregateConsumer#stopProducing(): beginDate produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.AggregateConsumer#stopProducing(): endDate produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.ApdexSummaryConsumer#stopProducing(): apdexSummary produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.RequestsSummaryConsumer#stopProducing(): requestsSummary produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.StatisticsSummaryConsumer#stopProducing(): statisticsSummary produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.ErrorsSummaryConsumer#stopProducing(): errorsSummary produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.graph.impl.LatencyVSRequestGraphConsumer#stopProducing(): latencyVsRequest produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.graph.impl.HitsPerSecondGraphConsumer#stopProducing(): hitsPerSecond produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.graph.impl.CodesPerSecondGraphConsumer#stopProducing(): codesPerSecond produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.graph.impl.ResponseTimeVSRequestGraphConsumer#stopProducing(): responseTimeVsRequest produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.FilterConsumer#stopProducing(): startIntervalControlerFilter produced 4175 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.graph.impl.ResponseTimePercentilesGraphConsumer#stopProducing(): responseTimePercentiles produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.graph.impl.ResponseTimeOverTimeGraphConsumer#stopProducing(): responseTimesOverTime produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.graph.impl.BytesThroughputGraphConsumer#stopProducing(): bytesThroughputOverTime produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.graph.impl.ActiveThreadsGraphConsumer#stopProducing(): activeThreadsOverTime produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.graph.impl.TimeVSThreadGraphConsumer#stopProducing(): timeVsThreads produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.graph.impl.ResponseTimeDistributionGraphConsumer#stopProducing(): responseTimeDistribution produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.graph.impl.LatencyOverTimeGraphConsumer#stopProducing(): latenciesOverTime produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.graph.impl.TransactionsPerSecondGraphConsumer#stopProducing(): transactionsPerSecond produced 0 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.FilterConsumer#stopProducing(): nameFilter produced 10020 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.AbstractSampleConsumer: class org.apache.jmeter.report.processor.NormalizerSampleConsumer#stopProducing(): normalizer produced 2505 samples
2016/07/08 12:42:25 INFO  - org.apache.jmeter.report.processor.CsvFileSampleSource: produce(): 835 samples produced in 481ms on channel 0
2016/07/08 12:42:25 DEBUG - jmeter.report.dashboard.ReportGenerator: End of samples processing
2016/07/08 12:42:25 DEBUG - jmeter.report.dashboard.ReportGenerator: Start data exporting
2016/07/08 12:42:25 INFO  - jmeter.report.dashboard.ReportGenerator: Exporting data using exporter:'html' of className:'org.apache.jmeter.report.dashboard.HtmlTemplateExporter'
2016/07/08 12:42:25 DEBUG - jmeter.report.dashboard.HtmlTemplateExporter: Start template processing
2016/07/08 12:42:25 INFO  - jmeter.report.dashboard.HtmlTemplateExporter: Will generate dashboard in folder:/tmp/jmeter
2016/07/08 12:42:26 INFO  - jmeter.report.dashboard.HtmlTemplateExporter: Report will be generated in:/tmp/jmeter, creating folder structure
2016/07/08 12:42:26 DEBUG - jmeter.report.dashboard.HtmlTemplateExporter: End of template processing
2016/07/08 12:42:26 DEBUG - jmeter.report.dashboard.ReportGenerator: End of data exporting
2016/07/08 12:42:26 DEBUG - jmeter.report.dashboard.ReportGenerator: End of report generation

但是,当我查看生成的 index.html 文件时,却没有数据:

result.csv 文件不是空的:

我的报告生成器和保存服务配置是:

#---------------------------------------------------------------------------
# Reporting configuration
#---------------------------------------------------------------------------
# If you want to debug reporting, uncomment this line
log_level.jmeter.report=DEBUG
jmeter.reportgenerator.report_title=AMP JMeter-test Dashboard
jmeter.reportgenerator.overall_granularity=6000
jmeter.reportgenerator.temp_dir = /tmp
#---------------------------------------------------------------------------
# Results file configuration
#---------------------------------------------------------------------------
jmeter.save.saveservice.output_format=csv
# assertion_results_failure_message only affects CSV output
jmeter.save.saveservice.assertion_results_failure_message=true
jmeter.save.saveservice.assertion_results=all
#jmeter.save.saveservice.data_type=true
jmeter.save.saveservice.label=true
jmeter.save.saveservice.response_code=true

jmeter.save.saveservice.response_message=true
jmeter.save.saveservice.successful=true
jmeter.save.saveservice.thread_name=true
jmeter.save.saveservice.time=true
jmeter.save.saveservice.subresults=true
jmeter.save.saveservice.assertions=true
jmeter.save.saveservice.latency=true
jmeter.save.saveservice.bytes=true
jmeter.save.saveservice.thread_counts=true
jmeter.save.saveservice.timestamp_format=ms
jmeter.save.saveservice.default_delimiter=,
jmeter.save.saveservice.print_field_names=true

csvread.delimiter=,

我试图搜索类似的问题(这里和其他地方),但我找不到任何可以解决这种情况的东西。结果正在以我期望的格式写入并填充到 CSV 文件中,但是在读取数据时似乎出现了问题。如果我至少可以填充错误和结果摘要部分,我会很高兴。

我在日志中注意到(包含在 sn-p 中),报告了很多 0 样本用于不同的事物......但我认为我只关心 CsvFileSampleSource,它正确识别为具有 800 - 一些样品...

另外,我像这样运行测试:

jmeter -n -t /path/to/my/amp_automation.jmx -l /tmp/result.csv -e -o /tmp/jmeter

任何见解都将不胜感激,我可能只是在这里遗漏了一些东西。理想情况下,我不想恢复为获取为 jmeter 生成的 html 报告的“旧”方式(使用 ant 或其他侦听器等)

谢谢!

【问题讨论】:

    标签: jmeter report


    【解决方案1】:

    我建议您仔细阅读其中一位 JMeter 开发人员的 tutorial 并参考 jmeter 文档:

    然后检查:

    请注意,当您在示例中使用引号时,JMeter 5.0 包含一个错误:

    在 5.1 发布之前,您可以使用 nightly build 或删除引号:

    【讨论】:

    • 是的,但您必须同意该文档不是很简单。
    • 您可以通过给用户邮件列表写一封邮件来告诉我们可以改进的地方来帮助我们改进。谢谢
    • 先生,我会这样做的 :)
    • 那么你最后有没有设法生成任何报告,因为我没有,而且文档也没有帮助......
    【解决方案2】:

    我遇到了同样的问题,在尝试了很多事情之后,我猜测我的文件名太长了。我缩短了文件名,现在我可以看到按预期生成的报告。请参阅以下示例。

    jmeter -g Picking_Aggregate_Report_Success_16_890000.csv -o Picking_Aggregate_Report_Success_16_890000_Dashboard\
    

    生成了一份空白报告

    jmeter -g Picking_Aggregate_Report_Success.csv -o Picking_Aggregate_Report_Success_Dashboard\
    

    制作了一份可见的报告

    jmeter -g Picking_Aggregate_Report_Error_16_890000.csv -o Picking_Aggregate_Report_Error_16_890000_Dashboard\
    

    制作了一份可见的报告

    只是更改了文件名以使其正常工作。

    我认为文件名参数的最大长度大约是 40 个字符,如果超过该长度,它会出现静默失败。

    【讨论】:

      【解决方案3】:

      错误在 csv 文件中可见:

      不要在采样器名称中使用双引号 (")。它们是在没有任何转义到 .csv 文件的情况下写入的,仪表板渲染器按原样将它们写入 javascript。这会导致它插入的 javascript 中出现解析错误表格单元格中的采样器名称,因此不会呈现任何内容。

      【讨论】:

      • @darshan-mehta 已经添加了正确答案,但我觉得需要通过视觉识别原因来提供更清晰的答案。我自己碰到了这个障碍。
      【解决方案4】:

      HTML Publisher 插件版本 1.14

      这些都不适合我,但是最后几篇关于转义字符的帖子让我走上了正轨。

      我的问题与 Jenkins 安全策略有关,该策略会阻止生成的 index.html 上的 javascript。这是一篇可以帮助您解决问题的好帖子:

      Blocked script execution in <URL>. because the document's frame is sandboxed and the 'allow-scripts' permission is not set

      【讨论】:

        【解决方案5】:

        我有类似的问题。我意识到我在 .jtl 报告中使用了双引号作为 HTTP 请求名称之一。我从 jtl 中删除了双引号,重新生成了仪表板。它就像一个魅力!

        【讨论】:

          【解决方案6】:

          我今天遇到了类似的情况,在查看网页时发现图表是由 JavaScript 生成的。当我在 Chrome 中查看开发控制台时,我发现 JavaScript 中嵌入的双引号造成的语法错误。我还没有 100% 的解决方案,但我认为这可能需要您检查。我从我的 csv 文件中修剪了转义的引号并重新生成了我的报告,并得到了我期望的输出。

          【讨论】:

            【解决方案7】:

            您试图从哪里打开报告? 其他生成的文件夹,如 content 、 sbadmin 是否在同一位置?

            我更改了 index.html 文件的位置,所以我遇到了同样的问题。 请确保您从 jmeter 创建的文件夹中访问 index.html 文件。

            【讨论】:

            • 我遇到了同样的问题。谢谢@Mohini
            【解决方案8】:

            在您的 user.properties 文件中尝试添加:

                jmeter.reportgenerator.sample_filter=.*
                jmeter.reportgenerator.exporter.html.series_filter=.*
            

            如前面的回答中所述,请检查您的过滤。

            出于调试目的,我建议您将仪表板生成分离出来以发布运行,只是为了使用命令行 -g 选项调试此问题,这样您就可以得到一个不那么繁忙的 jmeter.log

            查看 jmeter.log,它应该准确显示正在读取哪些值以及如何设置。您要确保您没有传递“无”值,尤其是对于 sample_filter!

            【讨论】:

              【解决方案9】:

              请使用下面的命令在cmd中生成报告为什么因为你已经有了结果csv文件,使用这个文件你可以生成报告,请使用下面的命令根据你的结果csv文件生成报告。

              首先在cmd中你需要进入cmd中的jmeter/bin文件夹,然后输入下面的命令并替换为你的路径

              jmeter -g E:\Jmeter_Performance_Testing\Silver\SAPPI_Redemption\TestResults\SAPPIRedemption.csv -o E:\Jmeter_Performance_Testing\Silver\SAPPI_Redemption\HTMLReports
              

              jmeter -g 路径(结果 csv 文件的路径)-o 路径(报告应显示的​​路径)。 让我知道您的反馈。

              【讨论】:

                【解决方案10】:

                我认为您的 user.properties 需要添加如下内容: jmeter.reportgenerator.exporter.html.series_filter=((^您的标签名称)|(^...))(-success|-failure)?


                正如您提供的 result.csv 内容。 也许你可以添加如下:

                jmeter.reportgenerator.exporter.html.series_filter=((^login)|(^create user))(-success|-failure)?

                我建议您可以将 reportgenerator.properties 中的全部内容粘贴到 user.properties。然后设置“jmeter.reportgenerator.exporter.html.series_filter”可以快速解决你的问题。 希望这可以帮到你。祝你好运。

                【讨论】: