You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by mc...@apache.org on 2017/02/16 21:23:03 UTC

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/

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>



Re: 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/

Posted by Philippe Mouawad <ph...@gmail.com>.
Hi Maxime,
Can you run package-and-check ? This will tell you that there are tab
characters that make test fail.
Also can you close the related PR ?
We usually add in commit comments this to automatically close PR:

   - This closes PR #ID_OF_PR

Regards

Philippe

On Thu, Feb 16, 2017 at 10:23 PM, <mc...@apache.org> wrote:

> 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("su
> mmariser.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>
>
>
>


-- 
Cordialement.
Philippe Mouawad.