Return-Path: X-Original-To: apmail-jmeter-dev-archive@minotaur.apache.org Delivered-To: apmail-jmeter-dev-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 3755910BCB for ; Sat, 29 Nov 2014 11:11:36 +0000 (UTC) Received: (qmail 83147 invoked by uid 500); 29 Nov 2014 11:11:36 -0000 Delivered-To: apmail-jmeter-dev-archive@jmeter.apache.org Received: (qmail 83131 invoked by uid 500); 29 Nov 2014 11:11:36 -0000 Mailing-List: contact dev-help@jmeter.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jmeter.apache.org Delivered-To: mailing list dev@jmeter.apache.org Received: (qmail 83118 invoked by uid 99); 29 Nov 2014 11:11:35 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 29 Nov 2014 11:11:35 +0000 X-ASF-Spam-Status: No, hits=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of sebbaz@gmail.com designates 74.125.82.50 as permitted sender) Received: from [74.125.82.50] (HELO mail-wg0-f50.google.com) (74.125.82.50) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 29 Nov 2014 11:11:09 +0000 Received: by mail-wg0-f50.google.com with SMTP id k14so10543737wgh.9 for ; Sat, 29 Nov 2014 03:11:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=dH++Frl68cb+uchM4MVCrFWlCCYgTh4fB4cBdtvZla8=; b=XPRLPsylaiCbyvjGhuu+0KMrkzuUK3tj2pB0U7YMf0g0wzUU4id3Xr1k01qozldpZb tpy2bVBChKhKVQkTsATMTzb1WafnQdFZCSmwDx/3UrRAj3qaoJY6W/PvXe14+EC/AMKg E5hRRekgfYicA76/LJjH/YdlHXnA2g4ZbfXcqdFkOeftMWdT5oKj5lZJmWOvkotzjAjg 0ASXXCsrT3dUPfgrzfRO8HmYwTeaBXHoVnXea+oGuRzWIlEOEMqg0slsMcRoIUcbwB3m e0qcuGfGTsyTjX5b24mg1afmm9P2NrOlIc5Bhy7Pp6QbuIR3RBOVLv8xWB7m4vY2KFof w24w== MIME-Version: 1.0 X-Received: by 10.180.198.145 with SMTP id jc17mr68858257wic.67.1417259468474; Sat, 29 Nov 2014 03:11:08 -0800 (PST) Received: by 10.194.138.101 with HTTP; Sat, 29 Nov 2014 03:11:08 -0800 (PST) In-Reply-To: <20141129100601.8243F2388FA9@eris.apache.org> References: <20141129100601.8243F2388FA9@eris.apache.org> Date: Sat, 29 Nov 2014 11:11:08 +0000 Message-ID: Subject: Re: svn commit: r1642410 - in /jmeter/trunk: bin/ src/components/org/apache/jmeter/visualizers/ src/core/org/apache/jmeter/gui/util/ src/core/org/apache/jmeter/resources/ xdocs/ xdocs/usermanual/ From: sebb To: dev@jmeter.apache.org Content-Type: text/plain; charset=UTF-8 X-Virus-Checked: Checked by ClamAV on apache.org On 29 November 2014 at 10:06, wrote: > Author: pmouawad > Date: Sat Nov 29 10:06:00 2014 > New Revision: 1642410 > > URL: http://svn.apache.org/r1642410 > Log: > Bug 57217 - Aggregate graph and Aggregate report improvements (3 configurable percentiles, same data in both, factor out code) > Bugzilla Id: 57217 > > Modified: > jmeter/trunk/bin/jmeter.properties > jmeter/trunk/src/components/org/apache/jmeter/visualizers/BarGraph.java > jmeter/trunk/src/components/org/apache/jmeter/visualizers/StatGraphVisualizer.java > jmeter/trunk/src/components/org/apache/jmeter/visualizers/StatVisualizer.java > jmeter/trunk/src/core/org/apache/jmeter/gui/util/HeaderAsPropertyRenderer.java > jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties > jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties > jmeter/trunk/xdocs/changes.xml > jmeter/trunk/xdocs/usermanual/component_reference.xml > > Modified: jmeter/trunk/bin/jmeter.properties > URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/jmeter.properties?rev=1642410&r1=1642409&r2=1642410&view=diff > ============================================================================== > --- jmeter/trunk/bin/jmeter.properties (original) > +++ jmeter/trunk/bin/jmeter.properties Sat Nov 29 10:06:00 2014 > @@ -775,6 +775,20 @@ wmlParser.types=text/vnd.wap.wml > # Write messages to System.out > #summariser.out=true > > + > +#--------------------------------------------------------------------------- > +# Aggregate Report and Aggregate Graph - configuration > +#--------------------------------------------------------------------------- > +# > +# Percentiles to display in reports > +# Can be float value between 0 and 100 > +# First percentile to display, defaults to 90% > +#aggregate_rpt_pct1=90 > +# Second percentile to display, defaults to 95% > +#aggregate_rpt_pct2=95 > +# Second percentile to display, defaults to 99% > +#aggregate_rpt_pct3=99 > + OK as it stands, but it would be better to allow for multiple entries. e.g. rather than aggregate_rpt_pct1|2|3 one could have aggregate_rpt_pcts=90,95,99,... This would require the GUI arrays to be dynamically created, but that is not particularly difficult. > #--------------------------------------------------------------------------- > # BeanShell configuration > #--------------------------------------------------------------------------- > > Modified: jmeter/trunk/src/components/org/apache/jmeter/visualizers/BarGraph.java > URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/BarGraph.java?rev=1642410&r1=1642409&r2=1642410&view=diff > ============================================================================== > --- jmeter/trunk/src/components/org/apache/jmeter/visualizers/BarGraph.java (original) > +++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/BarGraph.java Sat Nov 29 10:06:00 2014 > @@ -23,8 +23,6 @@ import java.awt.Color; > > import javax.swing.JCheckBox; > > -import org.apache.jmeter.util.JMeterUtils; > - > public class BarGraph { > > private String label; > @@ -34,13 +32,13 @@ public class BarGraph { > private Color backColor; > > /** > - * @param resString The label of this component > + * @param label The label of this component > * @param checked Flag whether the corresponding checkbox should be checked > * @param backColor The color of the background > */ > - public BarGraph(String resString, boolean checked, Color backColor) { > + public BarGraph(String label, boolean checked, Color backColor) { > super(); > - this.label = JMeterUtils.getResString(resString); > + this.label = label; > this.chkBox = new JCheckBox(this.label, checked); > this.backColor = backColor; > } > > Modified: jmeter/trunk/src/components/org/apache/jmeter/visualizers/StatGraphVisualizer.java > URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/StatGraphVisualizer.java?rev=1642410&r1=1642409&r2=1642410&view=diff > ============================================================================== > --- jmeter/trunk/src/components/org/apache/jmeter/visualizers/StatGraphVisualizer.java (original) > +++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/StatGraphVisualizer.java Sat Nov 29 10:06:00 2014 > @@ -28,6 +28,7 @@ import java.awt.event.ActionListener; > import java.io.FileNotFoundException; > import java.io.FileWriter; > import java.io.IOException; > +import java.text.MessageFormat; > import java.util.ArrayList; > import java.util.List; > import java.util.Map; > @@ -65,6 +66,7 @@ import org.apache.jmeter.gui.action.Acti > import org.apache.jmeter.gui.action.SaveGraphics; > import org.apache.jmeter.gui.util.FileDialoger; > import org.apache.jmeter.gui.util.FilePanel; > +import org.apache.jmeter.gui.util.HeaderAsPropertyRenderer; > import org.apache.jmeter.gui.util.VerticalPanel; > import org.apache.jmeter.samplers.Clearable; > import org.apache.jmeter.samplers.SampleResult; > @@ -92,24 +94,50 @@ import org.apache.log.Logger; > public class StatGraphVisualizer extends AbstractVisualizer implements Clearable, ActionListener { > private static final long serialVersionUID = 240L; > > + private static final String pct1Label = JMeterUtils.getPropDefault("aggregate_rpt_pct1", "90"); > + private static final String pct2Label = JMeterUtils.getPropDefault("aggregate_rpt_pct2", "95"); > + private static final String pct3Label = JMeterUtils.getPropDefault("aggregate_rpt_pct3", "99"); > + > + private static final Float pct1Value = new Float(Float.parseFloat(pct1Label)/100); > + private static final Float pct2Value = new Float(Float.parseFloat(pct2Label)/100); > + private static final Float pct3Value = new Float(Float.parseFloat(pct3Label)/100); > + > private static final Logger log = LoggingManager.getLoggerForClass(); > > - private final String[] COLUMNS = { JMeterUtils.getResString("sampler_label"), //$NON-NLS-1$ > - JMeterUtils.getResString("aggregate_report_count"), //$NON-NLS-1$ > - JMeterUtils.getResString("average"), //$NON-NLS-1$ > - JMeterUtils.getResString("aggregate_report_median"), //$NON-NLS-1$ > - JMeterUtils.getResString("aggregate_report_90%_line"), //$NON-NLS-1$ > - JMeterUtils.getResString("aggregate_report_min"), //$NON-NLS-1$ > - JMeterUtils.getResString("aggregate_report_max"), //$NON-NLS-1$ > - JMeterUtils.getResString("aggregate_report_error%"), //$NON-NLS-1$ > - JMeterUtils.getResString("aggregate_report_rate"), //$NON-NLS-1$ > - JMeterUtils.getResString("aggregate_report_bandwidth") }; //$NON-NLS-1$ > - > - private final String[] GRAPH_COLUMNS = {JMeterUtils.getResString("average"),//$NON-NLS-1$ > - JMeterUtils.getResString("aggregate_report_median"), //$NON-NLS-1$ > - JMeterUtils.getResString("aggregate_report_90%_line"), //$NON-NLS-1$ > - JMeterUtils.getResString("aggregate_report_min"), //$NON-NLS-1$ > - JMeterUtils.getResString("aggregate_report_max")}; //$NON-NLS-1$ > + static final String[] COLUMNS = { > + "sampler_label", //$NON-NLS-1$ > + "aggregate_report_count", //$NON-NLS-1$ > + "average", //$NON-NLS-1$ > + "aggregate_report_median", //$NON-NLS-1$ > + "aggregate_report_xx_pct1_line", //$NON-NLS-1$ > + "aggregate_report_xx_pct2_line", //$NON-NLS-1$ > + "aggregate_report_xx_pct3_line", //$NON-NLS-1$ > + "aggregate_report_min", //$NON-NLS-1$ > + "aggregate_report_max", //$NON-NLS-1$ > + "aggregate_report_error%", //$NON-NLS-1$ > + "aggregate_report_rate", //$NON-NLS-1$ > + "aggregate_report_bandwidth" }; //$NON-NLS-1$ > + > + static final Object[][] COLUMNS_MSG_PARAMETERS = { null, //$NON-NLS-1$ > + null, //$NON-NLS-1$ > + null, //$NON-NLS-1$ > + null, //$NON-NLS-1$ > + new Object[]{pct1Label}, //$NON-NLS-1$ > + new Object[]{pct2Label}, //$NON-NLS-1$ > + new Object[]{pct3Label}, //$NON-NLS-1$ > + null, //$NON-NLS-1$ > + null, //$NON-NLS-1$ > + null, //$NON-NLS-1$ > + null, //$NON-NLS-1$ > + null }; //$NON-NLS-1$ > + > + private final String[] GRAPH_COLUMNS = {"average",//$NON-NLS-1$ > + "aggregate_report_median", //$NON-NLS-1$ > + "aggregate_report_xx_pct1_line", //$NON-NLS-1$ > + "aggregate_report_xx_pct2_line", //$NON-NLS-1$ > + "aggregate_report_xx_pct3_line", //$NON-NLS-1$ > + "aggregate_report_min", //$NON-NLS-1$ > + "aggregate_report_max"}; //$NON-NLS-1$ > > private final String TOTAL_ROW_LABEL = > JMeterUtils.getResString("aggregate_report_total_label"); //$NON-NLS-1$ > @@ -239,7 +267,24 @@ public class StatGraphVisualizer extends > > public StatGraphVisualizer() { > super(); > - model = new ObjectTableModel(COLUMNS, > + model = createObjectTableModel(); > + eltList.add(new BarGraph(JMeterUtils.getResString("average"), true, new Color(202, 0, 0))); > + eltList.add(new BarGraph(JMeterUtils.getResString("aggregate_report_median"), false, new Color(49, 49, 181))); > + eltList.add(new BarGraph(MessageFormat.format(JMeterUtils.getResString("aggregate_report_xx_pct1_line"),new Object[]{pct1Label}), false, new Color(42, 121, 42))); > + eltList.add(new BarGraph(MessageFormat.format(JMeterUtils.getResString("aggregate_report_xx_pct2_line"),new Object[]{pct2Label}), false, new Color(242, 226, 8))); > + eltList.add(new BarGraph(MessageFormat.format(JMeterUtils.getResString("aggregate_report_xx_pct3_line"),new Object[]{pct3Label}), false, new Color(202, 10 , 232))); > + eltList.add(new BarGraph(JMeterUtils.getResString("aggregate_report_min"), false, Color.LIGHT_GRAY)); > + eltList.add(new BarGraph(JMeterUtils.getResString("aggregate_report_max"), false, Color.DARK_GRAY)); > + clearData(); > + init(); > + } > + > + /** > + * Creates that Table model > + * @return ObjectTableModel > + */ > + static ObjectTableModel createObjectTableModel() { > + return new ObjectTableModel(COLUMNS, > SamplingStatCalculator.class, > new Functor[] { > new Functor("getLabel"), //$NON-NLS-1$ > @@ -247,37 +292,37 @@ public class StatGraphVisualizer extends > new Functor("getMeanAsNumber"), //$NON-NLS-1$ > new Functor("getMedian"), //$NON-NLS-1$ > new Functor("getPercentPoint", //$NON-NLS-1$ > - new Object[] { new Float(.900) }), > + new Object[] { pct1Value }), > + new Functor("getPercentPoint", //$NON-NLS-1$ > + new Object[] { pct2Value }), > + new Functor("getPercentPoint", //$NON-NLS-1$ > + new Object[] { pct3Value }), > new Functor("getMin"), //$NON-NLS-1$ > new Functor("getMax"), //$NON-NLS-1$ > new Functor("getErrorPercentage"), //$NON-NLS-1$ > new Functor("getRate"), //$NON-NLS-1$ > new Functor("getKBPerSecond") }, //$NON-NLS-1$ > - new Functor[] { null, null, null, null, null, null, null, null, null, null }, > - new Class[] { String.class, Long.class, Long.class, Long.class, Long.class, Long.class, > - Long.class, String.class, String.class, String.class }); > - eltList.add(new BarGraph("average", true, new Color(202, 0, 0))); > - eltList.add(new BarGraph("aggregate_report_median", false, new Color(49, 49, 181))); > - eltList.add(new BarGraph("aggregate_report_90%_line", false, new Color(42, 121, 42))); > - eltList.add(new BarGraph("aggregate_report_min", false, Color.LIGHT_GRAY)); > - eltList.add(new BarGraph("aggregate_report_max", false, Color.DARK_GRAY)); > - clearData(); > - init(); > + new Functor[] { null, null, null, null, null, null, null, null, null, null, null, null }, > + new Class[] { String.class, Long.class, Long.class, Long.class, Long.class, > + Long.class, Long.class, Long.class, Long.class, String.class, > + String.class, String.class }); > } > > // Column renderers > - private static final TableCellRenderer[] RENDERERS = > + static final TableCellRenderer[] RENDERERS = > new TableCellRenderer[]{ > null, // Label > null, // count > null, // Mean > null, // median > null, // 90% > + null, // 95% > + null, // 99% > null, // Min > null, // Max > - new NumberRenderer("#0.00%"), // Error %age > - new RateRenderer("#.0"), // Throughpur > - new NumberRenderer("#.0"), // pageSize > + new NumberRenderer("#0.00%"), // Error %age //$NON-NLS-1$ > + new RateRenderer("#.0"), // Throughput //$NON-NLS-1$ > + new NumberRenderer("#.0"), // pageSize //$NON-NLS-1$ > }; > > public static boolean testFunctors(){ > @@ -347,7 +392,9 @@ public class StatGraphVisualizer extends > mainPanel.add(makeTitlePanel()); > > myJTable = new JTable(model); > - myJTable.setPreferredScrollableViewportSize(new Dimension(500, 80)); > + // Fix centering of titles > + myJTable.getTableHeader().setDefaultRenderer(new HeaderAsPropertyRenderer(COLUMNS_MSG_PARAMETERS)); > + myJTable.setPreferredScrollableViewportSize(new Dimension(500, 70)); > RendererUtils.applyRenderers(myJTable, RENDERERS); > myScrollPane = new JScrollPane(myJTable); > > @@ -424,7 +471,7 @@ public class StatGraphVisualizer extends > graphPanel.setMaxLength(maxLength); > graphPanel.setMaxYAxisScale(maxYAxisScale); > graphPanel.setXAxisLabels(getAxisLabels()); > - graphPanel.setXAxisTitle((String) columnsList.getSelectedItem()); > + graphPanel.setXAxisTitle(JMeterUtils.getResString((String) columnsList.getSelectedItem())); > graphPanel.setYAxisLabels(this.yAxisLabel); > graphPanel.setYAxisTitle(this.yAxisTitle); > graphPanel.setLegendLabels(getLegendLabels()); > > Modified: jmeter/trunk/src/components/org/apache/jmeter/visualizers/StatVisualizer.java > URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/StatVisualizer.java?rev=1642410&r1=1642409&r2=1642410&view=diff > ============================================================================== > --- jmeter/trunk/src/components/org/apache/jmeter/visualizers/StatVisualizer.java (original) > +++ jmeter/trunk/src/components/org/apache/jmeter/visualizers/StatVisualizer.java Sat Nov 29 10:06:00 2014 > @@ -37,7 +37,6 @@ import javax.swing.JScrollPane; > import javax.swing.JTable; > import javax.swing.border.Border; > import javax.swing.border.EmptyBorder; > -import javax.swing.table.TableCellRenderer; > > import org.apache.jmeter.gui.util.FileDialoger; > import org.apache.jmeter.gui.util.HeaderAsPropertyRenderer; > @@ -47,11 +46,8 @@ import org.apache.jmeter.save.CSVSaveSer > import org.apache.jmeter.testelement.TestElement; > import org.apache.jmeter.util.JMeterUtils; > import org.apache.jmeter.visualizers.gui.AbstractVisualizer; > -import org.apache.jorphan.gui.NumberRenderer; > import org.apache.jorphan.gui.ObjectTableModel; > -import org.apache.jorphan.gui.RateRenderer; > import org.apache.jorphan.gui.RendererUtils; > -import org.apache.jorphan.reflect.Functor; > import org.apache.jorphan.util.JOrphanUtils; > > /** > @@ -69,18 +65,6 @@ public class StatVisualizer extends Abst > > private static final String SAVE_HEADERS = "saveHeaders"; //$NON-NLS-1$ > > - private static final String[] COLUMNS = { > - "sampler_label", //$NON-NLS-1$ > - "aggregate_report_count", //$NON-NLS-1$ > - "average", //$NON-NLS-1$ > - "aggregate_report_median", //$NON-NLS-1$ > - "aggregate_report_90%_line", //$NON-NLS-1$ > - "aggregate_report_min", //$NON-NLS-1$ > - "aggregate_report_max", //$NON-NLS-1$ > - "aggregate_report_error%", //$NON-NLS-1$ > - "aggregate_report_rate", //$NON-NLS-1$ > - "aggregate_report_bandwidth" }; //$NON-NLS-1$ > - > private final String TOTAL_ROW_LABEL > = JMeterUtils.getResString("aggregate_report_total_label"); //$NON-NLS-1$ > > @@ -109,43 +93,11 @@ public class StatVisualizer extends Abst > > public StatVisualizer() { > super(); > - model = new ObjectTableModel(COLUMNS, > - SamplingStatCalculator.class, > - new Functor[] { > - new Functor("getLabel"), //$NON-NLS-1$ > - new Functor("getCount"), //$NON-NLS-1$ > - new Functor("getMeanAsNumber"), //$NON-NLS-1$ > - new Functor("getMedian"), //$NON-NLS-1$ > - new Functor("getPercentPoint", //$NON-NLS-1$ > - new Object[] { new Float(.900) }), > - new Functor("getMin"), //$NON-NLS-1$ > - new Functor("getMax"), //$NON-NLS-1$ > - new Functor("getErrorPercentage"), //$NON-NLS-1$ > - new Functor("getRate"), //$NON-NLS-1$ > - new Functor("getKBPerSecond") //$NON-NLS-1$ > - }, > - new Functor[] { null, null, null, null, null, null, null, null, null, null }, > - new Class[] { String.class, Long.class, Long.class, Long.class, Long.class, > - Long.class, Long.class, String.class, String.class, String.class }); > + model = StatGraphVisualizer.createObjectTableModel(); > clearData(); > init(); > } > > - // Column renderers > - private static final TableCellRenderer[] RENDERERS = > - new TableCellRenderer[]{ > - null, // Label > - null, // count > - null, // Mean > - null, // median > - null, // 90% > - null, // Min > - null, // Max > - new NumberRenderer("#0.00%"), // Error %age //$NON-NLS-1$ > - new RateRenderer("#.0"), // Throughput //$NON-NLS-1$ > - new NumberRenderer("#.0"), // pageSize //$NON-NLS-1$ > - }; > - > /** @deprecated - only for use in testing */ > @Deprecated > public static boolean testFunctors(){ > @@ -219,9 +171,9 @@ public class StatVisualizer extends Abst > // SortFilterModel mySortedModel = > // new SortFilterModel(myStatTableModel); > myJTable = new JTable(model); > - myJTable.getTableHeader().setDefaultRenderer(new HeaderAsPropertyRenderer()); > + myJTable.getTableHeader().setDefaultRenderer(new HeaderAsPropertyRenderer(StatGraphVisualizer.COLUMNS_MSG_PARAMETERS)); > myJTable.setPreferredScrollableViewportSize(new Dimension(500, 70)); > - RendererUtils.applyRenderers(myJTable, RENDERERS); > + RendererUtils.applyRenderers(myJTable, StatGraphVisualizer.RENDERERS); > myScrollPane = new JScrollPane(myJTable); > this.add(mainPanel, BorderLayout.NORTH); > this.add(myScrollPane, BorderLayout.CENTER); > > Modified: jmeter/trunk/src/core/org/apache/jmeter/gui/util/HeaderAsPropertyRenderer.java > URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/gui/util/HeaderAsPropertyRenderer.java?rev=1642410&r1=1642409&r2=1642410&view=diff > ============================================================================== > --- jmeter/trunk/src/core/org/apache/jmeter/gui/util/HeaderAsPropertyRenderer.java (original) > +++ jmeter/trunk/src/core/org/apache/jmeter/gui/util/HeaderAsPropertyRenderer.java Sat Nov 29 10:06:00 2014 > @@ -19,6 +19,7 @@ > package org.apache.jmeter.gui.util; > > import java.awt.Component; > +import java.text.MessageFormat; > > import javax.swing.JTable; > import javax.swing.SwingConstants; > @@ -34,9 +35,21 @@ import org.apache.jmeter.util.JMeterUtil > public class HeaderAsPropertyRenderer extends DefaultTableCellRenderer { > > private static final long serialVersionUID = 240L; > + private Object[][] columnsMsgParameters; > > + /** > + * > + */ > public HeaderAsPropertyRenderer() { > + this(null); > + } > + > + /** > + * @param columnsMsgParameters Optional parameters of i18n keys > + */ > + public HeaderAsPropertyRenderer(Object[][] columnsMsgParameters) { > super(); > + this.columnsMsgParameters = columnsMsgParameters; > } > > @Override > @@ -68,6 +81,10 @@ public class HeaderAsPropertyRenderer ex > if (value == null){ > return ""; > } > - return JMeterUtils.getResString(value.toString()); > + if(columnsMsgParameters != null && columnsMsgParameters[column] != null) { > + return MessageFormat.format(JMeterUtils.getResString(value.toString()), columnsMsgParameters[column]); > + } else { > + return JMeterUtils.getResString(value.toString()); > + } > } > } > > Modified: jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties > URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1642410&r1=1642409&r2=1642410&view=diff > ============================================================================== > --- jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties (original) > +++ jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties Sat Nov 29 10:06:00 2014 > @@ -77,8 +77,10 @@ aggregate_graph_xaxis_group=X Axis > aggregate_graph_yaxis_group=Y Axis (milli-seconds) > aggregate_graph_yaxis_max_value=Scale maximum value\: > aggregate_report=Aggregate Report > +aggregate_report_xx_pct1_line={0}% Line > +aggregate_report_xx_pct2_line={0}% Line > +aggregate_report_xx_pct3_line={0}% Line > aggregate_report_90=90% > -aggregate_report_90%_line=90% Line > aggregate_report_bandwidth=KB/sec > aggregate_report_count=# Samples > aggregate_report_error=Error > > Modified: jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties > URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties?rev=1642410&r1=1642409&r2=1642410&view=diff > ============================================================================== > --- jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties (original) > +++ jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties Sat Nov 29 10:06:00 2014 > @@ -71,8 +71,10 @@ aggregate_graph_xaxis_group=Abscisses > aggregate_graph_yaxis_group=Ordonn\u00E9es (milli-secondes) > aggregate_graph_yaxis_max_value=Echelle maximum \: > aggregate_report=Rapport agr\u00E9g\u00E9 > +aggregate_report_xx_pct1_line={0}% centile > +aggregate_report_xx_pct2_line={0}% centile > +aggregate_report_xx_pct3_line={0}% centile No need to have 3 different properties; the same one can be shared as the values are identical (and have the same function) > aggregate_report_90=90% > -aggregate_report_90%_line=90e centile This needs to be removed from the other language property files. > aggregate_report_bandwidth=Ko/sec > aggregate_report_count=\# Echantillons > aggregate_report_error=Erreur > > Modified: jmeter/trunk/xdocs/changes.xml > URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1642410&r1=1642409&r2=1642410&view=diff > ============================================================================== > --- jmeter/trunk/xdocs/changes.xml (original) > +++ jmeter/trunk/xdocs/changes.xml Sat Nov 29 10:06:00 2014 > @@ -190,6 +190,7 @@ See 56357 for deta >
    >
  • 55932 - Create a Async BackendListener to allow easy plug of new listener (Graphite, JDBC, Console,...)
  • >
  • 57246 - BackendListener : Create a Graphite implementation
  • > +
  • 57217 - Aggregate graph and Aggregate report improvements (3 configurable percentiles, same data in both, factor out code). Contributed by Ubik Load Pack (support at ubikloadpack.com)
  • >
