jmeter-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mchassagn...@apache.org
Subject svn commit: r1783297 - in /jmeter/trunk: src/core/org/apache/jmeter/ src/core/org/apache/jmeter/gui/action/ src/core/org/apache/jmeter/resources/ xdocs/
Date Thu, 16 Feb 2017 21:23:03 GMT
Author: mchassagneux
Date: Thu Feb 16 21:23:03 2017
New Revision: 1783297

URL: http://svn.apache.org/viewvc?rev=1783297&view=rev
Log:
Checks for listener output file existence
Bugzilla Id: 58164

Modified:
    jmeter/trunk/src/core/org/apache/jmeter/JMeter.java
    jmeter/trunk/src/core/org/apache/jmeter/gui/action/AbstractAction.java
    jmeter/trunk/src/core/org/apache/jmeter/gui/action/RemoteStart.java
    jmeter/trunk/src/core/org/apache/jmeter/gui/action/Start.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

Modified: jmeter/trunk/src/core/org/apache/jmeter/JMeter.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/JMeter.java?rev=1783297&r1=1783296&r2=1783297&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/JMeter.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/JMeter.java Thu Feb 16 21:23:03 2017
@@ -35,6 +35,7 @@ import java.text.SimpleDateFormat;
 import java.util.Collection;
 import java.util.Date;
 import java.util.Enumeration;
+import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
@@ -151,6 +152,7 @@ public class JMeter implements JMeterPlu
     private static final int REPORT_GENERATING_OPT  = 'g';// $NON-NLS-1$
     private static final int REPORT_AT_END_OPT      = 'e';// $NON-NLS-1$
     private static final int REPORT_OUTPUT_FOLDER_OPT      = 'o';// $NON-NLS-1$
+    private static final int FORCE_DELETE_RESULT_FILE      = 'f';// $NON-NLS-1$
     
     private static final int SYSTEM_PROPERTY    = 'D';// $NON-NLS-1$
     private static final int JMETER_GLOBAL_PROP = 'G';// $NON-NLS-1$
