SampleResult.subResult的Jmeter图形监听器

时间:2011-11-25 18:18:23

标签: graph jmeter listeners

我正在寻找一个jmeter图形监听器,它将输出SamplerRequest对象的子结果。我还没有找到一个,我非常渴望得到它。

2 个答案:

答案 0 :(得分:1)

老问题,我知道。

不幸的是,似乎没有JMeter图形侦听器可以绘制附加到SampleResult的子结果的结果。刚刚遇到同样的问题,我选择自己编写。

步骤:

  1. 将以下类编译为jar。
  2. 将jar放在jMeter的lib / ext文件夹中。
  3. 打开测试计划,浏览菜单以正常添加监听器,选择“SubResult Distributed Response Graph”
  4. 运行您的测试计划。
  5. 类:

    以下类将提供响应时间分布图,该图仅显示子结果。

    public class SubResultDistributedResponseTimeListener extends DistributionGraphVisualizer {
    
    private static final Logger LOG = LoggingManager.getLoggerForClass();
    
    @Override
    public void add(final SampleResult res) {
        final List<SampleResult> subResults = Arrays.asList(res.getSubResults());
        final SubResultDistributedResponseTimeListener inst = this;
    
        JMeterUtils.runSafe(new Runnable() {
            public void run() {
                for (SampleResult r : subResults) {
                    long time = r.getEndTime() - r.getStartTime();
                    LOG.info("Adding result; start: " + r.getStartTime() + " end: " + r.getEndTime() + " duration: " + time);
                    SamplingStatCalculator model = inst.getCustomModel();
                    if (model != null) {
                        model.addSample(r);
                        inst.updateGui(model.getCurrentSample());
                    }
                }
            }
        });
    
    }
    
    // we need this because DistributionGraphVisualizer has a private field 'model' which
    // deals with updating the screen. Watch out for SecurityManager problems with 
    // accessing private fields.
    public SamplingStatCalculator getCustomModel() {
        try {
            Field f = DistributionGraphVisualizer.class.getDeclaredField("model");
            f.setAccessible(true);
            return (SamplingStatCalculator) f.get(this);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        }  catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    @Override
    public String getName() {
        return "SubResult Distributed Response Graph";
    }
    
    @Override
    public String getStaticLabel() {
        return this.getName();
    }
    
    @Override
    public String getLabelResource() { // add this Listeners name to the right click context menu.
        return this.getName();
    }
    

    注意,可怕的丑陋块是因为我必须在Java 1.5中编译。

    如果他们愿意,我会留给读者扩展不同的图形听众。

答案 1 :(得分:0)

我知道的唯一选项是Hits Per Second图,它绘制结果和子结果,但仅来自事务控制器,而不是嵌入式资源。您可以要求作者实施新图表......