Author: sebb
Date: Fri Nov 23 11:17:10 2007
New Revision: 597726
URL: http://svn.apache.org/viewvc?rev=597726&view=rev
Log:
Add Successes Only logging and display
Modified:
jakarta/jmeter/trunk/docs/changes.html
jakarta/jmeter/trunk/docs/images/screenshots/simpledatawriter.png
jakarta/jmeter/trunk/docs/usermanual/component_reference.html
jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultCollector.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/OldSaveService.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/gui/AbstractVisualizer.java
jakarta/jmeter/trunk/xdocs/changes.xml
jakarta/jmeter/trunk/xdocs/images/screenshots/simpledatawriter.png
jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
Modified: jakarta/jmeter/trunk/docs/changes.html
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/changes.html?rev=597726&r1=597725&r2=597726&view=diff
==============================================================================
--- jakarta/jmeter/trunk/docs/changes.html (original)
+++ jakarta/jmeter/trunk/docs/changes.html Fri Nov 23 11:17:10 2007
@@ -569,6 +569,11 @@
</li>
+
<li >
+ Add Successes
Only logging and display
+ </li>
+
+
</ul>
<h4 >
Non-functional
Improvements
Modified: jakarta/jmeter/trunk/docs/images/screenshots/simpledatawriter.png
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/images/screenshots/simpledatawriter.png?rev=597726&r1=597725&r2=597726&view=diff
==============================================================================
Binary files - no diff available.
Modified: jakarta/jmeter/trunk/docs/usermanual/component_reference.html
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/usermanual/component_reference.html?rev=597726&r1=597725&r2=597726&view=diff
==============================================================================
--- jakarta/jmeter/trunk/docs/usermanual/component_reference.html (original)
+++ jakarta/jmeter/trunk/docs/usermanual/component_reference.html Fri Nov 23
11:17:10 2007
@@ -5464,6 +5464,67 @@
</table></p>
+
<p >
+
+ The figure below shows an example of the result file configuration panel
+
+
<p><table border="0" cellspacing="0"
cellpadding="0"><tr><td><img
src="../images/screenshots/simpledatawriter.png"><br>
+ <font size="-1"> Result
file configuration panel
+ </font></td></tr></table></p>
+
+
+ </p>
+
+
+
<p>
+ <b>Parameters</b>
+ <table border="1" cellspacing="0" cellpadding="2">
+ <tr><th>Attribute</th><th>Description</th><th>Required</th></tr>
+ <tr>
+ <td>File Name</td>
+ <td> Name of
the file containing sample results
+ </td>
+ <td>
+
No
+ </td>
+ </tr>
+ <tr>
+ <td>Browse...</td>
+ <td> File
Browse Button
+ </td>
+ <td>
+
No
+ </td>
+ </tr>
+ <tr>
+ <td>Errors</td>
+ <td> Select
this to write/read only results with errors
+ </td>
+ <td>
+
No
+ </td>
+ </tr>
+ <tr>
+ <td>Successes</td>
+ <td> Select
this to write/read only results without errors.
+ If neither Errors nor Successes is selected, then all results are
processed.
+ </td>
+ <td>
+
No
+ </td>
+ </tr>
+ <tr>
+ <td>Configure</td>
+ <td>
Configure Button, see below
+ </td>
+ <td>
+
No
+ </td>
+ </tr>
+ </table>
+ </p>
+
+
</description>
<table border="0" cellspacing="0" cellpadding="2">
<tr><td>
@@ -5827,7 +5888,7 @@
See the jmeter.properties file for details.
<p><b>Control Panel</b></p>
- <div align="center"><img
width='649' height='157' src="../images/screenshots/simpledatawriter.png"></div>
+ <div align="center"><img
width='786' height='145' src="../images/screenshots/simpledatawriter.png"></div>
</td></tr>
<tr><td><br></td></tr>
</table>
@@ -10518,6 +10579,7 @@
serially rather than in parallel.
</p>
+
<p >
Test plan now
provides an easy way to add classpath setting to a specific test plan. The
feature is additive, meaning that you can add jar files or directories, but
removing an entry requires restarting JMeter. In the past, users had to copy
all the jar files to jmeter/lib/ directory. Now that is not necessary. JMeter
properties also provides an entry for loading additional classpaths.
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultCollector.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultCollector.java?rev=597726&r1=597725&r2=597726&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultCollector.java
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultCollector.java
Fri Nov 23 11:17:10 2007
@@ -90,6 +90,8 @@
private static final String ERROR_LOGGING =
"ResultCollector.error_logging"; // $NON-NLS-1$
+ private static final String SUCCESS_ONLY_LOGGING =
"ResultCollector.success_only_logging"; // $NON-NLS-1$
+
transient private DefaultConfigurationSerializer serializer;
transient private volatile PrintWriter out;
@@ -109,6 +111,7 @@
// current = -1;
// serializer = new DefaultConfigurationSerializer();
setErrorLogging(false);
+ setSuccessOnlyLogging(false);
setProperty(new ObjectProperty(SAVE_CONFIG, new
SampleSaveConfiguration()));
}
@@ -135,6 +138,35 @@
setProperty(new BooleanProperty(ERROR_LOGGING, errorLogging));
}
+ public void setSuccessOnlyLogging(boolean value) {
+ if (value) {
+ setProperty(new BooleanProperty(SUCCESS_ONLY_LOGGING,
true));
+ } else {
+ removeProperty(SUCCESS_ONLY_LOGGING);
+ }
+ }
+
+ public boolean isSuccessOnlyLogging() {
+ return getPropertyAsBoolean(SUCCESS_ONLY_LOGGING,false);
+ }
+
+ /**
+ * Decides whether or not to a sample is wanted based on:
+ * - errorOnly
+ * - successOnly
+ * - sample success
+ *
+ * @param success is sample successful
+ * @return whether to log/display the sample
+ */
+ public boolean isSampleWanted(boolean success){
+ boolean errorOnly = isErrorLogging();
+ boolean successOnly = isSuccessOnlyLogging();
+ return (!errorOnly && !successOnly) ||
+ (success && successOnly) ||
+ (!success && errorOnly);
+ // successOnly and errorOnly cannot both be set
+ }
/**
* Sets the filename attribute of the ResultCollector object.
*
@@ -193,7 +225,6 @@
boolean parsedOK = false, errorDetected = false;
String filename = getFilename();
File file = new File(filename);
- boolean showAll = !isErrorLogging();
if (file.exists()) {
clearVisualizer();
BufferedReader dataReader = null;
@@ -218,7 +249,7 @@
SampleEvent event =
CSVSaveService.makeResultFromDelimitedString(line,saveConfig,lineNumber);
if (event != null){
final
SampleResult result = event.getResult();
- if (showAll || !result.isSuccessful()) {
+ if (isSampleWanted(result.isSuccessful())) {
visualizer.add(result);
}
}
@@ -229,12 +260,12 @@
} else { // We are processing XML
try { // Assume XStream
bufferedInputStream = new BufferedInputStream(new
FileInputStream(file));
-
readSamples(SaveService.loadTestResults(bufferedInputStream), visualizer,
showAll);
+
readSamples(SaveService.loadTestResults(bufferedInputStream), visualizer);
parsedOK = true;
} catch (Exception e) {
log.info("Failed to load "+filename+" using
XStream, trying old XML format. Error was: "+e);
try {
- OldSaveService.processSamples(filename,
visualizer, showAll);
+ OldSaveService.processSamples(filename,
visualizer, this);
parsedOK = true;
} catch (Exception e1) {
log.warn("Error parsing Avalon XML. " +
e1.getLocalizedMessage());
@@ -367,12 +398,12 @@
}
// Only called if visualizer is non-null
- private void readSamples(TestResultWrapper testResults, Visualizer
visualizer, boolean showAll) throws Exception {
+ private void readSamples(TestResultWrapper testResults, Visualizer
visualizer) throws Exception {
Collection samples = testResults.getSampleResults();
Iterator iter = samples.iterator();
while (iter.hasNext()) {
SampleResult result = (SampleResult) iter.next();
- if (showAll || !result.isSuccessful()) {
+ if (isSampleWanted(result.isSuccessful())) {
visualizer.add(result);
}
}
@@ -401,7 +432,7 @@
public void sampleOccurred(SampleEvent event) {
SampleResult result = event.getResult();
- if (!isErrorLogging() || !result.isSuccessful()) {
+ if (isSampleWanted(result.isSuccessful())) {
sendToVisualizer(result);
if ( out != null) {// no point otherwise
SampleSaveConfiguration config =
getSaveConfig();
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=597726&r1=597725&r2=597726&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
Fri Nov 23 11:17:10 2007
@@ -190,7 +190,7 @@
file_visualizer_flush=Flush
file_visualizer_missing_filename=No output filename specified.
file_visualizer_open=Open
-file_visualizer_output_file=Write All Data to a File / Read from file
+file_visualizer_output_file=Write results to file / Read from file
file_visualizer_submit_data=Include Submitted Data
file_visualizer_title=File Reporter
file_visualizer_verbose=Verbose Output
@@ -391,13 +391,15 @@
ldapext_testing_title= LDAP Extended Request
load=Load
load_wsdl=Load WSDL
-log_errors_only=Errors Only (Log & Display)
+log_errors_only=Errors
log_file=Location of log File
+log_only=Log/Display Only:
log_parser=Name of Log Parser class
log_parser_cnf_msg=Could not find the class. Please make sure you place your
jar file in the /lib directory.
log_parser_illegal_msg=Could not access the class due to IllegalAcessException.
log_parser_instantiate_msg=Could not create an instance of the log parser.
Please make sure the parser implements LogParser interface.
log_sampler=Tomcat Access Log Sampler
+log_success_only=Successes
logic_controller_title=Simple Controller
login_config=Login Configuration
login_config_element=Login Config Element
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/OldSaveService.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/OldSaveService.java?rev=597726&r1=597725&r2=597726&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/OldSaveService.java
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/save/OldSaveService.java
Fri Nov 23 11:17:10 2007
@@ -36,6 +36,7 @@
import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
import
org.apache.avalon.framework.configuration.DefaultConfigurationSerializer;
import org.apache.jmeter.assertions.AssertionResult;
+import org.apache.jmeter.reporters.ResultCollector;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.SampleSaveConfiguration;
import org.apache.jmeter.testelement.TestElement;
@@ -473,7 +474,7 @@
}
// Called by ResultCollector#loadExistingFile()
- public static void processSamples(String filename, Visualizer
visualizer, boolean showAll)
+ public static void processSamples(String filename, Visualizer
visualizer, ResultCollector rc)
throws SAXException, IOException, ConfigurationException
{
DefaultConfigurationBuilder cfgbuilder = new
DefaultConfigurationBuilder();
@@ -481,7 +482,7 @@
Configuration[] samples = savedSamples.getChildren();
for (int i = 0; i < samples.length; i++) {
SampleResult result =
OldSaveService.getSampleResult(samples[i]);
- if (showAll || !result.isSuccessful()) {
+ if (rc.isSampleWanted(result.isSuccessful())) {
visualizer.add(result);
}
}
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/gui/AbstractVisualizer.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/gui/AbstractVisualizer.java?rev=597726&r1=597725&r2=597726&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/gui/AbstractVisualizer.java
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/visualizers/gui/AbstractVisualizer.java
Fri Nov 23 11:17:10 2007
@@ -27,6 +27,7 @@
import javax.swing.JButton;
import javax.swing.JCheckBox;
+import javax.swing.JLabel;
import javax.swing.JPopupMenu;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
@@ -116,6 +117,9 @@
/** A checkbox choosing whether or not only errors should be logged. */
private JCheckBox errorLogging;
+
+ /* A checkbox choosing whether or not only successes should be logged.
*/
+ private JCheckBox successOnlyLogging;
private JButton saveConfigButton;
@@ -126,7 +130,19 @@
public AbstractVisualizer() {
super();
+ // errorLogging and successOnlyLogging are mutually exclusive
errorLogging = new
JCheckBox(JMeterUtils.getResString("log_errors_only")); // $NON-NLS-1$
+ errorLogging.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e) {
+ if (errorLogging.isSelected())
successOnlyLogging.setSelected(false);
+ }
+ });
+ successOnlyLogging = new
JCheckBox(JMeterUtils.getResString("log_success_only")); // $NON-NLS-1$
+ successOnlyLogging.addActionListener(new ActionListener(){
+ public void actionPerformed(ActionEvent e) {
+ if (successOnlyLogging.isSelected())
errorLogging.setSelected(false);
+ }
+ });
saveConfigButton = new
JButton(JMeterUtils.getResString("config_save_settings")); // $NON-NLS-1$
saveConfigButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
@@ -142,7 +158,9 @@
filePanel = new
FilePanel(JMeterUtils.getResString("file_visualizer_output_file"), ".jtl"); //
$NON-NLS-1$ $NON-NLS-2$
filePanel.addChangeListener(this);
+ filePanel.add(new
JLabel(JMeterUtils.getResString("log_only"))); // $NON-NLS-1$
filePanel.add(errorLogging);
+ filePanel.add(successOnlyLogging);
filePanel.add(saveConfigButton);
}
@@ -275,6 +293,7 @@
if (c instanceof ResultCollector) {
ResultCollector rc = (ResultCollector) c;
rc.setErrorLogging(errorLogging.isSelected());
+
rc.setSuccessOnlyLogging(successOnlyLogging.isSelected());
rc.setFilename(getFile());
collector = rc;
}
@@ -286,6 +305,7 @@
setFile(el.getPropertyAsString(ResultCollector.FILENAME));
ResultCollector rc = (ResultCollector) el;
errorLogging.setSelected(rc.isErrorLogging());
+ successOnlyLogging.setSelected(rc.isSuccessOnlyLogging());
if (collector == null) {
collector = new ResultCollector();
}
Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=597726&r1=597725&r2=597726&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Fri Nov 23 11:17:10 2007
@@ -196,6 +196,7 @@
<li>Proxy now rejects attempts to use it with https</li>
<li>Proxy spoofing can now use RE matching to determine which urls to spoof
(useful if images are not https)</li>
<li>Proxy spoofing now drops the default HTTPS port (443) when converting
https: links to http:</li>
+<li>Add Successes Only logging and display</li>
</ul>
<h4>Non-functional Improvements</h4>
Modified: jakarta/jmeter/trunk/xdocs/images/screenshots/simpledatawriter.png
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/simpledatawriter.png?rev=597726&r1=597725&r2=597726&view=diff
==============================================================================
Binary files - no diff available.
Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=597726&r1=597725&r2=597726&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Fri Nov 23
11:17:10 2007
@@ -1698,6 +1698,18 @@
The settings in jmeter.properties also apply to the listener that is added
by using the -l command-line flag.
</note>
+<p>
+ The figure below shows an example of the result file configuration panel
+<figure width="786" height="145" image="simpledatawriter.png">Result file
configuration panel</figure>
+</p>
+<properties>
+ <property name="File Name" required="No">Name of the file containing
sample results</property>
+ <property name="Browse..." required="No">File Browse Button</property>
+ <property name="Errors" required="No">Select this to write/read only
results with errors</property>
+ <property name="Successes" required="No">Select this to write/read
only results without errors.
+ If neither Errors nor Successes is selected, then all results are
processed.</property>
+ <property name="Configure" required="No">Configure Button, see
below</property>
+</properties>
</description>
<component name="Sample Result Save Configuration" index="§-num;.3.1"
width="629" height="300" screenshot="sample_result_config.png">
@@ -1832,7 +1844,7 @@
</description>
</component>
-<component name="Simple Data Writer" index="§-num;.3.9" width="649"
height="157" screenshot="simpledatawriter.png">
+<component name="Simple Data Writer" index="§-num;.3.9" width="786"
height="145" screenshot="simpledatawriter.png">
<description>This listener can record results to a file
but not to the UI. It is meant to provide an efficient means of
recording data by eliminating GUI overhead.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]