You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2018/03/20 19:23:19 UTC
svn commit: r1827348 - in /jmeter/trunk:
src/core/org/apache/jmeter/reporters/
src/core/org/apache/jmeter/reporters/gui/
src/core/org/apache/jmeter/resources/ xdocs/ xdocs/usermanual/
Author: pmouawad
Date: Tue Mar 20 19:23:19 2018
New Revision: 1827348
URL: http://svn.apache.org/viewvc?rev=1827348&view=rev
Log:
[Bug 62195] Save Responses to a file : Improve component and UI
Contributed by UbikLoadPack
Bugzilla Id: 62195
Modified:
jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultSaver.java
jmeter/trunk/src/core/org/apache/jmeter/reporters/gui/ResultSaverGui.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/src/core/org/apache/jmeter/reporters/ResultSaver.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultSaver.java?rev=1827348&r1=1827347&r2=1827348&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultSaver.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/reporters/ResultSaver.java Tue Mar 20 19:23:19 2018
@@ -28,6 +28,7 @@ import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
+import org.apache.jmeter.control.TransactionController;
import org.apache.jmeter.engine.util.NoThreadClone;
import org.apache.jmeter.samplers.SampleEvent;
import org.apache.jmeter.samplers.SampleListener;
@@ -36,6 +37,7 @@ import org.apache.jmeter.services.FileSe
import org.apache.jmeter.testelement.AbstractTestElement;
import org.apache.jmeter.testelement.TestStateListener;
import org.apache.jmeter.threads.JMeterContextService;
+import org.apache.jorphan.util.JMeterStopTestNowException;
import org.apache.jorphan.util.JOrphanUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -73,6 +75,8 @@ public class ResultSaver extends Abstrac
public static final String ADD_TIMESTAMP = "FileSaver.addTimstamp"; // $NON-NLS-1$
public static final String NUMBER_PAD_LENGTH = "FileSaver.numberPadLen"; // $NON-NLS-1$
+
+ public static final String IGNORE_TC = "FileSaver.ignoreTC"; // $NON-NLS-1$
//- JMX property names
@@ -150,7 +154,7 @@ public class ResultSaver extends Abstrac
*/
@Override
public void sampleOccurred(SampleEvent e) {
- processSample(e.getResult(), new Counter());
+ processSample(e.getResult(), new Counter());
}
/**
@@ -172,15 +176,11 @@ public class ResultSaver extends Abstrac
* @param num number to append to variable (if >0)
*/
private void saveSample(SampleResult s, int num) {
- // Should we save the sample?
- if (s.isSuccessful()){
- if (getErrorsOnly()){
- return;
- }
- } else {
- if (getSuccessOnly()){
- return;
+ if(ignoreSampler(s)) {
+ if (log.isDebugEnabled()) {
+ log.debug("Ignoring SampleResult from Sampler {}", s.getSampleLabel());
}
+ return;
}
String fileName = makeFileName(s.getContentType(), getSkipAutoNumber(), getSkipSuffix());
@@ -198,6 +198,7 @@ public class ResultSaver extends Abstrac
JMeterContextService.getContext().getVariables().put(variable, fileName);
}
File out = new File(fileName);
+ createFoldersIfNeeded(out.getParentFile());
try (FileOutputStream fos = new FileOutputStream(out);
BufferedOutputStream bos = new BufferedOutputStream(fos)){
JOrphanUtils.write(s.getResponseData(), bos); // chunk the output if necessary
@@ -209,6 +210,34 @@ public class ResultSaver extends Abstrac
}
/**
+ * @param s {@link SamplerResult}
+ * @return true if we should ignore SampleResult
+ */
+ private boolean ignoreSampler(SampleResult s) {
+ if(getIgnoreTC() && TransactionController.isFromTransactionController(s)) {
+ return true;
+ }
+ // Should we save the sample?
+ return ((s.isSuccessful() && getErrorsOnly()) ||
+ (!s.isSuccessful() && getSuccessOnly()));
+ }
+
+ /**
+ * Create path hierarchy to parentFile
+ * @param parentFile
+ */
+ private void createFoldersIfNeeded(File parentFile) {
+ if (!parentFile.exists()) {
+ log.debug("Creating path hierarchy for folder {}", parentFile.getAbsolutePath());
+ if(!parentFile.mkdirs()) {
+ throw new JMeterStopTestNowException("Cannot create path hierarchy for folder "+ parentFile.getAbsolutePath());
+ }
+ } else {
+ log.debug("Folder {}Â already exists", parentFile.getAbsolutePath());
+ }
+ }
+
+ /**
* @param contentType Content type
* @param skipAutoNumber Skip auto number
* @param skipSuffix Skip suffix
@@ -263,37 +292,49 @@ public class ResultSaver extends Abstrac
// not used
}
- private String getFilename() {
+ public String getFilename() {
return getPropertyAsString(FILENAME);
}
- private String getVariableName() {
+ public String getVariableName() {
return getPropertyAsString(VARIABLE_NAME,""); // $NON-NLS-1$
}
- private boolean getErrorsOnly() {
+ public boolean getErrorsOnly() {
return getPropertyAsBoolean(ERRORS_ONLY);
}
- private boolean getSkipAutoNumber() {
+ public boolean getSkipAutoNumber() {
return getPropertyAsBoolean(SKIP_AUTO_NUMBER);
}
- private boolean getSkipSuffix() {
+ public boolean getSkipSuffix() {
return getPropertyAsBoolean(SKIP_SUFFIX);
}
- private boolean getSuccessOnly() {
+ public boolean getSuccessOnly() {
return getPropertyAsBoolean(SUCCESS_ONLY);
}
- private boolean getAddTimeStamp() {
+ public boolean getAddTimeStamp() {
return getPropertyAsBoolean(ADD_TIMESTAMP);
}
- private int getNumberPadLen() {
+ public int getNumberPadLen() {
return getPropertyAsInt(NUMBER_PAD_LENGTH, 0);
}
+
+ public boolean getIgnoreTC() {
+ return getPropertyAsBoolean(IGNORE_TC, true);
+ }
+
+ public void setIgnoreTC(boolean value) {
+ setProperty(IGNORE_TC, value, true);
+ }
+
+ public void setFilename(String value) {
+ setProperty(FILENAME, value);
+ }
// Mutable int to keep track of sample count
private static class Counter{
@@ -315,4 +356,32 @@ public class ResultSaver extends Abstrac
public boolean equals(Object obj) {
return super.equals(obj);
}
+
+ public void setAddTimestamp(boolean selected) {
+ setProperty(ADD_TIMESTAMP, selected, false);
+ }
+
+ public void setVariableName(String value) {
+ setProperty(VARIABLE_NAME, value,""); //$NON-NLS-1$
+ }
+
+ public void setNumberPadLength(String text) {
+ setProperty(ResultSaver.NUMBER_PAD_LENGTH, text,""); //$NON-NLS-1$
+ }
+
+ public void setErrorsOnly(boolean selected) {
+ setProperty(ResultSaver.ERRORS_ONLY, selected);
+ }
+
+ public void setSuccessOnly(boolean selected) {
+ setProperty(ResultSaver.SUCCESS_ONLY, selected);
+ }
+
+ public void setSkipSuffix(boolean selected) {
+ setProperty(ResultSaver.SKIP_SUFFIX, selected);
+ }
+
+ public void setSkipAutoNumber(boolean selected) {
+ setProperty(ResultSaver.SKIP_AUTO_NUMBER, selected);
+ }
}
Modified: jmeter/trunk/src/core/org/apache/jmeter/reporters/gui/ResultSaverGui.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/reporters/gui/ResultSaverGui.java?rev=1827348&r1=1827347&r2=1827348&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/reporters/gui/ResultSaverGui.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/reporters/gui/ResultSaverGui.java Tue Mar 20 19:23:19 2018
@@ -19,16 +19,19 @@
package org.apache.jmeter.reporters.gui;
import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.util.List;
+import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JCheckBox;
-import javax.swing.JLabel;
+import javax.swing.JComponent;
import javax.swing.JPanel;
-import javax.swing.JTextField;
import org.apache.jmeter.reporters.ResultSaver;
import org.apache.jmeter.samplers.Clearable;
-import org.apache.jmeter.testelement.AbstractTestElement;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jmeter.visualizers.gui.AbstractListenerGui;
@@ -39,26 +42,28 @@ import org.apache.jorphan.gui.JLabeledTe
* of files
*
*/
-public class ResultSaverGui extends AbstractListenerGui implements Clearable {
+public class ResultSaverGui extends AbstractListenerGui implements Clearable { // NOSONAR Ignore inheritance rule
- private static final long serialVersionUID = 240L;
+ private static final long serialVersionUID = 241L;
- private JTextField filename;
+ private JLabeledTextField filename;
- private JTextField variableName;
+ private JLabeledTextField variableName;
+
+ private JLabeledTextField numberPadLength;
private JCheckBox errorsOnly;
private JCheckBox successOnly;
+ private JCheckBox ignoreTC;
+
private JCheckBox skipAutoNumber;
private JCheckBox skipSuffix;
private JCheckBox addTimestamp;
- private JLabeledTextField numberPadLength;
-
public ResultSaverGui() {
super();
init();
@@ -78,14 +83,17 @@ public class ResultSaverGui extends Abst
@Override
public void configure(TestElement el) {
super.configure(el);
- filename.setText(el.getPropertyAsString(ResultSaver.FILENAME));
- errorsOnly.setSelected(el.getPropertyAsBoolean(ResultSaver.ERRORS_ONLY));
- successOnly.setSelected(el.getPropertyAsBoolean(ResultSaver.SUCCESS_ONLY));
- skipAutoNumber.setSelected(el.getPropertyAsBoolean(ResultSaver.SKIP_AUTO_NUMBER));
- skipSuffix.setSelected(el.getPropertyAsBoolean(ResultSaver.SKIP_SUFFIX));
- variableName.setText(el.getPropertyAsString(ResultSaver.VARIABLE_NAME,""));
- addTimestamp.setSelected(el.getPropertyAsBoolean(ResultSaver.ADD_TIMESTAMP));
- numberPadLength.setText(el.getPropertyAsString(ResultSaver.NUMBER_PAD_LENGTH,""));
+ ResultSaver resultSaver = (ResultSaver) el;
+ filename.setText(resultSaver.getFilename());
+ errorsOnly.setSelected(resultSaver.getErrorsOnly());
+ successOnly.setSelected(resultSaver.getSuccessOnly());
+ ignoreTC.setSelected(resultSaver.getIgnoreTC());
+ skipAutoNumber.setSelected(resultSaver.getSkipAutoNumber());
+ skipSuffix.setSelected(resultSaver.getSkipSuffix());
+ variableName.setText(resultSaver.getVariableName());
+ addTimestamp.setSelected(resultSaver.getAddTimeStamp());
+ numberPadLength.setText(resultSaver.getNumberPadLen() == 0 ?
+ "" : Integer.toString(resultSaver.getNumberPadLen()));
}
/**
@@ -106,15 +114,16 @@ public class ResultSaverGui extends Abst
@Override
public void modifyTestElement(TestElement te) {
super.configureTestElement(te);
- te.setProperty(ResultSaver.FILENAME, filename.getText());
- te.setProperty(ResultSaver.ERRORS_ONLY, errorsOnly.isSelected());
- te.setProperty(ResultSaver.SKIP_AUTO_NUMBER, skipAutoNumber.isSelected());
- te.setProperty(ResultSaver.SKIP_SUFFIX, skipSuffix.isSelected());
- te.setProperty(ResultSaver.SUCCESS_ONLY, successOnly.isSelected());
- te.setProperty(ResultSaver.ADD_TIMESTAMP, addTimestamp.isSelected(), false);
- AbstractTestElement at = (AbstractTestElement) te;
- at.setProperty(ResultSaver.VARIABLE_NAME, variableName.getText(),""); //$NON-NLS-1$
- at.setProperty(ResultSaver.NUMBER_PAD_LENGTH, numberPadLength.getText(),""); //$NON-NLS-1$
+ ResultSaver resultSaver = (ResultSaver) te;
+ resultSaver.setFilename(filename.getText());
+ resultSaver.setErrorsOnly(errorsOnly.isSelected());
+ resultSaver.setSuccessOnly(successOnly.isSelected());
+ resultSaver.setSkipSuffix(skipSuffix.isSelected());
+ resultSaver.setSkipAutoNumber(skipAutoNumber.isSelected());
+ resultSaver.setIgnoreTC(ignoreTC.isSelected());
+ resultSaver.setAddTimestamp(addTimestamp.isSelected());
+ resultSaver.setVariableName(variableName.getText());
+ resultSaver.setNumberPadLength(numberPadLength.getText());
}
/**
@@ -129,6 +138,7 @@ public class ResultSaverGui extends Abst
filename.setText(""); //$NON-NLS-1$
errorsOnly.setSelected(false);
successOnly.setSelected(false);
+ ignoreTC.setSelected(true);
addTimestamp.setSelected(false);
variableName.setText(""); //$NON-NLS-1$
numberPadLength.setText(""); //$NON-NLS-1$
@@ -137,57 +147,107 @@ public class ResultSaverGui extends Abst
private void init() { // WARNING: called from ctor so must not be overridden (i.e. must be private or final)
setLayout(new BorderLayout());
setBorder(makeBorder());
+
Box box = Box.createVerticalBox();
box.add(makeTitlePanel());
- box.add(createFilenamePrefixPanel());
- box.add(createVariableNamePanel());
- errorsOnly = new JCheckBox(JMeterUtils.getResString("resultsaver_errors")); // $NON-NLS-1$
- box.add(errorsOnly);
- successOnly = new JCheckBox(JMeterUtils.getResString("resultsaver_success")); // $NON-NLS-1$
- box.add(successOnly);
- skipAutoNumber = new JCheckBox(JMeterUtils.getResString("resultsaver_skipautonumber")); // $NON-NLS-1$
- box.add(skipAutoNumber);
- skipSuffix = new JCheckBox(JMeterUtils.getResString("resultsaver_skipsuffix")); // $NON-NLS-1$
- box.add(skipSuffix);
- addTimestamp = new JCheckBox(JMeterUtils.getResString("resultsaver_addtimestamp")); // $NON-NLS-1$
- box.add(addTimestamp);
- numberPadLength = new JLabeledTextField(JMeterUtils.getResString("resultsaver_numberpadlen"));// $NON-NLS-1$
- box.add(numberPadLength);
+ box.add(createSaveConditionsPanel());
+ box.add(createSaveFormatPanel());
add(box, BorderLayout.NORTH);
}
- private JPanel createFilenamePrefixPanel()
- {
- JLabel label = new JLabel(JMeterUtils.getResString("resultsaver_prefix")); // $NON-NLS-1$
-
- filename = new JTextField(10);
+ private Component createSaveFormatPanel() {
+ filename = new JLabeledTextField(JMeterUtils.getResString("resultsaver_prefix"));
filename.setName(ResultSaver.FILENAME);
- label.setLabelFor(filename);
-
- JPanel filenamePanel = new JPanel(new BorderLayout(5, 0));
- filenamePanel.add(label, BorderLayout.WEST);
- filenamePanel.add(filename, BorderLayout.CENTER);
- return filenamePanel;
- }
+ numberPadLength = new JLabeledTextField(JMeterUtils.getResString("resultsaver_numberpadlen"));// $NON-NLS-1$
+ numberPadLength.setName(ResultSaver.NUMBER_PAD_LENGTH);
- private JPanel createVariableNamePanel()
- {
- JLabel label = new JLabel(JMeterUtils.getResString("resultsaver_variable")); // $NON-NLS-1$
+ skipAutoNumber = new JCheckBox(JMeterUtils.getResString("resultsaver_skipautonumber")); // $NON-NLS-1$
+ skipSuffix = new JCheckBox(JMeterUtils.getResString("resultsaver_skipsuffix")); // $NON-NLS-1$
+ addTimestamp = new JCheckBox(JMeterUtils.getResString("resultsaver_addtimestamp")); // $NON-NLS-1$
- variableName = new JTextField(10);
+ variableName = new JLabeledTextField(JMeterUtils.getResString("resultsaver_variable"));
variableName.setName(ResultSaver.VARIABLE_NAME);
- label.setLabelFor(variableName);
- JPanel filenamePanel = new JPanel(new BorderLayout(5, 0));
- filenamePanel.add(label, BorderLayout.WEST);
- filenamePanel.add(variableName, BorderLayout.CENTER);
- return filenamePanel;
+ JPanel panel = new JPanel(new GridBagLayout());
+ panel.setBorder(BorderFactory.createTitledBorder(JMeterUtils.getResString("resultsaver_save_format"))); //$NON-NLS-1$
+ GridBagConstraints gbc = new GridBagConstraints();
+ initConstraints(gbc);
+
+ addField(panel, variableName, gbc);
+ resetContraints(gbc);
+ addField(panel, filename, gbc);
+ resetContraints(gbc);
+ addField(panel, skipAutoNumber, gbc);
+ resetContraints(gbc);
+ addField(panel, skipSuffix, gbc);
+ resetContraints(gbc);
+ addField(panel, addTimestamp, gbc);
+ resetContraints(gbc);
+ addField(panel, numberPadLength, gbc);
+ resetContraints(gbc);
+
+ return panel;
}
+ private Component createSaveConditionsPanel() {
+ successOnly = new JCheckBox(JMeterUtils.getResString("resultsaver_success")); // $NON-NLS-1$
+ errorsOnly = new JCheckBox(JMeterUtils.getResString("resultsaver_errors")); // $NON-NLS-1$
+ ignoreTC = new JCheckBox(JMeterUtils.getResString("resultsaver_ignore_tc")); // $NON-NLS-1$
+
+ JPanel panel = new JPanel(new GridBagLayout());
+ panel.setBorder(BorderFactory.createTitledBorder(JMeterUtils.getResString("resultsaver_save_conditions"))); //$NON-NLS-1$
+ GridBagConstraints gbc = new GridBagConstraints();
+ initConstraints(gbc);
+
+ addField(panel, successOnly, gbc);
+ resetContraints(gbc);
+ addField(panel, errorsOnly, gbc);
+ resetContraints(gbc);
+ addField(panel, ignoreTC, gbc);
+ resetContraints(gbc);
+
+ return panel;
+ }
+
// Needed to avoid Class cast error in Clear.java
@Override
public void clearData() {
+ // NOOP
+ }
+
+ private void addField(JPanel panel, JCheckBox field, GridBagConstraints gbc) {
+ gbc.weightx = 2;
+ gbc.fill=GridBagConstraints.HORIZONTAL;
+ panel.add(field, gbc.clone());
+ }
+
+ private void addField(JPanel panel, JLabeledTextField field, GridBagConstraints gbc) {
+ List<JComponent> item = field.getComponentList();
+ panel.add(item.get(0), gbc.clone());
+ gbc.gridx++;
+ gbc.weightx = 1;
+ gbc.fill=GridBagConstraints.HORIZONTAL;
+ panel.add(item.get(1), gbc.clone());
+ }
+
+ // Next line
+ private void resetContraints(GridBagConstraints gbc) {
+ gbc.gridx = 0;
+ gbc.gridy++;
+ gbc.weightx = 0;
+ gbc.fill=GridBagConstraints.NONE;
+ }
+
+ private void initConstraints(GridBagConstraints gbc) {
+ gbc.anchor = GridBagConstraints.NORTHWEST;
+ gbc.fill = GridBagConstraints.NONE;
+ gbc.gridheight = 1;
+ gbc.gridwidth = 1;
+ gbc.gridx = 0;
+ gbc.gridy = 0;
+ gbc.weightx = 0;
+ gbc.weighty = 0;
}
}
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=1827348&r1=1827347&r2=1827348&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties Tue Mar 20 19:23:19 2018
@@ -939,13 +939,16 @@ restart=Restart
resultaction_title=Result Status Action Handler
resultsaver_addtimestamp=Add timestamp
resultsaver_errors=Save Failed Responses only
-resultsaver_numberpadlen=Minimum Length of sequence number
-resultsaver_prefix=Filename prefix\:
+resultsaver_ignore_tc=Don't save Transaction Controller SampleResult
+resultsaver_numberpadlen=Minimum Length of sequence number \:
+resultsaver_prefix=Filename prefix (can include folders) \:
+resultsaver_save_conditions=Save conditions
+resultsaver_save_format=Save details
resultsaver_skipautonumber=Don't add number to prefix
-resultsaver_skipsuffix=Don't add suffix
+resultsaver_skipsuffix=Don't add content type suffix
resultsaver_success=Save Successful Responses only
resultsaver_title=Save Responses to a file
-resultsaver_variable=Variable Name:
+resultsaver_variable=Variable Name containing saved file name \:
result_function=The result of the function is
retobj=Return object
return_code_config_box_title=Return Code Configuration
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=1827348&r1=1827347&r2=1827348&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 Tue Mar 20 19:23:19 2018
@@ -929,8 +929,11 @@ result_function=Le r\u00E9sultat de la f
resultaction_title=Op\u00E9rateur R\u00E9sultats Action
resultsaver_addtimestamp=Ajouter un timestamp
resultsaver_errors=Enregistrer seulement les r\u00E9ponses en \u00E9checs
+resultsaver_ignore_tc=Ne pas enregistrer l''\u00E9chantillon Transaction Controller
resultsaver_numberpadlen=Taille minimale du num\u00E9ro de s\u00E9quence
-resultsaver_prefix=Pr\u00E9fixe du nom de fichier \:
+resultsaver_prefix=Pr\u00E9fixe du nom de fichier \:
+resultsaver_save_conditions=Conditions d''enregistrement
+resultsaver_save_format=D\u00E9tails de l''enregistrement
resultsaver_skipautonumber=Ne pas ajouter de nombre au pr\u00E9fixe
resultsaver_skipsuffix=Ne pas ajouter de suffixe
resultsaver_success=Enregistrer seulement les r\u00E9ponses en succ\u00E8s
Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1827348&r1=1827347&r2=1827348&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
+++ jmeter/trunk/xdocs/changes.xml [utf-8] Tue Mar 20 19:23:19 2018
@@ -98,6 +98,7 @@ this behaviour, set <code>httpclient.res
<h3>Listeners</h3>
<ul>
+ <li><bug>62195</bug>Save Responses to a file : Improve component and UI. Contributed by Ubik Load Pack (support at ubikloadpack.com)</li>
</ul>
<h3>Timers, Assertions, Config, Pre- & Post-Processors</h3>
Modified: jmeter/trunk/xdocs/usermanual/component_reference.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1827348&r1=1827347&r2=1827348&view=diff
==============================================================================
--- jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jmeter/trunk/xdocs/usermanual/component_reference.xml Tue Mar 20 19:23:19 2018
@@ -3178,23 +3178,26 @@ i.e. 30.0 requests/minute is saved as <c
</description>
<properties>
<property name="Name" required="No">Descriptive name for this element that is shown in the tree.</property>
- <property name="Filename Prefix" required="Yes">Prefix for the generated file names; this can include a directory name.
+ <property name="Filename Prefix (can include folders)" required="Yes">Prefix for the generated file names; this can include a directory name.
Relative paths are resolved relative to the current working directory (which defaults to the <code>bin/</code> directory).
JMeter also supports paths relative to the directory containing the current test plan (JMX file).
If the path name begins with "<code>~/</code>" (or whatever is in the <code>jmeter.save.saveservice.base_prefix</code> JMeter property),
- then the path is assumed to be relative to the JMX file location.
+ then the path is assumed to be relative to the JMX file location. <br/>
+ If parent folders in prefix do not exists, JMeter will create them and stop test if it fails.
</property>
- <property name="Variable Name" required="No">
+ <property name="Variable Name containing saved file name" required="No">
Name of a variable in which to save the generated file name (so it can be used later in the test plan).
If there are sub-samples then a numeric suffix is added to the variable name.
E.g. if the variable name is <code>FILENAME</code>, then the parent sample file name is saved in the variable <code>FILENAME</code>,
and the filenames for the child samplers are saved in <code>FILENAME1</code>, <code>FILENAME2</code> etc.
</property>
+ <property name="Minimum Length of sequence number" required="No">If "<code>Don't add number to prefix</code>" is not checked, then numbers added to prefix will be padded by <code>0</code> so that prefix is has size of this value. Defaults to <code>0</code>.</property>
<property name="Save Failed Responses only" required="Yes">If selected, then only failed responses are saved</property>
<property name="Save Successful Responses only" required="Yes">If selected, then only successful responses are saved</property>
<property name="Don't add number to prefix" required="Yes">If selected, then no number is added to the prefix. If you select this option, make sure that the prefix is unique or the file may be overwritten.</property>
- <property name="Don't add suffix" required="Yes">If selected, then no suffix is added. If you select this option, make sure that the prefix is unique or the file may be overwritten.</property>
- <property name="Minimum Length of sequence number" required="No">If "<code>Don't add number to prefix</code>" is not checked, then numbers added to prefix will be padded by <code>0</code> so that prefix is has size of this value. Defaults to <code>0</code>.</property>
+ <property name="Don't add content type suffix" required="Yes">If selected, then no suffix is added. If you select this option, make sure that the prefix is unique or the file may be overwritten.</property>
+ <property name="Add timestamp" required="Yes">If selected, then date will be included in file suffix following format <code>yyyyMMdd-HHmm_</code></property>
+ <property name="Don't Save Transaction Controller SampleResult" required="Yes">If selected, then SamplerResult generated by Transaction Controller will be ignored</property>
</properties>
</component>