@@ -271,7 +273,11 @@ public class JMeter implements JMeterPlu
     private static final CLOptionDescriptor D_REPORT_OUTPUT_FOLDER_OPT =
             new CLOptionDescriptor("reportoutputfolder",
                     CLOptionDescriptor.ARGUMENT_REQUIRED, REPORT_OUTPUT_FOLDER_OPT,
-                    "output folder for report dashboard");
+            		"output folder for report dashboard");
+     private static final CLOptionDescriptor D_FORCE_DELETE_RESULT_FILE =
+            new CLOptionDescriptor("forceDeleteResultFile",
+                    CLOptionDescriptor.ARGUMENT_DISALLOWED, FORCE_DELETE_RESULT_FILE,
+                    "force delete existing results files before start the test");
 
     private static final String[][] DEFAULT_ICONS = {
             { "org.apache.jmeter.control.gui.TestPlanGui",               "org/apache/jmeter/images/beaker.gif"
},     //$NON-NLS-1$ $NON-NLS-2$
@@ -308,6 +314,7 @@ public class JMeter implements JMeterPlu
             D_JMETER_GLOBAL_PROP,
             D_SYSTEM_PROPERTY,
             D_SYSTEM_PROPFILE,
+            D_FORCE_DELETE_RESULT_FILE,
             D_LOGLEVEL,
             D_REMOTE_OPT,
             D_REMOTE_OPT_PARAM,
@@ -324,6 +331,9 @@ public class JMeter implements JMeterPlu
     /** should remote engines be stopped at end of non-GUI test? */
     private boolean remoteStop; 
 
+    /** should delete result file before start ? */
+    private boolean deleteResultFile = false; 
+    
     public JMeter() {
         super();
     }
@@ -843,6 +853,9 @@ public class JMeter implements JMeterPlu
             case REMOTE_STOP:
                 remoteStop = true;
                 break;
+            case FORCE_DELETE_RESULT_FILE:
+            	deleteResultFile = true;
+            	break;
             default:
                 // ignored
                 break;
@@ -878,6 +891,8 @@ public class JMeter implements JMeterPlu
         JMeter driver = new JMeter();// TODO - why does it create a new instance?
         driver.remoteProps = this.remoteProps;
         driver.remoteStop = this.remoteStop;
+        driver.deleteResultFile = this.deleteResultFile;
+        
         PluginManager.install(this, false);
 
         String remoteHostsString = null;
@@ -924,6 +939,19 @@ public class JMeter implements JMeterPlu
             // Remove the disabled items
             // For GUI runs this is done in Start.java
             convertSubTree(tree);
+            
+            if (deleteResultFile) {
+            	SearchByClass<ResultCollector> resultListeners = new SearchByClass<>(ResultCollector.class);
+            	tree.traverse(resultListeners);
+            	Iterator<ResultCollector> irc = resultListeners.getSearchResults().iterator();
+            	while (irc.hasNext()) {
+	            	ResultCollector rc = irc.next();
+	            	File resultFile = new File(rc.getFilename());
+	            	if (resultFile.exists()) {
+	            		resultFile.delete();
+	            	}
+            	}
+            }
 
             Summariser summer = null;
             String summariserName = JMeterUtils.getPropDefault("summariser.name", "");//$NON-NLS-1$

Modified: jmeter/trunk/src/core/org/apache/jmeter/gui/action/AbstractAction.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/gui/action/AbstractAction.java?rev=1783297&r1=1783296&r2=1783297&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/gui/action/AbstractAction.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/gui/action/AbstractAction.java Thu Feb 16 21:23:03
2017
@@ -19,13 +19,19 @@
 package org.apache.jmeter.gui.action;
 
 import java.awt.event.ActionEvent;
+import java.io.File;
+import java.text.MessageFormat;
+import java.util.Iterator;
 import java.util.Set;
 
 import javax.swing.JOptionPane;
 
 import org.apache.jmeter.exceptions.IllegalUserActionException;
 import org.apache.jmeter.gui.GuiPackage;
+import org.apache.jmeter.reporters.ResultCollector;
 import org.apache.jmeter.util.JMeterUtils;
+import org.apache.jorphan.collections.HashTree;
+import org.apache.jorphan.collections.SearchByClass;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -60,4 +66,43 @@ public abstract class AbstractAction imp
             }
         }
     }
+    
+    /**
+     * @param tree where check if listener has existing file
+     */
+    protected boolean popupCheckExistingFileListener(HashTree tree) {
+
+        SearchByClass<ResultCollector> resultListeners = new SearchByClass<>(ResultCollector.class);
+        tree.traverse(resultListeners);
+        Iterator<ResultCollector> irc = resultListeners.getSearchResults().iterator();
+        while (irc.hasNext()) {
+            ResultCollector rc = irc.next();
+            File f = new File(rc.getFilename());
+            if (f.exists()) {
+                String[] option = new String[] { JMeterUtils.getResString("concat_result"),
+                        JMeterUtils.getResString("dont_start"), JMeterUtils.getResString("replace_file")
};
+                String question = MessageFormat.format(JMeterUtils.getResString("ask_existing_file")
// $NON-NLS-1$
+                        , rc.getFilename());
+                int response = JOptionPane.YES_OPTION;
+
+                // Interactive question
+                response = JOptionPane.showOptionDialog(null, question, JMeterUtils.getResString("warning"),
+                        JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE, null,
option, option[0]);
+
+                switch (response) {
+                case JOptionPane.NO_OPTION:
+                    // Exit without start the test
+                    return false;
+                case JOptionPane.CANCEL_OPTION:
+                    // replace_file so delete the existing one
+                    f.delete();
+                    break;
+                case JOptionPane.YES_OPTION:
+                    // append is the default behaviour, so nothing to do
+                    break;
+                }
+            }
+        }
+        return true;
+    }
 }

