JMeter:未使用CMDRunner或JMeterPluginsCMD生成汇总报告

时间:2020-02-12 19:52:17

标签: jmeter jmeter-5.0

我从命令行运行.jmx文件,然后将指标保存到.jtl文件。我的.jmx文件具有以下结构:

  • 一个线程组,我在硒中的测试在哪里
  • 我在其中拥有一个拆解线程组:
    1. 一个BeanShell Sampler,它检查.jtl文件是否为空,如果是,我添加了Thread.sleep();
    2. 一个OS Process Sampler,它与bat文件一起运行cmd.exe,其中包含生成聚合的.csv文件的代码。
    3. 最后,我有2个BeanShell采样器,用于处理.CSV文件。

我尝试使用两种方法生成聚合的csv文件:

使用cmdRunner的代码:

#Variable Declaration
$vcenter = Gc-UserInputFromList("vcenter instances go here")
$tenant = Get-UserInput "Enter the 4 digit tenant ID"
[int]$NumDisplays

#vSphere connection
$session = Connect-Viserver -Server $vcenter

#Change Monitor Count
$vms = get-vm -Location $tenant

#The script

Function setMonitorCount {

$vms = get-vm -Location $tenant

Foreach ($vm in $vms){
        if ($vm.PowerState -eq "PoweredOff") {
      $VideoAdapter = $vm.ExtensionData.Config.Hardware.Device | where {$_.GetType().Name -eq "VirtualMachineVideoCard"}
      $spec = New-Object VMware.Vim.VirtualMachineConfigSpec
      $Config = New-Object VMware.Vim.VirtualDeviceConfigSpec
      $Config.device = $VideoAdapter
      $Config.device.numDisplays = 3
      $Config.operation = "edit"
      $spec.deviceChange += $Config
      $VMView = $vm | Get-View
      $VMView.ReconfigVM($spec)
      Write-Output "Changing monitor count for $vm and powering back on."
      $poweredOn = Start-VM $vm
      }

   }

   }

使用JMeterPluginsCMD的代码:

java -jar "C:\apache-jmeter-5.2.1\lib\cmdrunner-2.2.jar" --tool Reporter --generate-csv "C:\LoadTesting\aggregate.csv" --input-jtl "C:\LoadTesting\log.jtl" --plugin-type AggregateReport

当我从这样的命令行运行.JMX文件时:

JMeterPluginsCMD.bat --generate-csv "C:\LoadTesting\aggregate.csv" --input-jtl "C:\LoadTesting\log.jtl" --plugin-type AggregateReport

aggregate.csv文件只有标题和带有Total的行,但是如果我运行上面的命令之一,则会正确生成该文件。

您知道为什么我的OS Process Sampler无法按预期工作吗? 有没有人建议检查什么或如何调试它?

1 个答案:

答案 0 :(得分:0)

首先,多余的空间可能是问题所在吗?

jmeter -n -t "C:/LoadTesting/MyTest.jmx" -f -l "C:/LoadTesting /log.jtl" -j jmeter.log
                                                              ^should this whitespace be here?

如果不是这样,很可能是您的OS Process Sampler以某种方式失败了,您可以通过在启动脚本中添加下一个属性来临时configure JMeter to save response data for failed (or even for all) samplers

jmeter -Jjmeter.save.saveservice.output_format=xml -Jjmeter.save.saveservice.response_data=true -n -t "C:/LoadTesting/MyTest.jmx" -f -l "C:/LoadTesting /log.jtl" -j jmeter.log

这样,您的log.jtl文件将采用XML格式,但将包含OS Process Sampler的输出。如果您的Beanshell逻辑依赖于CSV格式,则可以使用Simple Data WriterFlexible File Writer之类的侦听器代替

其他要点:

  1. 您可以将jmeter.save.saveservice.autoflush属性设置为true,而不是等待日志文件完成,这样JMeter就会在结果准备就绪/可用时将它们存储在.jtl文件中。
  2. 您可以将后处理逻辑移至tearDown Thread Group
  3. Since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language,因此请考虑在下一个可用机会(即现在)上从Beanshell迁移