Graph SampleResult.subResult的Jmeter图形侦听器

Graph SampleResult.subResult的Jmeter图形侦听器,graph,jmeter,listeners,Graph,Jmeter,Listeners,我正在寻找一个jmeter图形监听器,它将输出SamplerRequest对象的子结果。我还没有找到,我非常渴望得到它 我知道的唯一选项是graph,它绘制结果和子结果,但仅来自事务控制器,而不是嵌入式资源。您可以要求作者实现一个新的图表…我知道,这是一个老问题 不幸的是,似乎没有JMeter图形监听器可以对附加到SampleResult的子结果的结果进行图形化。刚刚面临同样的问题,我选择写我自己的 步骤: 将下面的类编译为jar 将jar放在jMeter的lib/ext文件夹中 打开您的测试计

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

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

我知道,这是一个老问题

不幸的是,似乎没有JMeter图形监听器可以对附加到SampleResult的子结果的结果进行图形化。刚刚面临同样的问题,我选择写我自己的

步骤:

  • 将下面的类编译为jar
  • 将jar放在jMeter的lib/ext文件夹中
  • 打开您的测试计划,在菜单中导航以正常添加侦听器,选择“子结果分布式响应图”
  • 运行您的测试计划
  • 课程:

    下面的类将提供一个响应时间分布图,它将只绘制子结果

    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();
    }
    
    公共类子结果DistributedResponseMeListener扩展分布式图形可视化工具{
    私有静态最终记录器LOG=LoggingManager.getLoggerForClass();
    @凌驾
    公共无效添加(最终采样器结果res){
    final List subResults=Arrays.asList(res.getSubResults());
    最终子结果DistributedResponseTimeListener inst=此;
    runSafe(新的Runnable(){
    公开募捐{
    对于(SampleResult r:子结果){
    长时间=r.getEndTime()-r.getStartTime();
    LOG.info(“添加结果;开始:+r.getStartTime()+”结束:+r.getEndTime()+”持续时间:“+time”);
    SamplingStatCalculator model=inst.getCustomModel();
    如果(型号!=null){
    模型。添加样本(r);
    inst.updateGui(model.getCurrentSample());
    }
    }
    }
    });
    }
    //我们需要这个,因为DistributionGraphVisualizer有一个私有字段“模型”,它
    //处理屏幕更新。注意安全管理器与
    //访问私有字段。
    公共采样StatCalculator getCustomModel(){
    试一试{
    字段f=DistributionGraphVisualizer.class.getDeclaredField(“模型”);
    f、 setAccessible(true);
    return(SamplingStatCalculator)f.get(this);
    }捕获(无此字段例外){
    e、 printStackTrace();
    }捕获(安全异常e){
    e、 printStackTrace();
    }捕获(IllegalArgumentException e){
    e、 printStackTrace();
    }捕获(非法访问例外e){
    e、 printStackTrace();
    }
    返回null;
    }
    @凌驾
    公共字符串getName(){
    返回“子结果分布响应图”;
    }
    @凌驾
    公共字符串getStaticLabel(){
    返回这个.getName();
    }
    @凌驾
    公共字符串getLabelResource(){//将此侦听器名称添加到右键单击上下文菜单。
    返回这个.getName();
    }
    
    注意,这个可怕的catch块是因为我必须用Java1.5编译


    如果读者愿意,我将把它留给他们来扩展不同的图形侦听器。

    什么是SampleRequest对象?从来没有听说过…你能提供一个链接吗?对不起,我的意思是说SampleResult不是“SampleRequest”。还有一个问题,“输出”是什么?Jmeter的View Results Tree组件可以很好地显示子结果…我想绘制子结果。我可以在ViewResults树中很好地看到输出,但无法绘制子结果。Summary、aggreagate和其他侦听器似乎只显示根元素的统计信息,而不是suresults。仅供参考。我对Jmeter不熟悉。