Modified: jmeter/trunk/src/core/org/apache/jmeter/gui/action/RemoteStart.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/gui/action/RemoteStart.java?rev=1783297&r1=1783296&r2=1783297&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/gui/action/RemoteStart.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/gui/action/RemoteStart.java Thu Feb 16 21:23:03
2017
@@ -74,12 +74,18 @@ public class RemoteStart extends Abstrac
             distributedRunner.shutdown(Arrays.asList(name));
         } else if (action.equals(ActionNames.REMOTE_START)) {
             popupShouldSave(e);
-            distributedRunner.init(Arrays.asList(name), getTestTree());
-            distributedRunner.start(Arrays.asList(name));
+            HashTree testTree = getTestTree();
+            if ( popupCheckExistingFileListener(testTree) ) {
+            	distributedRunner.init(Arrays.asList(name), testTree);
+            	distributedRunner.start(Arrays.asList(name));
+            }
         } else if (action.equals(ActionNames.REMOTE_START_ALL)) {
             popupShouldSave(e);
-            distributedRunner.init(getRemoteHosts(), getTestTree());
-            distributedRunner.start();
+            HashTree testTree = getTestTree();
+            if ( popupCheckExistingFileListener(testTree) ) {
+            	distributedRunner.init(getRemoteHosts(), testTree);
+            	distributedRunner.start();
+            }
         } else if (action.equals(ActionNames.REMOTE_STOP_ALL)) {
             distributedRunner.stop(getRemoteHosts());
         } else if (action.equals(ActionNames.REMOTE_SHUT_ALL)) {

Modified: jmeter/trunk/src/core/org/apache/jmeter/gui/action/Start.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/gui/action/Start.java?rev=1783297&r1=1783296&r2=1783297&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/gui/action/Start.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/gui/action/Start.java Thu Feb 16 21:23:03 2017
@@ -205,17 +205,19 @@ public class Start extends AbstractActio
             TreeCloner cloner = cloneTree(testTree, ignoreTimer);      
             clonedTree = cloner.getClonedTree();
         }
-        engine = new StandardJMeterEngine();
-        engine.configure(clonedTree);
-        try {
-            engine.runTest();
-        } catch (JMeterEngineException e) {
-            JOptionPane.showMessageDialog(gui.getMainFrame(), e.getMessage(), 
-                    JMeterUtils.getResString("error_occurred"), JOptionPane.ERROR_MESSAGE);
//$NON-NLS-1$
-        }
-        if (log.isDebugEnabled()) {
-            log.debug("test plan after cloning and running test is running version: {}",
-                    ((TestPlan) testTree.getArray()[0]).isRunningVersion());
+        if ( popupCheckExistingFileListener(testTree) ) {
+	        engine = new StandardJMeterEngine();
+	        engine.configure(clonedTree);
+	        try {
+	            engine.runTest();
+	        } catch (JMeterEngineException e) {
+	            JOptionPane.showMessageDialog(gui.getMainFrame(), e.getMessage(), 
+	                    JMeterUtils.getResString("error_occurred"), JOptionPane.ERROR_MESSAGE);
//$NON-NLS-1$
+	        }
+	        if (log.isDebugEnabled()) {
+	            log.debug("test plan after cloning and running test is running version: {}",
+	                    ((TestPlan) testTree.getArray()[0]).isRunningVersion());
+	        }
         }
     }
 

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=1783297&r1=1783296&r2=1783297&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties Thu Feb 16 21:23:03
2017
@@ -104,6 +104,7 @@ appearance=Look and Feel
 apply_naming=Apply Naming Policy
 argument_must_not_be_negative=The Argument must not be negative\!
 arguments_panel_title=Command parameters
