You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2018/04/05 19:41:52 UTC
svn commit: r1828470 - in /jmeter/trunk: bin/testfiles/
src/protocol/http/org/apache/jmeter/protocol/http/sampler/
Author: pmouawad
Date: Thu Apr 5 19:41:52 2018
New Revision: 1828470
URL: http://svn.apache.org/viewvc?rev=1828470&view=rev
Log:
Bug 62260
Revert changes unrelated to issue + issue in java.
Add test case for No KeepAlive to ensure Connection: close is present
Bugzilla Id: 62260
Modified:
jmeter/trunk/bin/testfiles/TestKeepAlive.csv
jmeter/trunk/bin/testfiles/TestKeepAlive.jmx
jmeter/trunk/bin/testfiles/TestKeepAlive.xml
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java
Modified: jmeter/trunk/bin/testfiles/TestKeepAlive.csv
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/TestKeepAlive.csv?rev=1828470&r1=1828469&r2=1828470&view=diff
==============================================================================
--- jmeter/trunk/bin/testfiles/TestKeepAlive.csv (original)
+++ jmeter/trunk/bin/testfiles/TestKeepAlive.csv Thu Apr 5 19:41:52 2018
@@ -1,4 +1,5 @@
JSPP_SetProperties,200,OK,setUp Thread Group 1-1,text,true
+HTTP_Request_CLOSE,200,OK,Thread Group 1-1,text,true
HTTP-Warmup,200,OK,Thread Group 1-1,text,true
HTTP_Request_REUSE,200,OK,Thread Group 1-1,text,true
HTTP_Request_REUSE_2,200,OK,Thread Group 1-1,text,true
Modified: jmeter/trunk/bin/testfiles/TestKeepAlive.jmx
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/TestKeepAlive.jmx?rev=1828470&r1=1828469&r2=1828470&view=diff
==============================================================================
--- jmeter/trunk/bin/testfiles/TestKeepAlive.jmx (original)
+++ jmeter/trunk/bin/testfiles/TestKeepAlive.jmx Thu Apr 5 19:41:52 2018
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<jmeterTestPlan version="1.2" properties="3.2" jmeter="3.2-SNAPSHOT.20170219">
+<jmeterTestPlan version="1.2" properties="4.0" jmeter="4.1-SNAPSHOT.20180405">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
@@ -41,8 +41,6 @@
<CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
<collectionProp name="CookieManager.cookies"/>
<boolProp name="CookieManager.clearEachIteration">false</boolProp>
- <stringProp name="CookieManager.policy">standard</stringProp>
- <stringProp name="CookieManager.implementation">org.apache.jmeter.protocol.http.control.HC4CookieHandler</stringProp>
</CookieManager>
<hashTree/>
<SetupThreadGroup guiclass="SetupThreadGroupGui" testclass="SetupThreadGroup" testname="setUp Thread Group" enabled="true">
@@ -61,7 +59,7 @@
</SetupThreadGroup>
<hashTree>
<JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="JSPP_SetProperties" enabled="true">
- <stringProp name="cacheKey">0b96c24a-edf4-4258-9027-23d6b51ff3b2</stringProp>
+ <stringProp name="cacheKey">true</stringProp>
<stringProp name="filename"></stringProp>
<stringProp name="parameters"></stringProp>
<stringProp name="script">import org.apache.jmeter.util.JMeterUtils;
@@ -89,7 +87,7 @@ JMeterUtils.setProperty("httpclient
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
- <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP-Warmup" enabled="true">
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP_Request_CLOSE" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
@@ -101,174 +99,37 @@ JMeterUtils.setProperty("httpclient
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
- <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">false</boolProp>
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree>
- <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="RA_Max100" enabled="true">
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="RA_ResHeaders_Close" enabled="true">
<collectionProp name="Asserion.test_strings">
- <stringProp name="803114368">Keep-Alive: timeout=30, max=100</stringProp>
+ <stringProp name="1984252372">Connection: close</stringProp>
</collectionProp>
<stringProp name="Assertion.test_field">Assertion.response_headers</stringProp>
<boolProp name="Assertion.assume_success">false</boolProp>
<intProp name="Assertion.test_type">16</intProp>
+ <stringProp name="Assertion.custom_message"></stringProp>
</ResponseAssertion>
<hashTree/>
- <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="REE_keepAliveTimeout" enabled="true">
- <stringProp name="RegexExtractor.useHeaders">true</stringProp>
- <stringProp name="RegexExtractor.refname">keepAliveTimeout</stringProp>
- <stringProp name="RegexExtractor.regex">Keep-Alive: timeout=(.+?), max=</stringProp>
- <stringProp name="RegexExtractor.template">$1$</stringProp>
- <stringProp name="RegexExtractor.default">nv_keepAliveTimeout</stringProp>
- <stringProp name="RegexExtractor.match_number">1</stringProp>
- </RegexExtractor>
- <hashTree/>
- <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="JSPP_computeThinkTimes" enabled="true">
- <stringProp name="cacheKey">6397241f-da04-4a3f-a353-bb13a3b8d387</stringProp>
- <stringProp name="filename"></stringProp>
- <stringProp name="parameters"></stringProp>
- <stringProp name="script">int validationAfterInactivity = vars["validationAfterInactivity"].toInteger();
-int ttl = vars["ttl"].toInteger();
-int firstPause = validationAfterInactivity - 300;
-int secondPause = validationAfterInactivity + 500;
-int thirdPause = ttl-(firstPause+secondPause);
-
-vars.put("firstPause",firstPause.toString());
-vars.put("secondPause",secondPause.toString());
-vars.put("thirdPause",thirdPause.toString());</stringProp>
- <stringProp name="scriptLanguage">groovy</stringProp>
- </JSR223PreProcessor>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="RA_ReqHeaders_Close" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="1984252372">Connection: close</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.request_headers</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ <stringProp name="Assertion.custom_message"></stringProp>
+ </ResponseAssertion>
<hashTree/>
</hashTree>
- <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
- <boolProp name="LoopController.continue_forever">true</boolProp>
- <stringProp name="LoopController.loops">1</stringProp>
- </LoopController>
+ <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="SC" enabled="true"/>
<hashTree>
- <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP_Request_REUSE" enabled="true">
- <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
- <collectionProp name="Arguments.arguments"/>
- </elementProp>
- <stringProp name="HTTPSampler.domain"></stringProp>
- <stringProp name="HTTPSampler.port"></stringProp>
- <stringProp name="HTTPSampler.protocol"></stringProp>
- <stringProp name="HTTPSampler.contentEncoding"></stringProp>
- <stringProp name="HTTPSampler.path"></stringProp>
- <stringProp name="HTTPSampler.method">GET</stringProp>
- <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
- <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
- <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
- <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
- <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
- <stringProp name="HTTPSampler.connect_timeout"></stringProp>
- <stringProp name="HTTPSampler.response_timeout"></stringProp>
- </HTTPSamplerProxy>
- <hashTree>
- <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="RA_Max99" enabled="true">
- <collectionProp name="Asserion.test_strings">
- <stringProp name="-1636660815">Keep-Alive: timeout=30, max=99</stringProp>
- </collectionProp>
- <stringProp name="Assertion.test_field">Assertion.response_headers</stringProp>
- <boolProp name="Assertion.assume_success">false</boolProp>
- <intProp name="Assertion.test_type">16</intProp>
- </ResponseAssertion>
- <hashTree/>
- </hashTree>
- <TestAction guiclass="TestActionGui" testclass="TestAction" testname="WaitLessThanTestValidity" enabled="true">
- <intProp name="ActionProcessor.action">1</intProp>
- <intProp name="ActionProcessor.target">0</intProp>
- <stringProp name="ActionProcessor.duration">0</stringProp>
- </TestAction>
- <hashTree>
- <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
- <stringProp name="ConstantTimer.delay">${firstPause}</stringProp>
- </ConstantTimer>
- <hashTree/>
- </hashTree>
- <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP_Request_REUSE_2" enabled="true">
- <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
- <collectionProp name="Arguments.arguments"/>
- </elementProp>
- <stringProp name="HTTPSampler.domain"></stringProp>
- <stringProp name="HTTPSampler.port"></stringProp>
- <stringProp name="HTTPSampler.protocol"></stringProp>
- <stringProp name="HTTPSampler.contentEncoding"></stringProp>
- <stringProp name="HTTPSampler.path"></stringProp>
- <stringProp name="HTTPSampler.method">GET</stringProp>
- <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
- <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
- <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
- <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
- <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
- <stringProp name="HTTPSampler.connect_timeout"></stringProp>
- <stringProp name="HTTPSampler.response_timeout"></stringProp>
- </HTTPSamplerProxy>
- <hashTree>
- <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="RA_Max98" enabled="true">
- <collectionProp name="Asserion.test_strings">
- <stringProp name="-1636660816">Keep-Alive: timeout=30, max=98</stringProp>
- </collectionProp>
- <stringProp name="Assertion.test_field">Assertion.response_headers</stringProp>
- <boolProp name="Assertion.assume_success">false</boolProp>
- <intProp name="Assertion.test_type">16</intProp>
- </ResponseAssertion>
- <hashTree/>
- </hashTree>
- <TestAction guiclass="TestActionGui" testclass="TestAction" testname="WaitMoreThanValidity" enabled="true">
- <intProp name="ActionProcessor.action">1</intProp>
- <intProp name="ActionProcessor.target">0</intProp>
- <stringProp name="ActionProcessor.duration">0</stringProp>
- </TestAction>
- <hashTree>
- <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
- <stringProp name="ConstantTimer.delay">${secondPause}</stringProp>
- </ConstantTimer>
- <hashTree/>
- </hashTree>
- <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP_Request_REUSE_AFTER_VALIDATE" enabled="true">
- <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
- <collectionProp name="Arguments.arguments"/>
- </elementProp>
- <stringProp name="HTTPSampler.domain"></stringProp>
- <stringProp name="HTTPSampler.port"></stringProp>
- <stringProp name="HTTPSampler.protocol"></stringProp>
- <stringProp name="HTTPSampler.contentEncoding"></stringProp>
- <stringProp name="HTTPSampler.path"></stringProp>
- <stringProp name="HTTPSampler.method">GET</stringProp>
- <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
- <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
- <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
- <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
- <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
- <stringProp name="HTTPSampler.connect_timeout"></stringProp>
- <stringProp name="HTTPSampler.response_timeout"></stringProp>
- </HTTPSamplerProxy>
- <hashTree>
- <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="RA_Max97" enabled="true">
- <collectionProp name="Asserion.test_strings">
- <stringProp name="-1636660817">Keep-Alive: timeout=30, max=97</stringProp>
- </collectionProp>
- <stringProp name="Assertion.test_field">Assertion.response_headers</stringProp>
- <boolProp name="Assertion.assume_success">false</boolProp>
- <intProp name="Assertion.test_type">16</intProp>
- </ResponseAssertion>
- <hashTree/>
- </hashTree>
- <TestAction guiclass="TestActionGui" testclass="TestAction" testname="WaitMoreThanTTL" enabled="true">
- <intProp name="ActionProcessor.action">1</intProp>
- <intProp name="ActionProcessor.target">0</intProp>
- <stringProp name="ActionProcessor.duration">0</stringProp>
- </TestAction>
- <hashTree>
- <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
- <stringProp name="ConstantTimer.delay">${thirdPause}</stringProp>
- </ConstantTimer>
- <hashTree/>
- </hashTree>
- <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP_Request_NO_REUSE" enabled="true">
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP-Warmup" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
@@ -291,64 +152,251 @@ vars.put("thirdPause",thirdPau
<collectionProp name="Asserion.test_strings">
<stringProp name="803114368">Keep-Alive: timeout=30, max=100</stringProp>
</collectionProp>
- <stringProp name="TestPlan.comments">Connection has exceeded its TTL</stringProp>
<stringProp name="Assertion.test_field">Assertion.response_headers</stringProp>
<boolProp name="Assertion.assume_success">false</boolProp>
<intProp name="Assertion.test_type">16</intProp>
+ <stringProp name="Assertion.custom_message"></stringProp>
</ResponseAssertion>
<hashTree/>
- </hashTree>
- <TestAction guiclass="TestActionGui" testclass="TestAction" testname="WaitMoreThanTimeout" enabled="true">
- <intProp name="ActionProcessor.action">1</intProp>
- <intProp name="ActionProcessor.target">0</intProp>
- <stringProp name="ActionProcessor.duration">0</stringProp>
- </TestAction>
- <hashTree>
- <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
- <stringProp name="ConstantTimer.delay">${keepAliveTimeout}000</stringProp>
- </ConstantTimer>
+ <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="REE_keepAliveTimeout" enabled="true">
+ <stringProp name="RegexExtractor.useHeaders">true</stringProp>
+ <stringProp name="RegexExtractor.refname">keepAliveTimeout</stringProp>
+ <stringProp name="RegexExtractor.regex">Keep-Alive: timeout=(.+?), max=</stringProp>
+ <stringProp name="RegexExtractor.template">$1$</stringProp>
+ <stringProp name="RegexExtractor.default">nv_keepAliveTimeout</stringProp>
+ <stringProp name="RegexExtractor.match_number">1</stringProp>
+ </RegexExtractor>
+ <hashTree/>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="JSPP_computeThinkTimes" enabled="true">
+ <stringProp name="cacheKey">true</stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="script">int validationAfterInactivity = vars["validationAfterInactivity"].toInteger();
+int ttl = vars["ttl"].toInteger();
+int firstPause = validationAfterInactivity - 300;
+int secondPause = validationAfterInactivity + 500;
+int thirdPause = ttl-(firstPause+secondPause);
+
+vars.put("firstPause",firstPause.toString());
+vars.put("secondPause",secondPause.toString());
+vars.put("thirdPause",thirdPause.toString());</stringProp>
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ </JSR223PreProcessor>
<hashTree/>
</hashTree>
- <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP_Request_NO_REUSE" enabled="true">
- <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
- <collectionProp name="Arguments.arguments"/>
- </elementProp>
- <stringProp name="HTTPSampler.domain"></stringProp>
- <stringProp name="HTTPSampler.port"></stringProp>
- <stringProp name="HTTPSampler.protocol"></stringProp>
- <stringProp name="HTTPSampler.contentEncoding"></stringProp>
- <stringProp name="HTTPSampler.path"></stringProp>
- <stringProp name="HTTPSampler.method">GET</stringProp>
- <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
- <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
- <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
- <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
- <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
- <stringProp name="HTTPSampler.connect_timeout"></stringProp>
- <stringProp name="HTTPSampler.response_timeout"></stringProp>
- </HTTPSamplerProxy>
+ <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
+ <boolProp name="LoopController.continue_forever">true</boolProp>
+ <stringProp name="LoopController.loops">1</stringProp>
+ </LoopController>
<hashTree>
- <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="RA_Max100" enabled="true">
- <collectionProp name="Asserion.test_strings">
- <stringProp name="803114368">Keep-Alive: timeout=30, max=100</stringProp>
- </collectionProp>
- <stringProp name="TestPlan.comments">Connection has exceeded its TTL</stringProp>
- <stringProp name="Assertion.test_field">Assertion.response_headers</stringProp>
- <boolProp name="Assertion.assume_success">false</boolProp>
- <intProp name="Assertion.test_type">16</intProp>
- </ResponseAssertion>
- <hashTree/>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP_Request_REUSE" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments"/>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path"></stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="RA_Max99" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="-1636660815">Keep-Alive: timeout=30, max=99</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_headers</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ <stringProp name="Assertion.custom_message"></stringProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <TestAction guiclass="TestActionGui" testclass="TestAction" testname="WaitLessThanTestValidity" enabled="true">
+ <intProp name="ActionProcessor.action">1</intProp>
+ <intProp name="ActionProcessor.target">0</intProp>
+ <stringProp name="ActionProcessor.duration">0</stringProp>
+ </TestAction>
+ <hashTree>
+ <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+ <stringProp name="ConstantTimer.delay">${firstPause}</stringProp>
+ </ConstantTimer>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP_Request_REUSE_2" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments"/>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path"></stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="RA_Max98" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="-1636660816">Keep-Alive: timeout=30, max=98</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_headers</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ <stringProp name="Assertion.custom_message"></stringProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <TestAction guiclass="TestActionGui" testclass="TestAction" testname="WaitMoreThanValidity" enabled="true">
+ <intProp name="ActionProcessor.action">1</intProp>
+ <intProp name="ActionProcessor.target">0</intProp>
+ <stringProp name="ActionProcessor.duration">0</stringProp>
+ </TestAction>
+ <hashTree>
+ <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+ <stringProp name="ConstantTimer.delay">${secondPause}</stringProp>
+ </ConstantTimer>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP_Request_REUSE_AFTER_VALIDATE" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments"/>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path"></stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="RA_Max97" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="-1636660817">Keep-Alive: timeout=30, max=97</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_headers</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ <stringProp name="Assertion.custom_message"></stringProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <TestAction guiclass="TestActionGui" testclass="TestAction" testname="WaitMoreThanTTL" enabled="true">
+ <intProp name="ActionProcessor.action">1</intProp>
+ <intProp name="ActionProcessor.target">0</intProp>
+ <stringProp name="ActionProcessor.duration">0</stringProp>
+ </TestAction>
+ <hashTree>
+ <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+ <stringProp name="ConstantTimer.delay">${thirdPause}</stringProp>
+ </ConstantTimer>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP_Request_NO_REUSE" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments"/>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path"></stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="RA_Max100" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="803114368">Keep-Alive: timeout=30, max=100</stringProp>
+ </collectionProp>
+ <stringProp name="TestPlan.comments">Connection has exceeded its TTL</stringProp>
+ <stringProp name="Assertion.test_field">Assertion.response_headers</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ <stringProp name="Assertion.custom_message"></stringProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <TestAction guiclass="TestActionGui" testclass="TestAction" testname="WaitMoreThanTimeout" enabled="true">
+ <intProp name="ActionProcessor.action">1</intProp>
+ <intProp name="ActionProcessor.target">0</intProp>
+ <stringProp name="ActionProcessor.duration">0</stringProp>
+ </TestAction>
+ <hashTree>
+ <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
+ <stringProp name="ConstantTimer.delay">${keepAliveTimeout}000</stringProp>
+ </ConstantTimer>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP_Request_NO_REUSE" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments"/>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path"></stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="RA_Max100" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="803114368">Keep-Alive: timeout=30, max=100</stringProp>
+ </collectionProp>
+ <stringProp name="TestPlan.comments">Connection has exceeded its TTL</stringProp>
+ <stringProp name="Assertion.test_field">Assertion.response_headers</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ <stringProp name="Assertion.custom_message"></stringProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
</hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="RA_keepAlive" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="894172713">Connection: keep-alive</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.request_headers</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ <stringProp name="Assertion.custom_message"></stringProp>
+ </ResponseAssertion>
+ <hashTree/>
</hashTree>
- <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="RA_keepAlive" enabled="true">
- <collectionProp name="Asserion.test_strings">
- <stringProp name="894172713">Connection: keep-alive</stringProp>
- </collectionProp>
- <stringProp name="Assertion.test_field">Assertion.request_headers</stringProp>
- <boolProp name="Assertion.assume_success">false</boolProp>
- <intProp name="Assertion.test_type">16</intProp>
- </ResponseAssertion>
- <hashTree/>
</hashTree>
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
@@ -413,9 +461,5 @@ vars.put("thirdPause",thirdPau
</ResultCollector>
<hashTree/>
</hashTree>
- <WorkBench guiclass="WorkBenchGui" testclass="WorkBench" testname="WorkBench" enabled="true">
- <boolProp name="WorkBench.save">true</boolProp>
- </WorkBench>
- <hashTree/>
</hashTree>
</jmeterTestPlan>
Modified: jmeter/trunk/bin/testfiles/TestKeepAlive.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/TestKeepAlive.xml?rev=1828470&r1=1828469&r2=1828470&view=diff
==============================================================================
--- jmeter/trunk/bin/testfiles/TestKeepAlive.xml (original)
+++ jmeter/trunk/bin/testfiles/TestKeepAlive.xml Thu Apr 5 19:41:52 2018
@@ -1,6 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<testResults version="1.2">
<sample s="true" lb="JSPP_SetProperties" rc="200" rm="OK" dt="text"/>
+<httpSample s="true" lb="HTTP_Request_CLOSE" rc="200" rm="OK" dt="text">
+ <assertionResult>
+ <name>RA_ResHeaders_Close</name>
+ <failure>false</failure>
+ <error>false</error>
+ </assertionResult>
+ <assertionResult>
+ <name>RA_ReqHeaders_Close</name>
+ <failure>false</failure>
+ <error>false</error>
+ </assertionResult>
+</httpSample>
<httpSample s="true" lb="HTTP-Warmup" rc="200" rm="OK" dt="text">
<assertionResult>
<name>RA_keepAlive</name>
Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java?rev=1828470&r1=1828469&r2=1828470&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java Thu Apr 5 19:41:52 2018
@@ -1158,7 +1158,9 @@ public class HTTPHC4Impl extends HTTPHCA
// with the last request to an HTTP server. Instead, most browsers
// leave it to the server to close the connection after their
// timeout period. Leave it to the JMeter user to decide.
- if (!getUseKeepAlive()) {
+ if (getUseKeepAlive()) {
+ httpRequest.setHeader(HTTPConstants.HEADER_CONNECTION, HTTPConstants.KEEP_ALIVE);
+ } else {
httpRequest.setHeader(HTTPConstants.HEADER_CONNECTION, HTTPConstants.CONNECTION_CLOSE);
}
Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java?rev=1828470&r1=1828469&r2=1828470&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPJavaImpl.java Thu Apr 5 19:41:52 2018
@@ -185,6 +185,8 @@ public class HTTPJavaImpl extends HTTPAb
// such as "Host" and "Connection" to be passed through.
// See http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6996110
if (getUseKeepAlive()) {
+ conn.setRequestProperty(HTTPConstants.HEADER_CONNECTION, HTTPConstants.KEEP_ALIVE);
+ } else {
conn.setRequestProperty(HTTPConstants.HEADER_CONNECTION, HTTPConstants.CONNECTION_CLOSE);
}