> >

Timers, Assertions, Config, Pre- & Post-Processors

> @@ -223,6 +224,7 @@ See 56357 for deta > We also thank bug reporters who helped us improve JMeter.
> For this release we want to give special thanks to the following reporters for the clear reports and tests made after our fixes: > > > Apologies if we have omitted anyone else. > > Modified: jmeter/trunk/xdocs/usermanual/component_reference.xml > URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1642410&r1=1642409&r2=1642410&view=diff > ============================================================================== > --- jmeter/trunk/xdocs/usermanual/component_reference.xml (original) > +++ jmeter/trunk/xdocs/usermanual/component_reference.xml Sat Nov 29 10:06:00 2014 > @@ -2905,7 +2905,7 @@ compiled code must be available to JMete >

> > > - > + > The aggregate report creates a table row for each differently named request in your > test. For each request, it totals the response information and provides request count, min, max, > average, error rate, approximate throughput (request/second) and Kilobytes per second throughput. > @@ -2922,12 +2922,20 @@ the Aggregate Report. >

>

> Calculation of the Median and 90% Line (90th percentile) values requires additional memory. > -For JMeter 2.3.4 and earlier, details of each sample were saved separately, which meant a lot of memory was needed. > JMeter now combines samples with the same elapsed time, so far less memory is used. > However, for samples that take more than a few seconds, the probability is that fewer samples will have identical times, > in which case more memory will be needed. > +Note you can use this listener afterwards to reload a CSV or XML results file which is the recommended way to avoid performance impacts. > See the for a similar Listener that does not store individual samples and so needs constant memory. >

