You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@jakarta.apache.org by se...@apache.org on 2010/12/17 17:55:16 UTC

svn commit: r1050447 - in /jakarta/jmeter/trunk: bin/ docs/images/screenshots/ src/core/org/apache/jmeter/engine/ src/core/org/apache/jmeter/resources/ src/core/org/apache/jmeter/threads/ src/core/org/apache/jmeter/threads/gui/ xdocs/ xdocs/images/scre...

Author: sebb
Date: Fri Dec 17 16:55:15 2010
New Revision: 1050447

URL: http://svn.apache.org/viewvc?rev=1050447&view=rev
Log:
Bug 50490 - Setup and Post Thread Group enhancements for better test flow.

Added:
    jakarta/jmeter/trunk/docs/images/screenshots/post_thread_group.png   (with props)
    jakarta/jmeter/trunk/docs/images/screenshots/setup_thread_group.png   (with props)
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/PostThreadGroup.java   (with props)
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/SetupThreadGroup.java   (with props)
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/gui/PostThreadGroupGui.java   (with props)
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/gui/SetupThreadGroupGui.java   (with props)
    jakarta/jmeter/trunk/xdocs/images/screenshots/post_thread_group.png   (with props)
    jakarta/jmeter/trunk/xdocs/images/screenshots/setup_thread_group.png   (with props)
Modified:
    jakarta/jmeter/trunk/bin/saveservice.properties
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
    jakarta/jmeter/trunk/xdocs/changes.xml
    jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml

Modified: jakarta/jmeter/trunk/bin/saveservice.properties
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/saveservice.properties?rev=1050447&r1=1050446&r2=1050447&view=diff
==============================================================================
--- jakarta/jmeter/trunk/bin/saveservice.properties (original)
+++ jakarta/jmeter/trunk/bin/saveservice.properties Fri Dec 17 16:55:15 2010
@@ -260,6 +260,10 @@ TestPlan=org.apache.jmeter.testelement.T
 TestPlanGui=org.apache.jmeter.control.gui.TestPlanGui
 ThreadGroup=org.apache.jmeter.threads.ThreadGroup
 ThreadGroupGui=org.apache.jmeter.threads.gui.ThreadGroupGui
+PostThreadGroup=org.apache.jmeter.threads.PostThreadGroup
+PostThreadGroupGui=org.apache.jmeter.threads.gui.PostThreadGroupGui
+SetupThreadGroup=org.apache.jmeter.threads.SetupThreadGroup
+SetupThreadGroupGui=org.apache.jmeter.threads.gui.SetupThreadGroupGui
 ThroughputController=org.apache.jmeter.control.ThroughputController
 ThroughputControllerGui=org.apache.jmeter.control.gui.ThroughputControllerGui
 TransactionController=org.apache.jmeter.control.TransactionController
@@ -336,4 +340,4 @@ _org.apache.jmeter.save.converters.TestR
 _org.apache.jmeter.save.ScriptWrapperConverter=mapping
 #
 #	Remember to update the _version entry
-#
\ No newline at end of file
+#

Added: jakarta/jmeter/trunk/docs/images/screenshots/post_thread_group.png
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/images/screenshots/post_thread_group.png?rev=1050447&view=auto
==============================================================================
Binary file - no diff available.

Propchange: jakarta/jmeter/trunk/docs/images/screenshots/post_thread_group.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: jakarta/jmeter/trunk/docs/images/screenshots/setup_thread_group.png
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/images/screenshots/setup_thread_group.png?rev=1050447&view=auto
==============================================================================
Binary file - no diff available.

Propchange: jakarta/jmeter/trunk/docs/images/screenshots/setup_thread_group.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java?rev=1050447&r1=1050446&r2=1050447&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java Fri Dec 17 16:55:15 2010
@@ -45,6 +45,8 @@ import org.apache.jmeter.threads.JMeterT
 import org.apache.jmeter.threads.ListenerNotifier;
 import org.apache.jmeter.threads.TestCompiler;
 import org.apache.jmeter.threads.AbstractThreadGroup;
+import org.apache.jmeter.threads.SetupThreadGroup;
+import org.apache.jmeter.threads.PostThreadGroup;
 import org.apache.jmeter.util.JMeterUtils;
 import org.apache.jorphan.collections.HashTree;
 import org.apache.jorphan.collections.ListedHashTree;
@@ -94,9 +96,6 @@ public class StandardJMeterEngine implem
     /** JMeterThread => its JVM thread */
     private final Map<JMeterThread, Thread> allThreads;
 
-    /** flag to show that groups are still being created, i.e test plan is not complete */
-    private volatile boolean startingGroups;
-
     /** Flag to show whether test is running. Set to false to stop creating more threads. */
     private volatile boolean running = false;
 
@@ -312,15 +311,6 @@ public class StandardJMeterEngine implem
     public synchronized void threadFinished(JMeterThread thread) {
         log.info("Ending thread " + thread.getThreadName());
         allThreads.remove(thread);
-        if (!startingGroups && allThreads.size() == 0 ) {// All threads have exitted
-            new Thread(){// Ensure that the current sampler thread can exit cleanly
-                @Override
-                public void run() {
-                    log.info("Stopping test");
-                    notifyTestListenersOfEnd(testListenersSave);
-                }
-            }.start();
-        }
     }
 
     public synchronized void stopTest() {
@@ -411,13 +401,49 @@ public class StandardJMeterEngine implem
 
         List<?> testLevelElements = new LinkedList<Object>(test.list(test.getArray()[0]));
         removeThreadGroups(testLevelElements);
+
+        SearchByClass<SetupThreadGroup> setupSearcher = new SearchByClass<SetupThreadGroup>(SetupThreadGroup.class);
         SearchByClass<AbstractThreadGroup> searcher = new SearchByClass<AbstractThreadGroup>(AbstractThreadGroup.class);
+        SearchByClass<PostThreadGroup> postSearcher = new SearchByClass<PostThreadGroup>(PostThreadGroup.class);
+
+        test.traverse(setupSearcher);
         test.traverse(searcher);
+        test.traverse(postSearcher);
+        
         TestCompiler.initialize();
         // for each thread group, generate threads
         // hand each thread the sampler controller
         // and the listeners, and the timer
+        Iterator<SetupThreadGroup> setupIter = setupSearcher.getSearchResults().iterator();
         Iterator<AbstractThreadGroup> iter = searcher.getSearchResults().iterator();
+        Iterator<PostThreadGroup> postIter = postSearcher.getSearchResults().iterator();
+
+        ListenerNotifier notifier = new ListenerNotifier();
+
+        int groupCount = 0;
+        JMeterContextService.clearTotalThreads();
+        
+        if (setupIter.hasNext()) {
+            log.info("Starting setup thread groups");
+            while (running && setupIter.hasNext()) {//for each setup thread group
+                AbstractThreadGroup group = setupIter.next();
+                groupCount++;
+                log.info("Starting Setup Thread: " + groupCount);
+                String groupName = startThreadGroup(group, groupCount, setupSearcher, testLevelElements, notifier);
+                if (serialized && setupIter.hasNext()) {
+                    log.info("Waiting for setup thread group: "+groupName+" to finish before starting next setup group");
+                    while (running && allThreads.size() > 0) {
+                        pause(1000);
+                    }
+                }
+            }    
+            log.info("Waiting for all setup thread groups To Exit");
+            //wait for all Setup Threads To Exit
+            waitThreadsStopped();
+            log.info("All Setup Threads have ended");
+            groupCount=0;
+            JMeterContextService.clearTotalThreads();
+        }
 
         /*
          * Here's where the test really starts. Run a Full GC now: it's no harm
@@ -426,15 +452,61 @@ public class StandardJMeterEngine implem
          */
         System.gc();
 
-        ListenerNotifier notifier = new ListenerNotifier();
-
         JMeterContextService.getContext().setSamplingStarted(true);
-        int groupCount = 0;
-        JMeterContextService.clearTotalThreads();
-        startingGroups = true;
         while (running && iter.hasNext()) {// for each thread group
-            groupCount++;
             AbstractThreadGroup group = iter.next();
+            //ignore Setup and Post here.  We could have filtered the searcher. but then
+            //future Thread Group objects wouldn't execute.
+            if (group instanceof SetupThreadGroup)
+                continue;
+            if (group instanceof PostThreadGroup)
+                continue;
+            groupCount++;
+            String groupName=startThreadGroup(group, groupCount, searcher, testLevelElements, notifier);
+            if (serialized && iter.hasNext()) {
+                log.info("Waiting for thread group: "+groupName+" to finish before starting next group");
+                while (running && allThreads.size() > 0) {
+                    pause(1000);
+                }
+            }
+        } // end of thread groups
+        if (groupCount == 0){ // No TGs found
+            log.info("No enabled thread groups found");
+        } else {
+            if (running) {
+                log.info("All threads have been started");
+            } else {
+                log.info("Test stopped - no more threads will be started");
+            }
+        }
+
+        //wait for all Test Threads To Exit
+        waitThreadsStopped();
+
+        if (postIter.hasNext()){
+            groupCount = 0;
+            JMeterContextService.clearTotalThreads();
+            log.info("Starting post thread groups");
+            while (running && postIter.hasNext()) {//for each setup thread group
+                AbstractThreadGroup group = postIter.next();
+                groupCount++;
+                log.info("Starting Post Thread: " + groupCount);
+                String groupName = startThreadGroup(group, groupCount, postSearcher, testLevelElements, notifier);
+                if (serialized && postIter.hasNext()) {
+                    log.info("Waiting for post thread group: "+groupName+" to finish before starting next post group");
+                    while (running && allThreads.size() > 0) {
+                        pause(1000);
+                    }
+                }
+            }
+            waitThreadsStopped(); // wait for Post threads to stop
+        }
+
+        notifyTestListenersOfEnd(testListenersSave);
+    }
+
+    private String startThreadGroup(AbstractThreadGroup group, int groupCount, SearchByClass<?> searcher, List<?> testLevelElements, ListenerNotifier notifier)
+    {
             int numThreads = group.getNumThreads();
             JMeterContextService.addTotalThreads(numThreads);
             boolean onErrorStopTest = group.getOnErrorStopTest();
@@ -477,24 +549,7 @@ public class StandardJMeterEngine implem
                 allThreads.put(jmeterThread, newThread);
                 newThread.start();
             } // end of thread startup for this thread group