+ask_existing_file=The file {0} already exist, what you want to do?
 assertion_assume_success=Ignore Status
 assertion_body_resp=Response Body
 assertion_code_resp=Response Code
@@ -197,6 +198,7 @@ comparison_regex_substitution=Substituti
 comparison_response_time=Response Time: 
 comparison_unit=\ ms
 comparison_visualizer_title=Comparison Assertion Visualizer
+concat_result=Append result to the existing files
 config_element=Config Element
 config_save_settings=Configure
 confirm=Confirm
@@ -266,6 +268,7 @@ dns_hosts=Static Hosttable
 dns_servers=DNS Servers
 domain=Domain
 done=Done
+dont_start=Don't start
 down=Down
 duplicate=Duplicate
 duration=Duration (seconds)
@@ -819,6 +822,7 @@ remove=Remove
 remove_confirm_msg=Are you sure you want remove the selected element(s)?
 remove_confirm_title=Confirm remove?
 rename=Rename entry
+replace_file=Replace existing file
 report=Report
 report_bar_chart=Bar Chart
 report_bar_graph_url=URL

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=1783297&r1=1783296&r2=1783297&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 Thu Feb 16 21:23:03
2017
@@ -99,6 +99,7 @@ appearance=Apparence
 apply_naming=Appliquer Convention Nommage
 argument_must_not_be_negative=L'argument ne peut pas \u00EAtre n\u00E9gatif \!
 arguments_panel_title=Param\u00E8tres de commande
+ask_existing_file=Le fichier {0} existe d\u00E9j\u00e0, que voulez-vous faire?
 assertion_assume_success=Ignorer le statut
 assertion_body_resp=Corps de r\u00E9ponse
 assertion_code_resp=Code de r\u00E9ponse
@@ -192,6 +193,7 @@ comparison_regex_substitution=Substituti
 comparison_response_time=Temps de r\u00E9ponse \: 
 comparison_unit=ms
 comparison_visualizer_title=R\u00E9cepteur d'assertions de comparaison
+concat_result=Ajouter les r\u00E9sultats au fichier existant
 config_element=El\u00E9ment de configuration
 config_save_settings=Configurer
 confirm=Confirmer
@@ -261,6 +263,7 @@ dns_hosts=Table d''h\u00F4te statique
 dns_servers=Serveurs DNS
 domain=Domaine \:
 done=Fait
+dont_start=Ne pas ex\u00E9cuter le test
 down=Descendre
 duplicate=Dupliquer
 duration=Dur\u00E9e (secondes) \:
@@ -809,6 +812,7 @@ remove=Supprimer
 remove_confirm_msg=Etes-vous s\u00FBr de vouloir supprimer ce(s) \u00E9l\u00E9ment(s) ?
 remove_confirm_title=Confirmer la suppression ?
 rename=Renommer une entr\u00E9e
+replace_file=Remplacer le fichier existant	
 report=Rapport
 report_bar_chart=Graphique \u221A\u2020 barres
 report_bar_graph_url=URL

Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1783297&r1=1783296&r2=1783297&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
+++ jmeter/trunk/xdocs/changes.xml [utf-8] Thu Feb 16 21:23:03 2017
@@ -188,6 +188,7 @@ JMeter now requires Java 8. Ensure you u
 
 <h3>General</h3>
 <ul>
+	<li><bug>58164</bug>Check if output file exist on all listener before
start the loadtest</li>	
     <li><bug>54525</bug>Search Feature : Enhance it with ability to replace</li>
     <li><bug>60530</bug>Add API to create JMeter threads while test is
running. Based on a contribution by Logan Mauzaize (logan.mauzaize at gmail.com) and Maxime
Chassagneux (maxime.chassagneux at gmail.com).</li>
     <li><bug>60514</bug>Ability to apply a naming convention on Children
of a Transaction Controller. Contributed by Ubik Load Pack (support at ubikloadpack.com)</li>



Mime
View raw message