Author: sebb Date: Wed Sep 21 12:06:02 2011 New Revision: 1173581 URL: http://svn.apache.org/viewvc?rev=1173581&view=rev Log: Bug 47888 - JUnit Sampler re-uses test object
Modified: jakarta/jmeter/trunk/docs/images/screenshots/junit_sampler.png jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/sampler/JUnitSampler.java jakarta/jmeter/trunk/xdocs/changes.xml jakarta/jmeter/trunk/xdocs/images/screenshots/junit_sampler.png jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Modified: jakarta/jmeter/trunk/docs/images/screenshots/junit_sampler.png URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/images/screenshots/junit_sampler.png?rev=1173581&r1=1173580&r2=1173581&view=diff ============================================================================== Binary files - no diff available. 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=1173581&r1=1173580&r2=1173581&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 21 12:06:02 2011 @@ -425,6 +425,7 @@ junit_success_default_msg=Test successfu junit_success_msg=Success Message junit_test_config=JUnit Test Parameters junit_test_method=Test Method +junit_create_instance_per_sample=Create a new instance per sample ldap_argument_list=LDAPArgument List ldap_connto=Connection timeout (in milliseconds) ldap_parse_results=Parse the search results ? Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties?rev=1173581&r1=1173580&r2=1173581&view=diff ============================================================================== --- jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties (original) +++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties Wed Sep 21 12:06:02 2011 @@ -390,6 +390,7 @@ junit_success_default_msg=Test r\u00E9us junit_success_msg=Message de succ\u00E8s junit_test_config=Param\u00E8tres Test JUnit junit_test_method=M\u00E9thode de test +junit_create_instance_per_sample=Cr\u00E9er une nouvelle instance pour chaque sample ldap_argument_list=Liste d'arguments LDAP ldap_connto=D\u00E9lai d'attente de connexion (millisecondes) ldap_parse_results=Examiner les r\u00E9sultats de recherche ? Modified: jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java?rev=1173581&r1=1173580&r2=1173581&view=diff ============================================================================== --- jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java (original) +++ jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/control/gui/JUnitTestSamplerGui.java Wed Sep 21 12:06:02 2011 @@ -131,6 +131,7 @@ implements ChangeListener, ActionListene private JCheckBox appendError = new JCheckBox(JMeterUtils.getResString("junit_append_error")); //$NON-NLS-1$ private JCheckBox appendExc = new JCheckBox(JMeterUtils.getResString("junit_append_exception")); //$NON-NLS-1$ private JCheckBox junit4 = new JCheckBox(JMeterUtils.getResString("junit_junit4")); //$NON-NLS-1$ + private JCheckBox createInstancePerSample = new JCheckBox(JMeterUtils.getResString("junit_create_instance_per_sample")); //$NON-NLS-1$ /** A combo box allowing the user to choose a test class. */ private JComboBox classnameCombo; @@ -234,12 +235,14 @@ implements ChangeListener, ActionListene panel.add(doSetup); panel.add(appendError); panel.add(appendExc); + panel.add(createInstancePerSample); return panel; } private void initGui(){ appendError.setSelected(false); appendExc.setSelected(false); + createInstancePerSample.setSelected(false); doSetup.setSelected(false); junit4.setSelected(false); filterpkg.setText(""); //$NON-NLS-1$ @@ -295,6 +298,7 @@ implements ChangeListener, ActionListene sampler.setDoNotSetUpTearDown(doSetup.isSelected()); sampler.setAppendError(appendError.isSelected()); sampler.setAppendException(appendExc.isSelected()); + sampler.setCreateOneInstancePerSample(createInstancePerSample.isSelected()); sampler.setJunit4(junit4.isSelected()); } @@ -343,6 +347,7 @@ implements ChangeListener, ActionListene doSetup.setSelected(sampler.getDoNotSetUpTearDown()); appendError.setSelected(sampler.getAppendError()); appendExc.setSelected(sampler.getAppendException()); + createInstancePerSample.setSelected(sampler.getCreateOneInstancePerSample()); } private void setupMethods(){ Modified: jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/sampler/JUnitSampler.java URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/sampler/JUnitSampler.java?rev=1173581&r1=1173580&r2=1173581&view=diff ============================================================================== --- jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/sampler/JUnitSampler.java (original) +++ jakarta/jmeter/trunk/src/junit/org/apache/jmeter/protocol/java/sampler/JUnitSampler.java Wed Sep 21 12:06:02 2011 @@ -69,6 +69,8 @@ public class JUnitSampler extends Abstra private static final String APPEND_ERROR = "junitsampler.append.error"; private static final String APPEND_EXCEPTION = "junitsampler.append.exception"; private static final String JUNIT4 = "junitsampler.junit4"; + private static final String CREATE_INSTANCE_PER_SAMPLE="junitsampler.createinstancepersample"; + private static final boolean CREATE_INSTANCE_PER_SAMPLE_DEFAULT = false; //-- JMX file attributes - do not change private static final String SETUP = "setUp"; @@ -94,6 +96,7 @@ public class JUnitSampler extends Abstra private transient Protectable protectable; public JUnitSampler(){ + super(); } /** @@ -356,6 +359,9 @@ public class JUnitSampler extends Abstra /** {@inheritDoc} */ public SampleResult sample(Entry entry) { + if(getCreateOneInstancePerSample()) { + initializeTestObject(); + } SampleResult sresult = new SampleResult(); sresult.setSampleLabel(getName());// Bug 41522 - don't use rlabel here sresult.setSamplerData(className + "." + methodName); @@ -621,16 +627,26 @@ public class JUnitSampler extends Abstra testCase = null; methodName = getMethod(); className = getClassname(); - final Method m; protectable = null; + if(!getCreateOneInstancePerSample()) { + // NO NEED TO INITIALIZE WHEN getCreateOneInstancePerSample + // is true cause it will be done in sample + initializeTestObject(); + } + } + + /** + * Initialize test object + */ + private void initializeTestObject() { String rlabel = getConstructorString(); if (rlabel.length()== 0) { rlabel = JUnitSampler.class.getName(); } - this.testObject = getClassInstance(className,rlabel); + this.testObject = getClassInstance(className, rlabel); if (this.testObject != null){ initMethodObjects(this.testObject); - m = getMethod(this.testObject,methodName); + final Method m = getMethod(this.testObject,methodName); if (getJunit4()){ Class<? extends Throwable> expectedException = None.class; long timeout = 0; @@ -673,4 +689,20 @@ public class JUnitSampler extends Abstra } } } -} + + /** + * + * @param createOneInstancePerSample + */ + public void setCreateOneInstancePerSample(boolean createOneInstancePerSample) { + this.setProperty(CREATE_INSTANCE_PER_SAMPLE, createOneInstancePerSample, CREATE_INSTANCE_PER_SAMPLE_DEFAULT); + } + + /** + * + * @return boolean create New Instance For Each Call + */ + public boolean getCreateOneInstancePerSample() { + return getPropertyAsBoolean(CREATE_INSTANCE_PER_SAMPLE, CREATE_INSTANCE_PER_SAMPLE_DEFAULT); + } +} \ No newline at end of file Modified: jakarta/jmeter/trunk/xdocs/changes.xml URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1173581&r1=1173580&r2=1173581&view=diff ============================================================================== --- jakarta/jmeter/trunk/xdocs/changes.xml (original) +++ jakarta/jmeter/trunk/xdocs/changes.xml Wed Sep 21 12:06:02 2011 @@ -97,6 +97,7 @@ This can be overridden by setting the JM <li>Bug 51841 - JMS : If an error occurs in ReceiveSubscriber constructor or Publisher, then Connections will stay open</li> <li>Bug 51691 - Authorization does not work for JMS Publisher and JMS Subscriber</li> <li>Bug 51840 - JMS : Cache of InitialContext has some issues</li> +<li>Bug 47888 - JUnit Sampler re-uses test object</li> </ul> <h3>Controllers</h3> Modified: jakarta/jmeter/trunk/xdocs/images/screenshots/junit_sampler.png URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/junit_sampler.png?rev=1173581&r1=1173580&r2=1173581&view=diff ============================================================================== Binary files - no diff available. Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1173581&r1=1173580&r2=1173581&view=diff ============================================================================== --- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original) +++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Wed Sep 21 12:06:02 2011 @@ -1425,7 +1425,7 @@ completed, so the net effect was similar -<component name="JUnit Request" index="§-num;.1.16" width="457" height="507" screenshot="junit_sampler.png"> +<component name="JUnit Request" index="§-num;.1.16" width="397" height="536" screenshot="junit_sampler.png"> <description> The current implementation supports standard Junit convention and extensions. It also includes extensions like oneTimeSetUp and oneTimeTearDown. The sampler works like the @@ -1440,7 +1440,8 @@ In versions of JMeter after 2.3.1, you c <br></br>7. The sampler reports unexpected exceptions as errors. There are some important differences between standard JUnit test runners and JMeter's implementation. Rather than make a new instance of the class for each test, JMeter -creates 1 instance per sampler and reuses it.<br></br> +creates 1 instance per sampler and reuses it. +This can be changed with checkbox "Create a new instance per sample".<br></br> The current implementation of the sampler will try to create an instance using the string constructor first. If the test class does not declare a string constructor, the sampler will look for an empty constructor. Example below:<br> <br> Empty Constructor:<br> @@ -1486,6 +1487,7 @@ Here are some general guidelines for wri this option should be checked.</property> <property name="Append assertion errors" required="Yes">Whether or not to append assertion errors to the response message.</property> <property name="Append runtime exceptions" required="Yes">Whether or not to append runtime exceptions to the response message. Only applies if "Append assertion errors" is not selected.</property> + <property name="Create a new Instance per sample" required="Yes">Whether or not to create a new JUnit instance for each sample. Defaults to false, meaning JUnit TestCase is created one and reused.</property> </properties> <p> The following JUnit4 annotations are recognised: --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@jakarta.apache.org For additional commands, e-mail: notifications-h...@jakarta.apache.org