You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by un...@apache.org on 2017/05/11 18:02:25 UTC
svn commit: r1794861 - in /jmeter/trunk:
src/core/org/apache/jmeter/threads/JMeterThread.java
test/src/org/apache/jmeter/control/TestTransactionController.java
xdocs/changes.xml
Author: undera
Date: Thu May 11 18:02:25 2017
New Revision: 1794861
URL: http://svn.apache.org/viewvc?rev=1794861&view=rev
Log:
Bug 57958 - Fix transaction sample not generated if thread stops/restarts
Added:
jmeter/trunk/test/src/org/apache/jmeter/control/TestTransactionController.java
Modified:
jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java
jmeter/trunk/xdocs/changes.xml
Modified: jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java?rev=1794861&r1=1794860&r2=1794861&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java Thu May 11 18:02:25 2017
@@ -433,16 +433,25 @@ public class JMeterThread implements Run
if (log.isInfoEnabled()) {
log.info("Stopping Test: {}", e.toString());
}
+ if (current != null && current instanceof TransactionSampler) {
+ doEndTransactionSampler((TransactionSampler) current, parent, compiler.configureTransactionSampler((TransactionSampler) current), threadContext);
+ }
shutdownTest();
} catch (JMeterStopTestNowException e) { // NOSONAR
if (log.isInfoEnabled()) {
log.info("Stopping Test with interruption of current samplers: {}", e.toString());
}
+ if (current != null && current instanceof TransactionSampler) {
+ doEndTransactionSampler((TransactionSampler) current, parent, compiler.configureTransactionSampler((TransactionSampler) current), threadContext);
+ }
stopTestNow();
} catch (JMeterStopThreadException e) { // NOSONAR
if (log.isInfoEnabled()) {
log.info("Stopping Thread: {}", e.toString());
}
+ if (current != null && current instanceof TransactionSampler) {
+ doEndTransactionSampler((TransactionSampler) current, parent, compiler.configureTransactionSampler((TransactionSampler) current), threadContext);
+ }
stopThread();
} catch (Exception e) {
if (current != null) {
@@ -527,12 +536,21 @@ public class JMeterThread implements Run
// Check if thread or test should be stopped
if (result.isStopThread() || (!result.isSuccessful() && onErrorStopThread)) {
+ if (transactionSampler != null) {
+ doEndTransactionSampler(transactionSampler, current, transactionPack, threadContext);
+ }
stopThread();
}
if (result.isStopTest() || (!result.isSuccessful() && onErrorStopTest)) {
+ if (transactionSampler != null) {
+ doEndTransactionSampler(transactionSampler, current, transactionPack, threadContext);
+ }
shutdownTest();
}
if (result.isStopTestNow() || (!result.isSuccessful() && onErrorStopTestNow)) {
+ if (transactionSampler != null) {
+ doEndTransactionSampler(transactionSampler, current, transactionPack, threadContext);
+ }
stopTestNow();
}
if(result.isStartNextThreadLoop()) {
Added: jmeter/trunk/test/src/org/apache/jmeter/control/TestTransactionController.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/control/TestTransactionController.java?rev=1794861&view=auto
==============================================================================
--- jmeter/trunk/test/src/org/apache/jmeter/control/TestTransactionController.java (added)
+++ jmeter/trunk/test/src/org/apache/jmeter/control/TestTransactionController.java Thu May 11 18:02:25 2017
@@ -0,0 +1,95 @@
+package org.apache.jmeter.control;
+
+import org.apache.jmeter.assertions.ResponseAssertion;
+import org.apache.jmeter.junit.JMeterTestCase;
+import org.apache.jmeter.reporters.ResultCollector;
+import org.apache.jmeter.sampler.DebugSampler;
+import org.apache.jmeter.samplers.SampleEvent;
+import org.apache.jmeter.samplers.SampleListener;
+import org.apache.jmeter.threads.JMeterContextService;
+import org.apache.jmeter.threads.JMeterThread;
+import org.apache.jmeter.threads.JMeterVariables;
+import org.apache.jmeter.threads.ListenerNotifier;
+import org.apache.jmeter.threads.TestCompiler;
+import org.apache.jmeter.threads.ThreadGroup;
+import org.apache.jorphan.collections.ListedHashTree;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+
+public class TestTransactionController extends JMeterTestCase {
+
+ /**
+ * @see "http://bz.apache.org/bugzilla/show_bug.cgi?id=57958"
+ */
+ @Test
+ public void testIssue57958() throws Exception {
+ JMeterContextService.getContext().setVariables(new JMeterVariables());
+
+
+ TestSampleListener listener = new TestSampleListener();
+
+ TransactionController transactionController = new TransactionController();
+ transactionController.setGenerateParentSample(true);
+
+ ResponseAssertion assertion = new ResponseAssertion();
+ assertion.setTestFieldResponseCode();
+ assertion.setToEqualsType();
+ assertion.addTestString("201");
+
+ DebugSampler debugSampler = new DebugSampler();
+ debugSampler.addTestElement(assertion);
+
+ LoopController loop = new LoopController();
+ loop.setLoops(1);
+ loop.setContinueForever(false);
+
+ ListedHashTree hashTree = new ListedHashTree();
+ hashTree.add(loop);
+ hashTree.add(loop, transactionController);
+ hashTree.add(transactionController, debugSampler);
+ hashTree.add(transactionController, listener);
+ hashTree.add(debugSampler, assertion);
+
+ TestCompiler compiler = new TestCompiler(hashTree);
+ hashTree.traverse(compiler);
+
+ ThreadGroup threadGroup = new ThreadGroup();
+ threadGroup.setNumThreads(1);
+
+ ListenerNotifier notifier = new ListenerNotifier();
+
+ JMeterThread thread = new JMeterThread(hashTree, threadGroup, notifier);
+ thread.setThreadGroup(threadGroup);
+ thread.setOnErrorStopThread(true);
+ thread.run();
+
+ assertEquals("Must one transaction samples with parent debug sample", 1, listener.events.size());
+ assertEquals("Number of samples in transaction : 1, number of failing samples : 1", listener.events.get(0).getResult().getResponseMessage());
+ }
+
+
+
+ public class TestSampleListener extends ResultCollector implements SampleListener {
+ public List<SampleEvent> events = new ArrayList<>();
+
+ @Override
+ public void sampleOccurred(SampleEvent e) {
+ events.add(e);
+ }
+
+ @Override
+ public void sampleStarted(SampleEvent e) {
+ events.add(e);
+ }
+
+ @Override
+ public void sampleStopped(SampleEvent e) {
+ events.add(e);
+ }
+ }
+}
Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1794861&r1=1794860&r2=1794861&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
+++ jmeter/trunk/xdocs/changes.xml [utf-8] Thu May 11 18:02:25 2017
@@ -173,6 +173,7 @@ Summary
<li><bug>61054</bug>Endless loop in JOrphanUtils#replaceAllWithRegex when regex is contained in replacement</li>
<li><bug>60995</bug>HTTP Test Script Recorder: Port field is very small under some LAF</li>
<li><bug>61073</bug>HTTP(S) Test Script Recorder panel have some fields with bad size on HiDPI screen or GTK+ L&F on Linux/XWayland</li>
+ <li><bug>57958</bug>Fix transaction sample not generated if thread stops/restarts. Implemented by Artem Fedorov (artem at blazemeter.com) and contributed by BlazeMeter Ltd.</li>
</ul>
<!-- =================== Thanks =================== -->
Re: svn commit: r1794861 - in /jmeter/trunk: src/core/org/apache/jmeter/threads/JMeterThread.java test/src/org/apache/jmeter/control/TestTransactionController.java xdocs/changes.xml
Posted by Felix Schumacher <fe...@internetallee.de>.
Am 11. Mai 2017 20:02:25 MESZ schrieb undera@apache.org:
>Author: undera
>Date: Thu May 11 18:02:25 2017
>New Revision: 1794861
>
>URL: http://svn.apache.org/viewvc?rev=1794861&view=rev
>Log:
>Bug 57958 - Fix transaction sample not generated if thread
>stops/restarts
>
>Added:
>jmeter/trunk/test/src/org/apache/jmeter/control/TestTransactionController.java
>Modified:
> jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java
> jmeter/trunk/xdocs/changes.xml
>
>Modified:
>jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java
>URL:
>http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java?rev=1794861&r1=1794860&r2=1794861&view=diff
>==============================================================================
>--- jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java
>(original)
>+++ jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java
>Thu May 11 18:02:25 2017
>@@ -433,16 +433,25 @@ public class JMeterThread implements Run
> if (log.isInfoEnabled()) {
> log.info("Stopping Test: {}", e.toString());
> }
>+ if (current != null && current instanceof
>TransactionSampler) {
The null check is not needed, as the instanceof is false in case of current being null.
>+ doEndTransactionSampler((TransactionSampler) current,
>parent, compiler.configureTransactionSampler((TransactionSampler)
>current), threadContext);
>+ }
> shutdownTest();
> } catch (JMeterStopTestNowException e) { // NOSONAR
> if (log.isInfoEnabled()) {
>log.info("Stopping Test with interruption of current samplers: {}",
>e.toString());
> }
>+ if (current != null && current instanceof
>TransactionSampler) {
Same here.
>+ doEndTransactionSampler((TransactionSampler) current,
>parent, compiler.configureTransactionSampler((TransactionSampler)
>current), threadContext);
>+ }
> stopTestNow();
> } catch (JMeterStopThreadException e) { // NOSONAR
> if (log.isInfoEnabled()) {
> log.info("Stopping Thread: {}", e.toString());
> }
>+ if (current != null && current instanceof
>TransactionSampler) {
... and here :)
Regards,
Felix
>+ doEndTransactionSampler((TransactionSampler) current,
>parent, compiler.configureTransactionSampler((TransactionSampler)
>current), threadContext);
>+ }
> stopThread();
> } catch (Exception e) {
> if (current != null) {
>@@ -527,12 +536,21 @@ public class JMeterThread implements Run
>
> // Check if thread or test should be stopped
>if (result.isStopThread() || (!result.isSuccessful() &&
>onErrorStopThread)) {
>+ if (transactionSampler != null) {
>+ doEndTransactionSampler(transactionSampler,
>current, transactionPack, threadContext);
>+ }
> stopThread();
> }
>if (result.isStopTest() || (!result.isSuccessful() && onErrorStopTest))
>{
>+ if (transactionSampler != null) {
>+ doEndTransactionSampler(transactionSampler,
>current, transactionPack, threadContext);
>+ }
> shutdownTest();
> }
>if (result.isStopTestNow() || (!result.isSuccessful() &&
>onErrorStopTestNow)) {
>+ if (transactionSampler != null) {
>+ doEndTransactionSampler(transactionSampler,
>current, transactionPack, threadContext);
>+ }
> stopTestNow();
> }
> if(result.isStartNextThreadLoop()) {
>
>Added:
>jmeter/trunk/test/src/org/apache/jmeter/control/TestTransactionController.java
>URL:
>http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/control/TestTransactionController.java?rev=1794861&view=auto
>==============================================================================
>---
>jmeter/trunk/test/src/org/apache/jmeter/control/TestTransactionController.java
>(added)
>+++
>jmeter/trunk/test/src/org/apache/jmeter/control/TestTransactionController.java
>Thu May 11 18:02:25 2017
>@@ -0,0 +1,95 @@
>+package org.apache.jmeter.control;
>+
>+import org.apache.jmeter.assertions.ResponseAssertion;
>+import org.apache.jmeter.junit.JMeterTestCase;
>+import org.apache.jmeter.reporters.ResultCollector;
>+import org.apache.jmeter.sampler.DebugSampler;
>+import org.apache.jmeter.samplers.SampleEvent;
>+import org.apache.jmeter.samplers.SampleListener;
>+import org.apache.jmeter.threads.JMeterContextService;
>+import org.apache.jmeter.threads.JMeterThread;
>+import org.apache.jmeter.threads.JMeterVariables;
>+import org.apache.jmeter.threads.ListenerNotifier;
>+import org.apache.jmeter.threads.TestCompiler;
>+import org.apache.jmeter.threads.ThreadGroup;
>+import org.apache.jorphan.collections.ListedHashTree;
>+import org.junit.Test;
>+
>+import java.util.ArrayList;
>+import java.util.List;
>+
>+import static org.junit.Assert.assertEquals;
>+
>+
>+public class TestTransactionController extends JMeterTestCase {
>+
>+ /**
>+ * @see "http://bz.apache.org/bugzilla/show_bug.cgi?id=57958"
>+ */
>+ @Test
>+ public void testIssue57958() throws Exception {
>+ JMeterContextService.getContext().setVariables(new
>JMeterVariables());
>+
>+
>+ TestSampleListener listener = new TestSampleListener();
>+
>+ TransactionController transactionController = new
>TransactionController();
>+ transactionController.setGenerateParentSample(true);
>+
>+ ResponseAssertion assertion = new ResponseAssertion();
>+ assertion.setTestFieldResponseCode();
>+ assertion.setToEqualsType();
>+ assertion.addTestString("201");
>+
>+ DebugSampler debugSampler = new DebugSampler();
>+ debugSampler.addTestElement(assertion);
>+
>+ LoopController loop = new LoopController();
>+ loop.setLoops(1);
>+ loop.setContinueForever(false);
>+
>+ ListedHashTree hashTree = new ListedHashTree();
>+ hashTree.add(loop);
>+ hashTree.add(loop, transactionController);
>+ hashTree.add(transactionController, debugSampler);
>+ hashTree.add(transactionController, listener);
>+ hashTree.add(debugSampler, assertion);
>+
>+ TestCompiler compiler = new TestCompiler(hashTree);
>+ hashTree.traverse(compiler);
>+
>+ ThreadGroup threadGroup = new ThreadGroup();
>+ threadGroup.setNumThreads(1);
>+
>+ ListenerNotifier notifier = new ListenerNotifier();
>+
>+ JMeterThread thread = new JMeterThread(hashTree, threadGroup,
>notifier);
>+ thread.setThreadGroup(threadGroup);
>+ thread.setOnErrorStopThread(true);
>+ thread.run();
>+
>+ assertEquals("Must one transaction samples with parent debug
>sample", 1, listener.events.size());
>+ assertEquals("Number of samples in transaction : 1, number of
>failing samples : 1",
>listener.events.get(0).getResult().getResponseMessage());
>+ }
>+
>+
>+
>+ public class TestSampleListener extends ResultCollector implements
>SampleListener {
>+ public List<SampleEvent> events = new ArrayList<>();
>+
>+ @Override
>+ public void sampleOccurred(SampleEvent e) {
>+ events.add(e);
>+ }
>+
>+ @Override
>+ public void sampleStarted(SampleEvent e) {
>+ events.add(e);
>+ }
>+
>+ @Override
>+ public void sampleStopped(SampleEvent e) {
>+ events.add(e);
>+ }
>+ }
>+}
>
>Modified: jmeter/trunk/xdocs/changes.xml
>URL:
>http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1794861&r1=1794860&r2=1794861&view=diff
>==============================================================================
>--- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
>+++ jmeter/trunk/xdocs/changes.xml [utf-8] Thu May 11 18:02:25 2017
>@@ -173,6 +173,7 @@ Summary
><li><bug>61054</bug>Endless loop in JOrphanUtils#replaceAllWithRegex
>when regex is contained in replacement</li>
><li><bug>60995</bug>HTTP Test Script Recorder: Port field is very small
>under some LAF</li>
><li><bug>61073</bug>HTTP(S) Test Script Recorder panel have some fields
>with bad size on HiDPI screen or GTK+ L&F on Linux/XWayland</li>
>+ <li><bug>57958</bug>Fix transaction sample not generated if thread
>stops/restarts. Implemented by Artem Fedorov (artem at blazemeter.com)
>and contributed by BlazeMeter Ltd.</li>
> </ul>
>
> <!-- =================== Thanks =================== -->