Last active
December 24, 2020 15:49
-
-
Save polarnik/7f5fdc5c70809c879dd42904b8639f31 to your computer and use it in GitHub Desktop.
SLA for Transaction Controller (name like "* (TC)") via Apache.JMeter JSR223 Listener
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
if(sampleResult.getSampleLabel().endsWith(' (TC)')) | |
{ | |
Long maxDuration = Long.valueOf(Parameters) | |
if(sampleResult.getTime() > maxDuration) | |
{ | |
sampleResult.setResponseMessage("Timeout Assertion Error time > ${Parameters}") | |
sampleResult.setResponseCode('503.1') | |
sampleResult.setSuccessful(false) | |
} | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.3"> | |
<hashTree> | |
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true"> | |
<stringProp name="TestPlan.comments"></stringProp> | |
<boolProp name="TestPlan.functional_mode">false</boolProp> | |
<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp> | |
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp> | |
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> | |
<collectionProp name="Arguments.arguments"> | |
<elementProp name="SLA" elementType="Argument"> | |
<stringProp name="Argument.name">SLA</stringProp> | |
<stringProp name="Argument.value">3000</stringProp> | |
<stringProp name="Argument.metadata">=</stringProp> | |
</elementProp> | |
</collectionProp> | |
</elementProp> | |
<stringProp name="TestPlan.user_define_classpath"></stringProp> | |
</TestPlan> | |
<hashTree> | |
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true"> | |
<stringProp name="ThreadGroup.on_sample_error">startnextloop</stringProp> | |
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> | |
<boolProp name="LoopController.continue_forever">false</boolProp> | |
<intProp name="LoopController.loops">-1</intProp> | |
</elementProp> | |
<stringProp name="ThreadGroup.num_threads">100</stringProp> | |
<stringProp name="ThreadGroup.ramp_time">50</stringProp> | |
<boolProp name="ThreadGroup.scheduler">true</boolProp> | |
<stringProp name="ThreadGroup.duration">300</stringProp> | |
<stringProp name="ThreadGroup.delay"></stringProp> | |
<boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp> | |
<boolProp name="ThreadGroup.delayedStart">true</boolProp> | |
</ThreadGroup> | |
<hashTree> | |
<ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="Constant Throughput Timer - RPS - 0.5 for All" enabled="true"> | |
<doubleProp> | |
<name>throughput</name> | |
<value>30.0</value> | |
<savedValue>0.0</savedValue> | |
</doubleProp> | |
<intProp name="calcMode">0</intProp> | |
</ConstantThroughputTimer> | |
<hashTree/> | |
<TestAction guiclass="TestActionGui" testclass="TestAction" testname="Flow Control Action" enabled="true"> | |
<intProp name="ActionProcessor.action">1</intProp> | |
<intProp name="ActionProcessor.target">0</intProp> | |
<stringProp name="ActionProcessor.duration">0</stringProp> | |
</TestAction> | |
<hashTree> | |
<ConstantThroughputTimer guiclass="TestBeanGUI" testclass="ConstantThroughputTimer" testname="Constant Throughput Timer - TPS - 1/10 per second (Pacing: 10 sec)" enabled="true"> | |
<intProp name="calcMode">0</intProp> | |
<doubleProp> | |
<name>throughput</name> | |
<value>6.0</value> | |
<savedValue>0.0</savedValue> | |
</doubleProp> | |
</ConstantThroughputTimer> | |
<hashTree/> | |
</hashTree> | |
<JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener - Transaction Duration Assertion" enabled="true"> | |
<stringProp name="cacheKey">true</stringProp> | |
<stringProp name="filename"></stringProp> | |
<stringProp name="parameters">${SLA}</stringProp> | |
<stringProp name="script">if(sampleResult.getSampleLabel().endsWith(' (TC)')) | |
{ | |
Long maxDuration = Long.valueOf(Parameters) | |
if(sampleResult.getTime() > maxDuration) | |
{ | |
sampleResult.setResponseMessage("Timeout Assertion Error time > ${Parameters}") | |
sampleResult.setResponseCode('503.1') | |
sampleResult.setSuccessful(false) | |
} | |
} | |
</stringProp> | |
<stringProp name="scriptLanguage">groovy</stringProp> | |
</JSR223Listener> | |
<hashTree/> | |
<TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Transaction Controller (TC)" enabled="true"> | |
<boolProp name="TransactionController.includeTimers">false</boolProp> | |
<boolProp name="TransactionController.parent">false</boolProp> | |
</TransactionController> | |
<hashTree> | |
<JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request 1" enabled="true"> | |
<elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true"> | |
<collectionProp name="Arguments.arguments"> | |
<elementProp name="SleepTime" elementType="Argument"> | |
<stringProp name="Argument.name">SleepTime</stringProp> | |
<stringProp name="Argument.value">100</stringProp> | |
<stringProp name="Argument.metadata">=</stringProp> | |
</elementProp> | |
<elementProp name="SleepMask" elementType="Argument"> | |
<stringProp name="Argument.name">SleepMask</stringProp> | |
<stringProp name="Argument.value">0x3FF</stringProp> | |
<stringProp name="Argument.metadata">=</stringProp> | |
</elementProp> | |
</collectionProp> | |
</elementProp> | |
<stringProp name="classname">org.apache.jmeter.protocol.java.test.SleepTest</stringProp> | |
</JavaSampler> | |
<hashTree/> | |
<JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request 2" enabled="true"> | |
<elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true"> | |
<collectionProp name="Arguments.arguments"> | |
<elementProp name="SleepTime" elementType="Argument"> | |
<stringProp name="Argument.name">SleepTime</stringProp> | |
<stringProp name="Argument.value">100</stringProp> | |
<stringProp name="Argument.metadata">=</stringProp> | |
</elementProp> | |
<elementProp name="SleepMask" elementType="Argument"> | |
<stringProp name="Argument.name">SleepMask</stringProp> | |
<stringProp name="Argument.value">0x3FF</stringProp> | |
<stringProp name="Argument.metadata">=</stringProp> | |
</elementProp> | |
</collectionProp> | |
</elementProp> | |
<stringProp name="classname">org.apache.jmeter.protocol.java.test.SleepTest</stringProp> | |
</JavaSampler> | |
<hashTree/> | |
<JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request 3" enabled="true"> | |
<elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true"> | |
<collectionProp name="Arguments.arguments"> | |
<elementProp name="SleepTime" elementType="Argument"> | |
<stringProp name="Argument.name">SleepTime</stringProp> | |
<stringProp name="Argument.value">100</stringProp> | |
<stringProp name="Argument.metadata">=</stringProp> | |
</elementProp> | |
<elementProp name="SleepMask" elementType="Argument"> | |
<stringProp name="Argument.name">SleepMask</stringProp> | |
<stringProp name="Argument.value">0x3FF</stringProp> | |
<stringProp name="Argument.metadata">=</stringProp> | |
</elementProp> | |
</collectionProp> | |
</elementProp> | |
<stringProp name="classname">org.apache.jmeter.protocol.java.test.SleepTest</stringProp> | |
</JavaSampler> | |
<hashTree/> | |
<JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Java Request 4" enabled="true"> | |
<elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true"> | |
<collectionProp name="Arguments.arguments"> | |
<elementProp name="SleepTime" elementType="Argument"> | |
<stringProp name="Argument.name">SleepTime</stringProp> | |
<stringProp name="Argument.value">100</stringProp> | |
<stringProp name="Argument.metadata">=</stringProp> | |
</elementProp> | |
<elementProp name="SleepMask" elementType="Argument"> | |
<stringProp name="Argument.name">SleepMask</stringProp> | |
<stringProp name="Argument.value">0x3FF</stringProp> | |
<stringProp name="Argument.metadata">=</stringProp> | |
</elementProp> | |
</collectionProp> | |
</elementProp> | |
<stringProp name="classname">org.apache.jmeter.protocol.java.test.SleepTest</stringProp> | |
</JavaSampler> | |
<hashTree/> | |
</hashTree> | |
</hashTree> | |
<ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true"> | |
<boolProp name="ResultCollector.error_logging">false</boolProp> | |
<objProp> | |
<name>saveConfig</name> | |
<value class="SampleSaveConfiguration"> | |
<time>true</time> | |
<latency>true</latency> | |
<timestamp>true</timestamp> | |
<success>true</success> | |
<label>true</label> | |
<code>true</code> | |
<message>true</message> | |
<threadName>true</threadName> | |
<dataType>true</dataType> | |
<encoding>false</encoding> | |
<assertions>true</assertions> | |
<subresults>true</subresults> | |
<responseData>false</responseData> | |
<samplerData>false</samplerData> | |
<xml>false</xml> | |
<fieldNames>true</fieldNames> | |
<responseHeaders>false</responseHeaders> | |
<requestHeaders>false</requestHeaders> | |
<responseDataOnError>false</responseDataOnError> | |
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> | |
<assertionsResultsToSave>0</assertionsResultsToSave> | |
<bytes>true</bytes> | |
<sentBytes>true</sentBytes> | |
<url>true</url> | |
<threadCounts>true</threadCounts> | |
<idleTime>true</idleTime> | |
<connectTime>true</connectTime> | |
</value> | |
</objProp> | |
<stringProp name="filename"></stringProp> | |
</ResultCollector> | |
<hashTree/> | |
<ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report (ok)" enabled="true"> | |
<boolProp name="ResultCollector.error_logging">false</boolProp> | |
<objProp> | |
<name>saveConfig</name> | |
<value class="SampleSaveConfiguration"> | |
<time>true</time> | |
<latency>true</latency> | |
<timestamp>true</timestamp> | |
<success>true</success> | |
<label>true</label> | |
<code>true</code> | |
<message>true</message> | |
<threadName>true</threadName> | |
<dataType>true</dataType> | |
<encoding>false</encoding> | |
<assertions>true</assertions> | |
<subresults>true</subresults> | |
<responseData>false</responseData> | |
<samplerData>false</samplerData> | |
<xml>false</xml> | |
<fieldNames>true</fieldNames> | |
<responseHeaders>false</responseHeaders> | |
<requestHeaders>false</requestHeaders> | |
<responseDataOnError>false</responseDataOnError> | |
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> | |
<assertionsResultsToSave>0</assertionsResultsToSave> | |
<bytes>true</bytes> | |
<sentBytes>true</sentBytes> | |
<url>true</url> | |
<threadCounts>true</threadCounts> | |
<idleTime>true</idleTime> | |
<connectTime>true</connectTime> | |
</value> | |
</objProp> | |
<stringProp name="filename"></stringProp> | |
<boolProp name="ResultCollector.success_only_logging">true</boolProp> | |
</ResultCollector> | |
<hashTree/> | |
<ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report (errors)" enabled="true"> | |
<boolProp name="ResultCollector.error_logging">true</boolProp> | |
<objProp> | |
<name>saveConfig</name> | |
<value class="SampleSaveConfiguration"> | |
<time>true</time> | |
<latency>true</latency> | |
<timestamp>true</timestamp> | |
<success>true</success> | |
<label>true</label> | |
<code>true</code> | |
<message>true</message> | |
<threadName>true</threadName> | |
<dataType>true</dataType> | |
<encoding>false</encoding> | |
<assertions>true</assertions> | |
<subresults>true</subresults> | |
<responseData>false</responseData> | |
<samplerData>false</samplerData> | |
<xml>false</xml> | |
<fieldNames>true</fieldNames> | |
<responseHeaders>false</responseHeaders> | |
<requestHeaders>false</requestHeaders> | |
<responseDataOnError>false</responseDataOnError> | |
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> | |
<assertionsResultsToSave>0</assertionsResultsToSave> | |
<bytes>true</bytes> | |
<sentBytes>true</sentBytes> | |
<url>true</url> | |
<threadCounts>true</threadCounts> | |
<idleTime>true</idleTime> | |
<connectTime>true</connectTime> | |
</value> | |
</objProp> | |
<stringProp name="filename"></stringProp> | |
</ResultCollector> | |
<hashTree/> | |
<ResultCollector guiclass="TableVisualizer" testclass="ResultCollector" testname="View Results in Table" enabled="true"> | |
<boolProp name="ResultCollector.error_logging">false</boolProp> | |
<objProp> | |
<name>saveConfig</name> | |
<value class="SampleSaveConfiguration"> | |
<time>true</time> | |
<latency>true</latency> | |
<timestamp>true</timestamp> | |
<success>true</success> | |
<label>true</label> | |
<code>true</code> | |
<message>true</message> | |
<threadName>true</threadName> | |
<dataType>true</dataType> | |
<encoding>false</encoding> | |
<assertions>true</assertions> | |
<subresults>true</subresults> | |
<responseData>false</responseData> | |
<samplerData>false</samplerData> | |
<xml>false</xml> | |
<fieldNames>true</fieldNames> | |
<responseHeaders>false</responseHeaders> | |
<requestHeaders>false</requestHeaders> | |
<responseDataOnError>false</responseDataOnError> | |
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> | |
<assertionsResultsToSave>0</assertionsResultsToSave> | |
<bytes>true</bytes> | |
<sentBytes>true</sentBytes> | |
<url>true</url> | |
<threadCounts>true</threadCounts> | |
<idleTime>true</idleTime> | |
<connectTime>true</connectTime> | |
</value> | |
</objProp> | |
<stringProp name="filename"></stringProp> | |
</ResultCollector> | |
<hashTree/> | |
<ResultCollector guiclass="TableVisualizer" testclass="ResultCollector" testname="View Results in Table (errors)" enabled="true"> | |
<boolProp name="ResultCollector.error_logging">true</boolProp> | |
<objProp> | |
<name>saveConfig</name> | |
<value class="SampleSaveConfiguration"> | |
<time>true</time> | |
<latency>true</latency> | |
<timestamp>true</timestamp> | |
<success>true</success> | |
<label>true</label> | |
<code>true</code> | |
<message>true</message> | |
<threadName>true</threadName> | |
<dataType>true</dataType> | |
<encoding>false</encoding> | |
<assertions>true</assertions> | |
<subresults>true</subresults> | |
<responseData>false</responseData> | |
<samplerData>false</samplerData> | |
<xml>false</xml> | |
<fieldNames>true</fieldNames> | |
<responseHeaders>false</responseHeaders> | |
<requestHeaders>false</requestHeaders> | |
<responseDataOnError>false</responseDataOnError> | |
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> | |
<assertionsResultsToSave>0</assertionsResultsToSave> | |
<bytes>true</bytes> | |
<sentBytes>true</sentBytes> | |
<url>true</url> | |
<threadCounts>true</threadCounts> | |
<idleTime>true</idleTime> | |
<connectTime>true</connectTime> | |
</value> | |
</objProp> | |
<stringProp name="filename"></stringProp> | |
</ResultCollector> | |
<hashTree/> | |
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree (errors)" enabled="true"> | |
<boolProp name="ResultCollector.error_logging">true</boolProp> | |
<objProp> | |
<name>saveConfig</name> | |
<value class="SampleSaveConfiguration"> | |
<time>true</time> | |
<latency>true</latency> | |
<timestamp>true</timestamp> | |
<success>true</success> | |
<label>true</label> | |
<code>true</code> | |
<message>true</message> | |
<threadName>true</threadName> | |
<dataType>true</dataType> | |
<encoding>false</encoding> | |
<assertions>true</assertions> | |
<subresults>true</subresults> | |
<responseData>false</responseData> | |
<samplerData>false</samplerData> | |
<xml>false</xml> | |
<fieldNames>true</fieldNames> | |
<responseHeaders>false</responseHeaders> | |
<requestHeaders>false</requestHeaders> | |
<responseDataOnError>false</responseDataOnError> | |
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> | |
<assertionsResultsToSave>0</assertionsResultsToSave> | |
<bytes>true</bytes> | |
<sentBytes>true</sentBytes> | |
<url>true</url> | |
<threadCounts>true</threadCounts> | |
<idleTime>true</idleTime> | |
<connectTime>true</connectTime> | |
</value> | |
</objProp> | |
<stringProp name="filename"></stringProp> | |
</ResultCollector> | |
<hashTree/> | |
<ResultCollector guiclass="RespTimeGraphVisualizer" testclass="ResultCollector" testname="Response Time Graph" enabled="true"> | |
<boolProp name="ResultCollector.error_logging">false</boolProp> | |
<objProp> | |
<name>saveConfig</name> | |
<value class="SampleSaveConfiguration"> | |
<time>true</time> | |
<latency>true</latency> | |
<timestamp>true</timestamp> | |
<success>true</success> | |
<label>true</label> | |
<code>true</code> | |
<message>true</message> | |
<threadName>true</threadName> | |
<dataType>true</dataType> | |
<encoding>false</encoding> | |
<assertions>true</assertions> | |
<subresults>true</subresults> | |
<responseData>false</responseData> | |
<samplerData>false</samplerData> | |
<xml>false</xml> | |
<fieldNames>true</fieldNames> | |
<responseHeaders>false</responseHeaders> | |
<requestHeaders>false</requestHeaders> | |
<responseDataOnError>false</responseDataOnError> | |
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> | |
<assertionsResultsToSave>0</assertionsResultsToSave> | |
<bytes>true</bytes> | |
<sentBytes>true</sentBytes> | |
<url>true</url> | |
<threadCounts>true</threadCounts> | |
<idleTime>true</idleTime> | |
<connectTime>true</connectTime> | |
</value> | |
</objProp> | |
<stringProp name="filename"></stringProp> | |
<stringProp name="RespTimeGraph.interval">100</stringProp> | |
<boolProp name="RespTimeGraph.seriesselection">true</boolProp> | |
<boolProp name="RespTimeGraph.seriesselectioncasesensitive">true</boolProp> | |
<stringProp name="RespTimeGraph.seriesselectionmatchlabel">Transaction Controller (TC)</stringProp> | |
<boolProp name="RespTimeGraph.seriesselectionregexp">false</boolProp> | |
<intProp name="RespTimeGraph.linestrockwidth">0</intProp> | |
<boolProp name="RespTimeGraph.yaxisnumbergrouping">false</boolProp> | |
</ResultCollector> | |
<hashTree/> | |
<ResultCollector guiclass="StatGraphVisualizer" testclass="ResultCollector" testname="Aggregate Graph" enabled="true"> | |
<boolProp name="ResultCollector.error_logging">false</boolProp> | |
<objProp> | |
<name>saveConfig</name> | |
<value class="SampleSaveConfiguration"> | |
<time>true</time> | |
<latency>true</latency> | |
<timestamp>true</timestamp> | |
<success>true</success> | |
<label>true</label> | |
<code>true</code> | |
<message>true</message> | |
<threadName>true</threadName> | |
<dataType>true</dataType> | |
<encoding>false</encoding> | |
<assertions>true</assertions> | |
<subresults>true</subresults> | |
<responseData>false</responseData> | |
<samplerData>false</samplerData> | |
<xml>false</xml> | |
<fieldNames>true</fieldNames> | |
<responseHeaders>false</responseHeaders> | |
<requestHeaders>false</requestHeaders> | |
<responseDataOnError>false</responseDataOnError> | |
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage> | |
<assertionsResultsToSave>0</assertionsResultsToSave> | |
<bytes>true</bytes> | |
<sentBytes>true</sentBytes> | |
<url>true</url> | |
<threadCounts>true</threadCounts> | |
<idleTime>true</idleTime> | |
<connectTime>true</connectTime> | |
</value> | |
</objProp> | |
<stringProp name="filename"></stringProp> | |
</ResultCollector> | |
<hashTree/> | |
</hashTree> | |
</hashTree> | |
</jmeterTestPlan> |
Author
polarnik
commented
Dec 24, 2020
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment