Author: sebb Date: Wed Sep 19 15:43:19 2007 New Revision: 577462 URL: http://svn.apache.org/viewvc?rev=577462&view=rev Log: Bug 43364 - add option to enable previous If Controller behaviour (copied from rel-2.2)
Modified: jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.csv jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.jmx jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/IfController.java jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/gui/IfControllerPanel.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/testfiles/BatchTestLocal.csv URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.csv?rev=577462&r1=577461&r2=577462&view=diff ============================================================================== --- jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.csv (original) +++ jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.csv Wed Sep 19 15:43:19 2007 @@ -9,3 +9,11 @@ Module,200,OK,Thread Group 1-1,,true,,0,1,1,null, Loop,200,OK,Thread Group 1-1,,true,,0,1,1,null, Module,200,OK,Thread Group 1-1,,true,,0,1,1,null, +Java If once 1,,,Thread Group 1-1,,false,,0,1,1,null, +Java If once 2,200,OK,Thread Group 1-1,,true,,0,1,1,null, +Java If all 1,,,Thread Group 1-1,,false,,0,1,1,null, +Java OK,200,OK,Thread Group 1-1,,true,,0,1,1,null, +Java If once 1,,,Thread Group 1-1,,false,,0,1,1,null, +Java If once 2,200,OK,Thread Group 1-1,,true,,0,1,1,null, +Java If all 1,,,Thread Group 1-1,,false,,0,1,1,null, +Java OK,200,OK,Thread Group 1-1,,true,,0,1,1,null, Modified: jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.jmx URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.jmx?rev=577462&r1=577461&r2=577462&view=diff ============================================================================== --- jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.jmx (original) +++ jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.jmx Wed Sep 19 15:43:19 2007 @@ -87,6 +87,7 @@ <hashTree> <IfController guiclass="IfControllerPanel" testclass="IfController" testname="If Controller" enabled="true"> <stringProp name="IfController.condition">${__StringFromFile(testfiles/BatchTestLocal.txt)} > 2</stringProp> + <stringProp name="IfController.evaluateAll">false</stringProp> </IfController> <hashTree> <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="If Test" enabled="true"> @@ -303,6 +304,264 @@ <stringProp name="filename"></stringProp> </ResultCollector> <hashTree/> + <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> + <boolProp name="LoopController.continue_forever">true</boolProp> + <stringProp name="LoopController.loops">2</stringProp> + </LoopController> + <hashTree> + <IfController guiclass="IfControllerPanel" testclass="IfController" testname="If once" enabled="true"> + <stringProp name="IfController.condition">${JMeterThread.last_sample_ok}</stringProp> + <stringProp name="IfController.evaluateAll">false</stringProp> + </IfController> + <hashTree> + <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java If once 1" enabled="true"> + <elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true"> + <collectionProp name="Arguments.arguments"> + <elementProp name="Sleep_Time" elementType="Argument"> + <stringProp name="Argument.name">Sleep_Time</stringProp> + <stringProp name="Argument.value">100</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Sleep_Mask" elementType="Argument"> + <stringProp name="Argument.name">Sleep_Mask</stringProp> + <stringProp name="Argument.value">0xFF</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Label" elementType="Argument"> + <stringProp name="Argument.name">Label</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResponseCode" elementType="Argument"> + <stringProp name="Argument.name">ResponseCode</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResponseMessage" elementType="Argument"> + <stringProp name="Argument.name">ResponseMessage</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Status" elementType="Argument"> + <stringProp name="Argument.name">Status</stringProp> + <stringProp name="Argument.value">BAD</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="SamplerData" elementType="Argument"> + <stringProp name="Argument.name">SamplerData</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResultData" elementType="Argument"> + <stringProp name="Argument.name">ResultData</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp> + </JavaSampler> + <hashTree/> + <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java If once 2" enabled="true"> + <elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true"> + <collectionProp name="Arguments.arguments"> + <elementProp name="Sleep_Time" elementType="Argument"> + <stringProp name="Argument.name">Sleep_Time</stringProp> + <stringProp name="Argument.value">100</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Sleep_Mask" elementType="Argument"> + <stringProp name="Argument.name">Sleep_Mask</stringProp> + <stringProp name="Argument.value">0xFF</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Label" elementType="Argument"> + <stringProp name="Argument.name">Label</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResponseCode" elementType="Argument"> + <stringProp name="Argument.name">ResponseCode</stringProp> + <stringProp name="Argument.value">200</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResponseMessage" elementType="Argument"> + <stringProp name="Argument.name">ResponseMessage</stringProp> + <stringProp name="Argument.value">OK</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Status" elementType="Argument"> + <stringProp name="Argument.name">Status</stringProp> + <stringProp name="Argument.value">OK</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="SamplerData" elementType="Argument"> + <stringProp name="Argument.name">SamplerData</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResultData" elementType="Argument"> + <stringProp name="Argument.name">ResultData</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp> + </JavaSampler> + <hashTree/> + </hashTree> + <IfController guiclass="IfControllerPanel" testclass="IfController" testname="If all" enabled="true"> + <stringProp name="IfController.condition">${JMeterThread.last_sample_ok}</stringProp> + <stringProp name="IfController.evaluateAll">true</stringProp> + </IfController> + <hashTree> + <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java If all 1" enabled="true"> + <elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true"> + <collectionProp name="Arguments.arguments"> + <elementProp name="Sleep_Time" elementType="Argument"> + <stringProp name="Argument.name">Sleep_Time</stringProp> + <stringProp name="Argument.value">100</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Sleep_Mask" elementType="Argument"> + <stringProp name="Argument.name">Sleep_Mask</stringProp> + <stringProp name="Argument.value">0xFF</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Label" elementType="Argument"> + <stringProp name="Argument.name">Label</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResponseCode" elementType="Argument"> + <stringProp name="Argument.name">ResponseCode</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResponseMessage" elementType="Argument"> + <stringProp name="Argument.name">ResponseMessage</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Status" elementType="Argument"> + <stringProp name="Argument.name">Status</stringProp> + <stringProp name="Argument.value">BAD</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="SamplerData" elementType="Argument"> + <stringProp name="Argument.name">SamplerData</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResultData" elementType="Argument"> + <stringProp name="Argument.name">ResultData</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp> + </JavaSampler> + <hashTree/> + <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java If all 2" enabled="true"> + <elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true"> + <collectionProp name="Arguments.arguments"> + <elementProp name="Sleep_Time" elementType="Argument"> + <stringProp name="Argument.name">Sleep_Time</stringProp> + <stringProp name="Argument.value">100</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Sleep_Mask" elementType="Argument"> + <stringProp name="Argument.name">Sleep_Mask</stringProp> + <stringProp name="Argument.value">0xFF</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Label" elementType="Argument"> + <stringProp name="Argument.name">Label</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResponseCode" elementType="Argument"> + <stringProp name="Argument.name">ResponseCode</stringProp> + <stringProp name="Argument.value">200</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResponseMessage" elementType="Argument"> + <stringProp name="Argument.name">ResponseMessage</stringProp> + <stringProp name="Argument.value">OK</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Status" elementType="Argument"> + <stringProp name="Argument.name">Status</stringProp> + <stringProp name="Argument.value">OK</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="SamplerData" elementType="Argument"> + <stringProp name="Argument.name">SamplerData</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResultData" elementType="Argument"> + <stringProp name="Argument.name">ResultData</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp> + </JavaSampler> + <hashTree/> + </hashTree> + <JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java OK" enabled="true"> + <elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true"> + <collectionProp name="Arguments.arguments"> + <elementProp name="Sleep_Time" elementType="Argument"> + <stringProp name="Argument.name">Sleep_Time</stringProp> + <stringProp name="Argument.value">100</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Sleep_Mask" elementType="Argument"> + <stringProp name="Argument.name">Sleep_Mask</stringProp> + <stringProp name="Argument.value">0xFF</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Label" elementType="Argument"> + <stringProp name="Argument.name">Label</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResponseCode" elementType="Argument"> + <stringProp name="Argument.name">ResponseCode</stringProp> + <stringProp name="Argument.value">200</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResponseMessage" elementType="Argument"> + <stringProp name="Argument.name">ResponseMessage</stringProp> + <stringProp name="Argument.value">OK</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="Status" elementType="Argument"> + <stringProp name="Argument.name">Status</stringProp> + <stringProp name="Argument.value">OK</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="SamplerData" elementType="Argument"> + <stringProp name="Argument.name">SamplerData</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + <elementProp name="ResultData" elementType="Argument"> + <stringProp name="Argument.name">ResultData</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp> + </JavaSampler> + <hashTree/> + </hashTree> <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Simple Controller" enabled="false"> <stringProp name="TestPlan.comments"> for Module Controller</stringProp> </GenericController> Modified: jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml?rev=577462&r1=577461&r2=577462&view=diff ============================================================================== --- jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml (original) +++ jakarta/jmeter/trunk/bin/testfiles/BatchTestLocal.xml Wed Sep 19 15:43:19 2007 @@ -73,5 +73,61 @@ <responseFile class="java.lang.String"></responseFile> <null/> </sample> +<sample lt="0" s="false" lb="Java If once 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" ng="1" na="1"> + <responseHeader class="java.lang.String"></responseHeader> + <requestHeader class="java.lang.String"></requestHeader> + <responseData class="java.lang.String"/> + <responseFile class="java.lang.String"></responseFile> + <null/> +</sample> +<sample lt="0" s="true" lb="Java If once 2" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" ng="1" na="1"> + <responseHeader class="java.lang.String"></responseHeader> + <requestHeader class="java.lang.String"></requestHeader> + <responseData class="java.lang.String"/> + <responseFile class="java.lang.String"></responseFile> + <null/> +</sample> +<sample lt="0" s="false" lb="Java If all 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" ng="1" na="1"> + <responseHeader class="java.lang.String"></responseHeader> + <requestHeader class="java.lang.String"></requestHeader> + <responseData class="java.lang.String"/> + <responseFile class="java.lang.String"></responseFile> + <null/> +</sample> +<sample lt="0" s="true" lb="Java OK" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" ng="1" na="1"> + <responseHeader class="java.lang.String"></responseHeader> + <requestHeader class="java.lang.String"></requestHeader> + <responseData class="java.lang.String"/> + <responseFile class="java.lang.String"></responseFile> + <null/> +</sample> +<sample lt="0" s="false" lb="Java If once 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" ng="1" na="1"> + <responseHeader class="java.lang.String"></responseHeader> + <requestHeader class="java.lang.String"></requestHeader> + <responseData class="java.lang.String"/> + <responseFile class="java.lang.String"></responseFile> + <null/> +</sample> +<sample lt="0" s="true" lb="Java If once 2" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" ng="1" na="1"> + <responseHeader class="java.lang.String"></responseHeader> + <requestHeader class="java.lang.String"></requestHeader> + <responseData class="java.lang.String"/> + <responseFile class="java.lang.String"></responseFile> + <null/> +</sample> +<sample lt="0" s="false" lb="Java If all 1" rc="" rm="" tn="Thread Group 1-1" dt="" by="0" ng="1" na="1"> + <responseHeader class="java.lang.String"></responseHeader> + <requestHeader class="java.lang.String"></requestHeader> + <responseData class="java.lang.String"/> + <responseFile class="java.lang.String"></responseFile> + <null/> +</sample> +<sample lt="0" s="true" lb="Java OK" rc="200" rm="OK" tn="Thread Group 1-1" dt="" by="0" ng="1" na="1"> + <responseHeader class="java.lang.String"></responseHeader> + <requestHeader class="java.lang.String"></requestHeader> + <responseData class="java.lang.String"/> + <responseFile class="java.lang.String"></responseFile> + <null/> +</sample> </testResults> Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/IfController.java URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/IfController.java?rev=577462&r1=577461&r2=577462&view=diff ============================================================================== --- jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/IfController.java (original) +++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/IfController.java Wed Sep 19 15:43:19 2007 @@ -53,6 +53,8 @@ private final static String CONDITION = "IfController.condition"; //$NON-NLS-1$ + private final static String EVALUATE_ALL = "IfController.evaluateAll"; //$NON-NLS-1$ + /** * constructor */ @@ -105,7 +107,7 @@ } else if (resultStr.equals("true")) { //$NON-NLS-1$ result = true; } else { - throw new Exception(" BAD CONDITION :: " + cond); + throw new Exception(" BAD CONDITION :: " + cond + " :: expected true or false"); } logger.debug(" >> evaluate Condition - [ " + cond + "] results is [" + result + "]"); @@ -145,7 +147,7 @@ // For subsequent calls, we are inside the IfControllerGroup, // so then we just pass the control to the next item inside the if control boolean result = true; - if(isFirst()) { + if(isEvaluateAll() || isFirst()) { result = evaluateCondition(getCondition()); } @@ -157,5 +159,13 @@ } catch (NextIsNullException e1) { return null; } + } + + public boolean isEvaluateAll() { + return getPropertyAsBoolean(EVALUATE_ALL,false); + } + + public void setEvaluateAll(boolean b) { + setProperty(EVALUATE_ALL,b); } } Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/gui/IfControllerPanel.java URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/gui/IfControllerPanel.java?rev=577462&r1=577461&r2=577462&view=diff ============================================================================== --- jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/gui/IfControllerPanel.java (original) +++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/control/gui/IfControllerPanel.java Wed Sep 19 15:43:19 2007 @@ -23,6 +23,7 @@ import java.awt.event.ActionListener; import javax.swing.Box; +import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; @@ -41,13 +42,13 @@ public class IfControllerPanel extends AbstractControllerGui implements ActionListener { - private static final String CONDITION_LABEL = "if_controller_label"; // $NON-NLS-1$ - /** * A field allowing the user to specify the number of times the controller * should loop. */ private JTextField theCondition; + + private JCheckBox evaluateAll; /** * Boolean indicating whether or not this component should display its name. @@ -56,9 +57,6 @@ */ private boolean displayName = true; - /** The name of the loops field component. */ - private static final String CONDITION = "JS_Condition"; // $NON-NLS-1$ - /** * Create a new LoopControlPanel as a standalone component. */ @@ -93,7 +91,9 @@ public void configure(TestElement element) { super.configure(element); if (element instanceof IfController) { - theCondition.setText(((IfController) element).getCondition()); + IfController ifController = (IfController) element; + theCondition.setText(ifController.getCondition()); + evaluateAll.setSelected(ifController.isEvaluateAll()); } } @@ -113,11 +113,9 @@ public void modifyTestElement(TestElement controller) { configureTestElement(controller); if (controller instanceof IfController) { - if (theCondition.getText().length() > 0) { - ((IfController) controller).setCondition(theCondition.getText()); - } else { - ((IfController) controller).setCondition(""); // $NON-NLS-1$ - } + IfController ifController = (IfController) controller; + ifController.setCondition(theCondition.getText()); + ifController.setEvaluateAll(evaluateAll.isSelected()); } } @@ -127,6 +125,7 @@ public void clearGui() { super.clearGui(); theCondition.setText(""); // $NON-NLS-1$ + evaluateAll.setSelected(false); } /** @@ -174,12 +173,11 @@ JPanel conditionPanel = new JPanel(new BorderLayout(5, 0)); // Condition LABEL - JLabel conditionLabel = new JLabel(JMeterUtils.getResString(CONDITION_LABEL)); + JLabel conditionLabel = new JLabel(JMeterUtils.getResString("if_controller_label")); // $NON-NLS-1$ conditionPanel.add(conditionLabel, BorderLayout.WEST); // TEXT FIELD theCondition = new JTextField(""); // $NON-NLS-1$ - theCondition.setName(CONDITION); conditionLabel.setLabelFor(theCondition); conditionPanel.add(theCondition, BorderLayout.CENTER); theCondition.addActionListener(this); @@ -187,6 +185,9 @@ conditionPanel.add(Box.createHorizontalStrut(conditionLabel.getPreferredSize().width + theCondition.getPreferredSize().width), BorderLayout.NORTH); + // Evaluate All checkbox + evaluateAll = new JCheckBox(JMeterUtils.getResString("if_controller_evaluate_all")); // $NON-NLS-1$ + conditionPanel.add(evaluateAll,BorderLayout.SOUTH); return conditionPanel; } } 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=577462&r1=577461&r2=577462&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 Wed Sep 19 15:43:19 2007 @@ -262,6 +262,7 @@ httpmirror_title=HTTP Mirror Server id_prefix=ID Prefix id_suffix=ID Suffix +if_controller_evaluate_all=Evaluate for all children? if_controller_label=Condition if_controller_title=If Controller ignore_subcontrollers=Ignore sub-controller blocks Modified: jakarta/jmeter/trunk/xdocs/changes.xml URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=577462&r1=577461&r2=577462&view=diff ============================================================================== --- jakarta/jmeter/trunk/xdocs/changes.xml (original) +++ jakarta/jmeter/trunk/xdocs/changes.xml Wed Sep 19 15:43:19 2007 @@ -55,6 +55,7 @@ <li>Bug 43332 - 2.3RC4 does not clear Guis based on TestBean</li> <li>Bug 42948 - Problems with Proxy gui table fields in Java 1.6</li> <li>Fixup broken jmeter-server script</li> +<li>Bug 43364 - option to revert If Controller to pre 2.3RC3 behaviour</li> </ul> <h4>Improvements</h4> @@ -402,7 +403,7 @@ <li>Function methods setParameters() need to be synchronized</li> <li>Fix CLI long optional argument to require "=" (as for short options)</li> <li>Fix SlowSocket to work properly with Httpclient (both http and https)</li> -<li>Bug 41612 - Loop nested in IF behaves erratically</li> +<li>Bug 41612 - Loop nested in If Controller behaves erratically</li> <li>Bug 42232 - changing language clears UDV contents</li> <li>Jexl function did not allow variables</li> </ul> Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=577462&r1=577461&r2=577462&view=diff ============================================================================== --- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original) +++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Wed Sep 19 15:43:19 2007 @@ -1344,16 +1344,26 @@ <component name="If Controller" index="§-num;.2.9" width="358" height="131" screenshot="ifcontroller.png"> <description> <p>The If Controller allows the user to control whether the test elements below it (its children) are run or not.</p> + <p> + Prior to JMeter 2.3RC3, the condition was evaluated for every runnable element contained in the controller. + This sometimes caused unexpected behaviour, so 2.3RC3 was changed to evaluate the condition only once on initial entry. + However, the original behaviour is also useful, so versions of JMeter after 2.3RC4 have an additional + option to select the original behaviour. + </p> </description> <properties> <property name="Name" required="No">Descriptive name for this controller that is shown in the tree.</property> <property name="Condition" required="Yes"><b>Javascript</b> code that returns "true" or "false"</property> + <property name="Evaluate for all children" required="Yes"> + Should condition be evaluated for all children? + If not checked, then the condition is only evaluated on entry. + </property> </properties> <p>Examples: <ul> <li>${COUNT} < 10</li> <li>"${VAR}" == "abcd"</li> - <li>"${JMeterThread.last_sample_ok}" == "true" (check if last sample succeeded)</li> + <li>${JMeterThread.last_sample_ok} (check if last sample succeeded)</li> </ul> If there is an error interpreting the code, the condition is assumed to be false, and a message is logged in jmeter.log. </p> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]