-            if (serialized && iter.hasNext()) {
-                log.info("Waiting for thread group: "+groupName+" to finish before starting next group");
-                while (running && allThreads.size() > 0) {
-                    pause(1000);
-                }
-            }
-        } // end of thread groups
-        startingGroups = false;
-        if (groupCount == 0){ // No TGs found
-            log.info("No enabled thread groups found");
-            notifyTestListenersOfEnd(testListenersSave);
-        } else {
-            if (running) {
-                log.info("All threads have been started");
-            } else {
-                log.info("Test stopped - no more threads will be started");
-            }
-        }
+            return groupName;
     }
 
     private boolean verifyThreadsStopped() {
@@ -517,6 +572,20 @@ public class StandardJMeterEngine implem
         return stoppedAll;
     }
 
+    private void waitThreadsStopped() {
+        // ConcurrentHashMap does not need synch. here
+        for (Thread t : allThreads.values()) {
+            if (t != null) {
+                while (t.isAlive()) {
+                    try {
+                        t.join(WAIT_TO_DIE);
+                    } catch (InterruptedException e) {
+                    }
+                }
+            }
+        }
+    }
+
     private void tellThreadsToStop() {
         // ConcurrentHashMap does not need protecting
         for (Entry<JMeterThread, Thread> entry : allThreads.entrySet()) {

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=1050447&r1=1050446&r2=1050447&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 Dec 17 16:55:15 2010
@@ -562,6 +562,7 @@ patterns_to_include=URL Patterns to Incl
 pkcs12_desc=PKCS 12 Key (*.p12)
 pl=Polish
 port=Port\:
+post_thread_group_title=Post Thread Group
 property_as_field_label={0}\:
 property_default_param=Default value
 property_edit=Edit
@@ -760,6 +761,7 @@ send_file_param_name_label=Parameter Nam
 server=Server Name or IP\:
 servername=Servername \:
 session_argument_name=Session Argument Name
+setup_thread_group_title=Setup Thread Group
 should_save=You should save your test plan before running it.  \nIf you are using supporting data files (ie, for CSV Data Set or _StringFromFile), \nthen it is particularly important to first save your test script. \nDo you want to save your test plan first?
 shutdown=Shutdown
 simple_config_element=Simple Config Element

Added: jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/PostThreadGroup.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/PostThreadGroup.java?rev=1050447&view=auto
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/PostThreadGroup.java (added)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/PostThreadGroup.java Fri Dec 17 16:55:15 2010
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.jmeter.threads;
+
+
+/**
+ * PostThreadGroup is a special type of ThreadGroup that can be used for
+ * performing actions at the end of a test for cleanup and such.
+ */
+public class PostThreadGroup extends ThreadGroup {
+    private static final long serialVersionUID = 240L;
+}

Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/PostThreadGroup.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/PostThreadGroup.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/SetupThreadGroup.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/SetupThreadGroup.java?rev=1050447&view=auto
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/SetupThreadGroup.java (added)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/SetupThreadGroup.java Fri Dec 17 16:55:15 2010
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.jmeter.threads;
+
+
+/**
+ * SetupThreadGroup.java is a special type of ThreadGroup that can be used for
+ * setting up of a test before the bulk of the test executes later.
+ * 
+ */
+public class SetupThreadGroup extends ThreadGroup {
+    private static final long serialVersionUID = 240L;
+
+    public SetupThreadGroup() {
+        super();
+    }
+}

Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/SetupThreadGroup.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/SetupThreadGroup.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/gui/PostThreadGroupGui.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/gui/PostThreadGroupGui.java?rev=1050447&view=auto
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/gui/PostThreadGroupGui.java (added)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/gui/PostThreadGroupGui.java Fri Dec 17 16:55:15 2010
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.jmeter.threads.gui;
+
+import java.awt.event.ItemListener;
+
+import org.apache.jmeter.testelement.TestElement;
+import org.apache.jmeter.threads.PostThreadGroup;
+
+public class PostThreadGroupGui extends ThreadGroupGui implements ItemListener {
+    private static final long serialVersionUID = 240L;
+
+    @Override
+    public String getLabelResource() {
+        return "post_thread_group_title"; // $NON-NLS-1$
+
+    }
+
+    @Override
+    public TestElement createTestElement() {
+        PostThreadGroup tg = new PostThreadGroup();
+        modifyTestElement(tg);
+        return tg;
+    }
+}

Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/gui/PostThreadGroupGui.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/gui/PostThreadGroupGui.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/gui/SetupThreadGroupGui.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/gui/SetupThreadGroupGui.java?rev=1050447&view=auto
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/gui/SetupThreadGroupGui.java (added)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/gui/SetupThreadGroupGui.java Fri Dec 17 16:55:15 2010
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.jmeter.threads.gui;
+
+import java.awt.event.ItemListener;
+
+import org.apache.jmeter.testelement.TestElement;
+import org.apache.jmeter.threads.SetupThreadGroup;
+
+public class SetupThreadGroupGui extends ThreadGroupGui implements ItemListener {
+    private static final long serialVersionUID = 240L;
+
+    @Override
+    public String getLabelResource() {
+        return "setup_thread_group_title"; // $NON-NLS-1$
+
+    }
+
+    @Override
+    public TestElement createTestElement() {
+        SetupThreadGroup tg = new SetupThreadGroup();
+        modifyTestElement(tg);
+        return tg;
+    }
+}

Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/gui/SetupThreadGroupGui.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/jmeter/trunk/src/core/org/apache/jmeter/threads/gui/SetupThreadGroupGui.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1050447&r1=1050446&r2=1050447&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Fri Dec 17 16:55:15 2010
@@ -180,13 +180,14 @@ Also enable reversion to using System.cu
 <ul>
 <li>Bug 30563 - Thread Group should have a start next loop option on Sample Error</li>
 <li>Bug 50347 - Eclipse setup instructions should remind user to download dependent jars</li>
-<li>Bug 50487 - runSerialTest verifies objects that never need persisting</li>
+<li>Bug 50490 - Setup and Post Thread Group enhancements for better test flow.</li>
 </ul>
 
 <h2>Non-functional changes</h2>
 <ul>
 <li>Bug 50008 - Allow BatchSampleSender to be subclassed</li>
 <li>Bug 50450 - use System.array copy in jacobi solver as, being native, is more performant.</li>
+<li>Bug 50487 - runSerialTest verifies objects that never need persisting</li>
 </ul>
 
 </section> 

Added: jakarta/jmeter/trunk/xdocs/images/screenshots/post_thread_group.png
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/post_thread_group.png?rev=1050447&view=auto
==============================================================================
Binary file - no diff available.

Propchange: jakarta/jmeter/trunk/xdocs/images/screenshots/post_thread_group.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: jakarta/jmeter/trunk/xdocs/images/screenshots/setup_thread_group.png
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/setup_thread_group.png?rev=1050447&view=auto
==============================================================================
Binary file - no diff available.

Propchange: jakarta/jmeter/trunk/xdocs/images/screenshots/setup_thread_group.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1050447&r1=1050446&r2=1050447&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Fri Dec 17 16:55:15 2010
@@ -4652,6 +4652,9 @@ In jmeter.properties, edit "user.classpa
 <description>
 <p>A Thread Group defines a pool of users that will execute a particular test case against your server.  In the Thread Group GUI, you can control the number of users simulated (num of threads), the ramp up time (how long it takes to start all the threads), the number of times to perform the test, and optionally, a start and stop time for the test.</p>
 <p>
+See also <complink name="Post Thread Group"/> and <complink name="Setup Thread Group"/>.
+</p>
+<p>
 When using the scheduler, JMeter runs the thread group until either the number of loops is reached or the duration/end-time is reached - whichever occurs first.
 Note that the condition is only checked between samples; when the end condition is reached, that thread will stop.
 JMeter does not interrupt samplers which are waiting for a response, so the end time may be delayed arbitrarily.
@@ -5065,6 +5068,26 @@ The Test Fragment is used in conjunction
 </properties>
 </component>
 
+<component name="Setup Thread Group" index="&sect-num;.9.10" width="598" height="300" screenshot="setup_thread_group.png">
+<description>
+    <p>
+    A special type of ThreadGroup that can be utilized to perform Pre-Test Actions.  The behavior of these threads
+    is exactly like a normal <complink name="Thread Group"/> element.  The difference is that these type of threads are batched 
+    together and execute before the test proceeds to the executing of regular Thread Groups.
+    </p>
+</description>
+</component>
+
+<component name="Post Thread Group" index="&sect-num;.9.11" width="595" height="303" screenshot="post_thread_group.png">
+<description>
+    <p>
+    A special type of ThreadGroup that can be utilized to perform Post-Test Actions.  The behavior of these threads
+    is exactly like a normal <complink name="Thread Group"/> element.  The difference is that these type of threads are batched 
+    together and execute after the test has finished executing its regular Thread Groups.
+    </p>
+</description>
+</component>
+
 <a href="#">^</a>
 
 </section>



---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@jakarta.apache.org
For additional commands, e-mail: notifications-help@jakarta.apache.org