> + > +Starting with JMeter 2.12, you can configure the 3 percentile values you want to compute, this can be done by setting properties: > +
    > +
  • aggregate_rpt_pct1: defaults to 90th percentile
  • > +
  • aggregate_rpt_pct2: defaults to 95th percentile
  • > +
  • aggregate_rpt_pct3: defaults to 99th percentile
  • > +
> +
>
    >
  • Label - The label of the sample. > If "Include group name in label?" is selected, then the name of the thread group is added as a prefix. > @@ -2939,6 +2947,10 @@ This allows identical labels from differ > 50% of the samples took no more than this time; the remainder took at least as long.
  • >
  • 90% Line - 90% of the samples took no more than this time. > The remaining samples took at least as long as this. (90th percentile)
  • > +
  • 95% Line - 95% of the samples took no more than this time. > +The remaining samples took at least as long as this. (95th percentile)
  • > +
  • 99% Line - 99% of the samples took no more than this time. > +The remaining samples took at least as long as this. (99th percentile)
  • >
  • Min - The shortest time for the samples with the same label
  • >
  • Max - The longest time for the samples with the same label
  • >
  • Error % - Percent of requests with errors
  • > @@ -2954,7 +2966,7 @@ i.e. 30.0 requests/minute is saved as 0. >
    >

    > The figure below shows an example of selecting the "Include group name" checkbox. > -

    Sample "Include group name" display
    > +
    Sample "Include group name" display
    >

    >
    > > @@ -3034,7 +3046,7 @@ know for sure is to use a profiling tool > > > > - > + > The aggregate graph is similar to the aggregate report. The primary > difference is the aggregate graph provides an easy way to generate bar graphs and save > the graph as a PNG file. > >