On 6 January 2015 at 08:25, Andrey Pokhilko <[email protected]> wrote: > About modifying JMXses: > > As far as I understand how JMeter works, it applies the default (which > is "false") when no configuration property provided.
Yes, assuming that the default is correctly defined. > But then when it > saves the JMX, it writes all the properties, including those with > default values. That depends on how the code writes the values. There is a property setter that takes a default value; if the value matches the default, it removes the property instead of writing it. This is done to avoid cluttering up the JMX files, and to assist with backwards compatibiity. See for example AuthManager.setClearEachIteration(boolean clear) Note that the same constant (DEFAULT_CLEAR_VALUE) is used for both get and set. It's vital that the same value is used for get and set - and the value must never change. > I did change to JMXses since somewhere in the tests there is a check > that JMX must stay unchanged upon open and save. If I'm wrong and there > is some other way to make those tests passing, please tell it to me and > I'll roll back the undesired changes. > > Andrey Pokhilko > > On 01/06/2015 05:48 AM, sebb wrote: >> On 5 January 2015 at 19:49, <[email protected]> wrote: >>> Author: undera >>> Date: Mon Jan 5 19:49:06 2015 >>> New Revision: 1649629 >>> >>> URL: http://svn.apache.org/r1649629 >>> Log: >>> 48799 - Add connect time to output metrics >>> >>> Added: >>> >>> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/MeasuringConnectionManager.java >>> Modified: >>> jmeter/trunk/bin/jmeter.properties >>> jmeter/trunk/bin/testfiles/AssertionTestPlan.jmx >>> jmeter/trunk/bin/testfiles/AuthManagerTestPlan.jmx >>> jmeter/trunk/bin/testfiles/GenTest210.jmx >>> jmeter/trunk/bin/testfiles/GenTest27.jmx >>> jmeter/trunk/bin/testfiles/GuiTest.jmx >>> jmeter/trunk/bin/testfiles/GuiTest231.jmx >>> jmeter/trunk/bin/testfiles/HeaderManagerTestPlan.jmx >>> jmeter/trunk/bin/testfiles/InterleaveTestPlan.jmx >>> jmeter/trunk/bin/testfiles/InterleaveTestPlan2.jmx >>> jmeter/trunk/bin/testfiles/LoopTestPlan.jmx >>> jmeter/trunk/bin/testfiles/OnceOnlyTestPlan.jmx >>> jmeter/trunk/bin/testfiles/SimpleTestPlan.jmx >>> >>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java >>> >>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/TableVisualizer.java >>> >>> jmeter/trunk/src/core/org/apache/jmeter/control/TransactionController.java >>> jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties >>> jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java >>> >>> jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java >>> >>> jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java >>> jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java >>> >>> jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java >>> jmeter/trunk/src/core/org/apache/jmeter/visualizers/TableSample.java >>> >>> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java >>> >>> jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java >>> jmeter/trunk/xdocs/changes.xml >>> jmeter/trunk/xdocs/usermanual/glossary.xml >>> jmeter/trunk/xdocs/usermanual/listeners.xml >>> >>> Modified: jmeter/trunk/bin/jmeter.properties >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/bin/jmeter.properties?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/bin/jmeter.properties (original) >>> +++ jmeter/trunk/bin/jmeter.properties Mon Jan 5 19:49:06 2015 >>> @@ -465,6 +465,7 @@ log_level.jorphan=INFO >>> #jmeter.save.saveservice.subresults=true >>> #jmeter.save.saveservice.assertions=true >>> #jmeter.save.saveservice.latency=true >>> +#jmeter.save.saveservice.connect_time=false >>> #jmeter.save.saveservice.samplerData=false >>> #jmeter.save.saveservice.responseHeaders=false >>> #jmeter.save.saveservice.requestHeaders=false >>> >>> Modified: jmeter/trunk/bin/testfiles/AssertionTestPlan.jmx >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/AssertionTestPlan.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/bin/testfiles/AssertionTestPlan.jmx (original) >>> +++ jmeter/trunk/bin/testfiles/AssertionTestPlan.jmx Mon Jan 5 19:49:06 >>> 2015 >> -1 to this change. >> Similarly for the other JMX files. >> >> The code needs to be set up to default to false if the tag is not present. >> >>> @@ -60,6 +60,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -91,6 +92,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> >>> Modified: jmeter/trunk/bin/testfiles/AuthManagerTestPlan.jmx >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/AuthManagerTestPlan.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/bin/testfiles/AuthManagerTestPlan.jmx (original) >>> +++ jmeter/trunk/bin/testfiles/AuthManagerTestPlan.jmx Mon Jan 5 19:49:06 >>> 2015 >>> @@ -106,6 +106,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> >>> Modified: jmeter/trunk/bin/testfiles/GenTest210.jmx >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/GenTest210.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/bin/testfiles/GenTest210.jmx (original) >>> +++ jmeter/trunk/bin/testfiles/GenTest210.jmx Mon Jan 5 19:49:06 2015 >>> @@ -970,6 +970,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1002,6 +1003,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1034,6 +1036,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1080,6 +1083,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1112,6 +1116,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1146,6 +1151,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1186,6 +1192,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1227,6 +1234,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1259,6 +1267,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1299,6 +1308,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1331,6 +1341,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1363,6 +1374,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1395,6 +1407,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1427,6 +1440,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> >>> Modified: jmeter/trunk/bin/testfiles/GenTest27.jmx >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/GenTest27.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/bin/testfiles/GenTest27.jmx (original) >>> +++ jmeter/trunk/bin/testfiles/GenTest27.jmx Mon Jan 5 19:49:06 2015 >>> @@ -942,6 +942,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -974,6 +975,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1006,6 +1008,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1052,6 +1055,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1084,6 +1088,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1118,6 +1123,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1157,6 +1163,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1198,6 +1205,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1238,6 +1246,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1270,6 +1279,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1302,6 +1312,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1334,6 +1345,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1366,6 +1378,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> >>> Modified: jmeter/trunk/bin/testfiles/GuiTest.jmx >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/GuiTest.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/bin/testfiles/GuiTest.jmx (original) >>> +++ jmeter/trunk/bin/testfiles/GuiTest.jmx Mon Jan 5 19:49:06 2015 >>> @@ -189,6 +189,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -220,6 +221,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -251,6 +253,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -282,6 +285,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -313,6 +317,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -344,6 +349,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -375,6 +381,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> >>> Modified: jmeter/trunk/bin/testfiles/GuiTest231.jmx >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/GuiTest231.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/bin/testfiles/GuiTest231.jmx (original) >>> +++ jmeter/trunk/bin/testfiles/GuiTest231.jmx Mon Jan 5 19:49:06 2015 >>> @@ -787,6 +787,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -825,6 +826,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -857,6 +859,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -889,6 +892,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -930,6 +934,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -962,6 +967,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -994,6 +1000,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1026,6 +1033,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1058,6 +1066,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1090,6 +1099,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1122,6 +1132,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> @@ -1154,6 +1165,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> >>> Modified: jmeter/trunk/bin/testfiles/HeaderManagerTestPlan.jmx >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/HeaderManagerTestPlan.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/bin/testfiles/HeaderManagerTestPlan.jmx (original) >>> +++ jmeter/trunk/bin/testfiles/HeaderManagerTestPlan.jmx Mon Jan 5 >>> 19:49:06 2015 >>> @@ -59,6 +59,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> >>> Modified: jmeter/trunk/bin/testfiles/InterleaveTestPlan.jmx >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/InterleaveTestPlan.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/bin/testfiles/InterleaveTestPlan.jmx (original) >>> +++ jmeter/trunk/bin/testfiles/InterleaveTestPlan.jmx Mon Jan 5 19:49:06 >>> 2015 >>> @@ -99,6 +99,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> >>> Modified: jmeter/trunk/bin/testfiles/InterleaveTestPlan2.jmx >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/InterleaveTestPlan2.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/bin/testfiles/InterleaveTestPlan2.jmx (original) >>> +++ jmeter/trunk/bin/testfiles/InterleaveTestPlan2.jmx Mon Jan 5 19:49:06 >>> 2015 >>> @@ -126,6 +126,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> >>> Modified: jmeter/trunk/bin/testfiles/LoopTestPlan.jmx >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/LoopTestPlan.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/bin/testfiles/LoopTestPlan.jmx (original) >>> +++ jmeter/trunk/bin/testfiles/LoopTestPlan.jmx Mon Jan 5 19:49:06 2015 >>> @@ -83,6 +83,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> >>> Modified: jmeter/trunk/bin/testfiles/OnceOnlyTestPlan.jmx >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/OnceOnlyTestPlan.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/bin/testfiles/OnceOnlyTestPlan.jmx (original) >>> +++ jmeter/trunk/bin/testfiles/OnceOnlyTestPlan.jmx Mon Jan 5 19:49:06 2015 >>> @@ -80,6 +80,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> >>> Modified: jmeter/trunk/bin/testfiles/SimpleTestPlan.jmx >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/SimpleTestPlan.jmx?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/bin/testfiles/SimpleTestPlan.jmx (original) >>> +++ jmeter/trunk/bin/testfiles/SimpleTestPlan.jmx Mon Jan 5 19:49:06 2015 >>> @@ -117,6 +117,7 @@ >>> <value class="SampleSaveConfiguration"> >>> <time>true</time> >>> <latency>true</latency> >>> + <connectTime>false</connectTime> >>> <timestamp>true</timestamp> >>> <success>true</success> >>> <label>true</label> >>> >>> Modified: >>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- >>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java >>> (original) >>> +++ >>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/SamplerResultTab.java >>> Mon Jan 5 19:49:06 2015 >>> @@ -229,6 +229,7 @@ public abstract class SamplerResultTab i >>> String startTime = dateFormat.format(new >>> Date(sampleResult.getStartTime())); >>> >>> statsBuff.append(JMeterUtils.getResString("view_results_sample_start")).append(startTime).append(NL); >>> //$NON-NLS-1$ >>> >>> statsBuff.append(JMeterUtils.getResString("view_results_load_time")).append(sampleResult.getTime()).append(NL); >>> //$NON-NLS-1$ >>> + >>> statsBuff.append(JMeterUtils.getResString("view_results_connect_time")).append(sampleResult.getConnectTime()).append(NL); >>> //$NON-NLS-1$ >>> >>> statsBuff.append(JMeterUtils.getResString("view_results_latency")).append(sampleResult.getLatency()).append(NL); >>> //$NON-NLS-1$ >>> >>> statsBuff.append(JMeterUtils.getResString("view_results_size_in_bytes")).append(sampleResult.getBytes()).append(NL); >>> //$NON-NLS-1$ >>> >>> statsBuff.append(JMeterUtils.getResString("view_results_size_headers_in_bytes")).append(sampleResult.getHeadersSize()).append(NL); >>> //$NON-NLS-1$ >>> >>> Modified: >>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/TableVisualizer.java >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/visualizers/TableVisualizer.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- >>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/TableVisualizer.java >>> (original) >>> +++ >>> jmeter/trunk/src/components/org/apache/jmeter/visualizers/TableVisualizer.java >>> Mon Jan 5 19:49:06 2015 >>> @@ -81,7 +81,8 @@ public class TableVisualizer extends Abs >>> "table_visualizer_sample_time", // $NON-NLS-1$ >>> "table_visualizer_status", // $NON-NLS-1$ >>> "table_visualizer_bytes", // $NON-NLS-1$ >>> - "table_visualizer_latency"}; // $NON-NLS-1$ >>> + "table_visualizer_latency", // $NON-NLS-1$ >>> + "table_visualizer_connect"}; // $NON-NLS-1$ >>> >>> private ObjectTableModel model = null; >>> >>> @@ -125,18 +126,19 @@ public class TableVisualizer extends Abs >>> model = new ObjectTableModel(COLUMNS, >>> TableSample.class, // The object used for each row >>> new Functor[] { >>> - new Functor("getSampleNumberString"), // $NON-NLS-1$ >>> - new Functor("getStartTimeFormatted", // $NON-NLS-1$ >>> + new Functor("getSampleNumberString"), // $NON-NLS-1$ >>> + new Functor("getStartTimeFormatted", // $NON-NLS-1$ >>> new Object[]{format}), >>> - new Functor("getThreadName"), // $NON-NLS-1$ >>> - new Functor("getLabel"), // $NON-NLS-1$ >>> - new Functor("getElapsed"), // $NON-NLS-1$ >>> + new Functor("getThreadName"), // $NON-NLS-1$ >>> + new Functor("getLabel"), // $NON-NLS-1$ >>> + new Functor("getElapsed"), // $NON-NLS-1$ >>> new SampleSuccessFunctor("isSuccess"), // $NON-NLS-1$ >>> - new Functor("getBytes"), // $NON-NLS-1$ >>> - new Functor("getLatency") }, // $NON-NLS-1$ >>> - new Functor[] { null, null, null, null, null, null, null, >>> null }, >>> + new Functor("getBytes"), // $NON-NLS-1$ >>> + new Functor("getLatency"), // $NON-NLS-1$ >>> + new Functor("getConnectTime") }, // $NON-NLS-1$ >>> + new Functor[] { null, null, null, null, null, null, null, >>> null, null }, >>> new Class[] { >>> - String.class, String.class, String.class, String.class, >>> Long.class, ImageIcon.class, Long.class, Long.class }); >>> + String.class, String.class, String.class, String.class, >>> Long.class, ImageIcon.class, Long.class, Long.class, Long.class }); >>> init(); >>> } >>> >>> @@ -188,7 +190,9 @@ public class TableVisualizer extends Abs >>> res.getTime(), >>> res.isSuccessful(), >>> res.getBytes(), >>> - res.getLatency()); >>> + res.getLatency(), >>> + res.getConnectTime() >>> + ); >>> model.addRow(newS); >>> } >>> updateTextFields(res); >>> >>> Modified: >>> jmeter/trunk/src/core/org/apache/jmeter/control/TransactionController.java >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/control/TransactionController.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- >>> jmeter/trunk/src/core/org/apache/jmeter/control/TransactionController.java >>> (original) >>> +++ >>> jmeter/trunk/src/core/org/apache/jmeter/control/TransactionController.java >>> Mon Jan 5 19:49:06 2015 >>> @@ -291,6 +291,7 @@ public class TransactionController exten >>> res.setAllThreads(sampleResult.getAllThreads()); >>> res.setGroupThreads(sampleResult.getGroupThreads()); >>> res.setLatency(res.getLatency() + >>> sampleResult.getLatency()); >>> + res.setConnectTime(res.getConnectTime() + >>> sampleResult.getConnectTime()); >>> } >>> } >>> } >>> >>> Modified: >>> jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties >>> (original) >>> +++ jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties >>> Mon Jan 5 19:49:06 2015 >>> @@ -906,6 +906,7 @@ save_hostname=Save Hostname >>> save_idletime=Save Idle Time >>> save_label=Save Label >>> save_latency=Save Latency >>> +save_connecttime=Save Connect Time >>> save_message=Save Response Message >>> save_overwrite_existing_file=The selected file already exists, do you want >>> to overwrite it? >>> save_requestheaders=Save Request Headers (XML) >>> @@ -1072,6 +1073,7 @@ system_sampler_stdout=Standard output (s >>> system_sampler_title=OS Process Sampler >>> table_visualizer_bytes=Bytes >>> table_visualizer_latency=Latency >>> +table_visualizer_connect=Connect >>> table_visualizer_sample_num=Sample # >>> table_visualizer_sample_time=Sample Time(ms) >>> table_visualizer_start_time=Start Time >>> @@ -1196,6 +1198,7 @@ view_results_error_count=Error Count: >>> view_results_fields=fields: >>> view_results_in_table=View Results in Table >>> view_results_latency=Latency: >>> +view_results_connect_time=Connect Time: >>> view_results_load_time=Load time: >>> view_results_render=Render: >>> view_results_render_document=Document >>> >>> Modified: jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java >>> (original) >>> +++ jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleResult.java Mon >>> Jan 5 19:49:06 2015 >>> @@ -178,7 +178,12 @@ public class SampleResult implements Ser >>> >>> /** time to first response */ >>> private long latency = 0; >>> - >>> + >>> + /** >>> + * time to end connecting >>> + */ >>> + private long connectTime = 0; >>> + >>> /** Should thread start next iteration ? */ >>> private boolean startNextThreadLoop = false; >>> >>> @@ -301,6 +306,7 @@ public class SampleResult implements Ser >>> isMonitor = res.isMonitor; >>> label = res.label;//OK >>> latency = res.latency; >>> + connectTime = res.connectTime; >>> location = res.location;//OK >>> parent = res.parent; // TODO ?? >>> pauseTime = res.pauseTime; >>> @@ -1207,6 +1213,29 @@ public class SampleResult implements Ser >>> } >>> >>> /** >>> + * @return Returns the connect time. >>> + */ >>> + public long getConnectTime() { >>> + return connectTime; >>> + } >>> + >>> + /** >>> + * Set the time to the end of connecting >>> + */ >>> + public void connectEnd() { >>> + connectTime = currentTimeInMillis() - startTime - idleTime; >>> + } >>> + >>> + /** >>> + * This is only intended for use by SampleResultConverter! >>> + * >>> + * @param time The connect time to set. >>> + */ >>> + public void setConnectTime(long time) { >>> + this.connectTime = time; >>> + } >>> + >>> + /** >>> * This is only intended for use by SampleResultConverter! >>> * >>> * @param timeStamp >>> >>> Modified: >>> jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- >>> jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java >>> (original) >>> +++ >>> jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSaveConfiguration.java >>> Mon Jan 5 19:49:06 2015 >>> @@ -198,6 +198,7 @@ public class SampleSaveConfiguration imp >>> private static final String SUBRESULTS_PROP = >>> "jmeter.save.saveservice.subresults"; // $NON_NLS-1$ >>> private static final String ASSERTIONS_PROP = >>> "jmeter.save.saveservice.assertions"; // $NON_NLS-1$ >>> private static final String LATENCY_PROP = >>> "jmeter.save.saveservice.latency"; // $NON_NLS-1$ >>> + private static final String CONNECT_TIME_PROP = >>> "jmeter.save.saveservice.connect_time"; // $NON_NLS-1$ >>> private static final String SAMPLERDATA_PROP = >>> "jmeter.save.saveservice.samplerData"; // $NON_NLS-1$ >>> private static final String RESPONSEHEADERS_PROP = >>> "jmeter.save.saveservice.responseHeaders"; // $NON_NLS-1$ >>> private static final String REQUESTHEADERS_PROP = >>> "jmeter.save.saveservice.requestHeaders"; // $NON_NLS-1$ >>> @@ -216,7 +217,7 @@ public class SampleSaveConfiguration imp >>> // N.B. Remember to update the equals and hashCode methods when adding >>> new variables. >>> >>> // Initialise values from properties >>> - private boolean time = _time, latency = _latency, timestamp = >>> _timestamp, success = _success, label = _label, >>> + private boolean time = _time, latency = _latency, >>> connectTime=_connectTime, timestamp = _timestamp, success = _success, label >>> = _label, >>> code = _code, message = _message, threadName = _threadName, >>> dataType = _dataType, encoding = _encoding, >>> assertions = _assertions, subresults = _subresults, >>> responseData = _responseData, >>> samplerData = _samplerData, xml = _xml, fieldNames = >>> _fieldNames, responseHeaders = _responseHeaders, >>> @@ -250,7 +251,7 @@ public class SampleSaveConfiguration imp >>> >>> // Defaults from properties: >>> private static final boolean _time, _timestamp, _success, _label, >>> _code, _message, _threadName, _xml, >>> - _responseData, _dataType, _encoding, _assertions, _latency, >>> _subresults, _samplerData, _fieldNames, >>> + _responseData, _dataType, _encoding, _assertions, _latency, >>> _connectTime, _subresults, _samplerData, _fieldNames, >>> _responseHeaders, _requestHeaders; >>> >>> private static final boolean _responseDataOnError; >>> @@ -303,6 +304,7 @@ public class SampleSaveConfiguration imp >>> _subresults = >>> TRUE.equalsIgnoreCase(props.getProperty(SUBRESULTS_PROP, TRUE)); >>> _assertions = >>> TRUE.equalsIgnoreCase(props.getProperty(ASSERTIONS_PROP, TRUE)); >>> _latency = >>> TRUE.equalsIgnoreCase(props.getProperty(LATENCY_PROP, TRUE)); >>> + _connectTime = >>> TRUE.equalsIgnoreCase(props.getProperty(CONNECT_TIME_PROP, FALSE)); >>> _samplerData = >>> TRUE.equalsIgnoreCase(props.getProperty(SAMPLERDATA_PROP, FALSE)); >>> _responseHeaders = >>> TRUE.equalsIgnoreCase(props.getProperty(RESPONSEHEADERS_PROP, FALSE)); >>> _requestHeaders = >>> TRUE.equalsIgnoreCase(props.getProperty(REQUESTHEADERS_PROP, FALSE)); >>> @@ -441,6 +443,7 @@ public class SampleSaveConfiguration imp >>> hostname = value; >>> label = value; >>> latency = value; >>> + connectTime = value; >>> message = value; >>> printMilliseconds = _printMilliseconds;//is derived from >>> properties only >>> requestHeaders = value; >>> @@ -491,6 +494,7 @@ public class SampleSaveConfiguration imp >>> SampleSaveConfiguration s = (SampleSaveConfiguration)obj; >>> boolean primitiveValues = s.time == time && >>> s.latency == latency && >>> + s.connectTime == connectTime && >>> s.timestamp == timestamp && >>> s.success == success && >>> s.label == label && >>> @@ -536,6 +540,7 @@ public class SampleSaveConfiguration imp >>> int hash = 7; >>> hash = 31 * hash + (time ? 1 : 0); >>> hash = 31 * hash + (latency ? 1 : 0); >>> + hash = 31 * hash + (connectTime ? 1 : 0); >>> hash = 31 * hash + (timestamp ? 1 : 0); >>> hash = 31 * hash + (success ? 1 : 0); >>> hash = 31 * hash + (label ? 1 : 0); >>> @@ -635,6 +640,14 @@ public class SampleSaveConfiguration imp >>> this.latency = latency; >>> } >>> >>> + public boolean saveConnectTime() { >>> + return connectTime; >>> + } >>> + >>> + public void setConnectTime(boolean connectTime) { >>> + this.connectTime = connectTime; >>> + } >>> + >>> public boolean saveMessage() { >>> return message; >>> } >>> >>> Modified: >>> jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- >>> jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java >>> (original) >>> +++ >>> jmeter/trunk/src/core/org/apache/jmeter/samplers/StatisticalSampleResult.java >>> Mon Jan 5 19:49:06 2015 >>> @@ -101,6 +101,7 @@ public class StatisticalSampleResult ext >>> this.setEndTime(Math.max(getEndTime(), res.getEndTime())); >>> >>> setLatency(getLatency()+ res.getLatency()); >>> + setConnectTime(getConnectTime()+ res.getConnectTime()); >>> >>> elapsed += res.getTime(); >>> } >>> >>> Modified: jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java >>> (original) >>> +++ jmeter/trunk/src/core/org/apache/jmeter/save/CSVSaveService.java Mon >>> Jan 5 19:49:06 2015 >>> @@ -87,6 +87,7 @@ public final class CSVSaveService { >>> private static final String CSV_URL = "URL"; // $NON-NLS-1$ >>> private static final String CSV_FILENAME = "Filename"; // $NON-NLS-1$ >>> private static final String CSV_LATENCY = "Latency"; // $NON-NLS-1$ >>> + private static final String CSV_CONNECT_TIME = "Connect"; // >>> $NON-NLS-1$ >>> private static final String CSV_ENCODING = "Encoding"; // $NON-NLS-1$ >>> private static final String CSV_HOSTNAME = "Hostname"; // $NON-NLS-1$ >>> private static final String CSV_IDLETIME = "IdleTime"; // $NON-NLS-1$ >>> @@ -350,6 +351,11 @@ public final class CSVSaveService { >>> text = parts[i++]; >>> result.setIdleTime(Long.parseLong(text)); >>> } >>> + if (saveConfig.saveConnectTime()) { >>> + field = CSV_CONNECT_TIME; >>> + text = parts[i++]; >>> + result.setConnectTime(Long.parseLong(text)); >>> + } >>> >>> if (i + saveConfig.getVarCount() < parts.length) { >>> log.warn("Line: " + lineNumber + ". Found " + parts.length >>> @@ -488,6 +494,11 @@ public final class CSVSaveService { >>> text.append(delim); >>> } >>> >>> + if (saveConfig.saveConnectTime()) { >>> + text.append(CSV_CONNECT_TIME); >>> + text.append(delim); >>> + } >>> + >>> for (int i = 0; i < SampleEvent.getVarCount(); i++) { >>> text.append(VARIABLE_NAME_QUOTE_CHAR); >>> text.append(SampleEvent.getVarName(i)); >>> @@ -541,6 +552,7 @@ public final class CSVSaveService { >>> headerLabelMethods.put(CSV_ERROR_COUNT, new >>> Functor("setSampleCount")); >>> headerLabelMethods.put(CSV_HOSTNAME, new Functor("setHostname")); >>> headerLabelMethods.put(CSV_IDLETIME, new Functor("setIdleTime")); >>> + headerLabelMethods.put(CSV_CONNECT_TIME, new >>> Functor("setConnectTime")); >>> } >>> >>> /** >>> @@ -951,6 +963,10 @@ public final class CSVSaveService { >>> text.append(event.getResult().getIdleTime()); >>> } >>> >>> + if (saveConfig.saveConnectTime()) { >>> + text.append(sample.getConnectTime()); >>> + } >>> + >>> for (int i = 0; i < SampleEvent.getVarCount(); i++) { >>> text.append(event.getVarValue(i)); >>> } >>> >>> Modified: >>> jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- >>> jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java >>> (original) >>> +++ >>> jmeter/trunk/src/core/org/apache/jmeter/save/converters/SampleResultConverter.java >>> Mon Jan 5 19:49:06 2015 >>> @@ -77,6 +77,7 @@ public class SampleResultConverter exten >>> private static final String ATT_HOSTNAME = "hn"; //$NON-NLS-1$ >>> private static final String ATT_LABEL = "lb"; //$NON-NLS-1$ >>> private static final String ATT_LATENCY = "lt"; //$NON-NLS-1$ >>> + private static final String ATT_CONNECT_TIME = "ct"; //$NON-NLS-1$ >>> >>> private static final String ATT_ALL_THRDS = "na"; //$NON-NLS-1$ >>> private static final String ATT_GRP_THRDS = "ng"; //$NON-NLS-1$ >>> @@ -291,6 +292,9 @@ public class SampleResultConverter exten >>> if (save.saveLatency()) { >>> writer.addAttribute(ATT_LATENCY, >>> Long.toString(res.getLatency())); >>> } >>> + if (save.saveConnectTime()) { >>> + writer.addAttribute(ATT_CONNECT_TIME, >>> Long.toString(res.getConnectTime())); >>> + } >>> if (save.saveTimestamp()) { >>> writer.addAttribute(ATT_TIME_STAMP, >>> Long.toString(res.getTimeStamp())); >>> } >>> @@ -441,6 +445,7 @@ public class SampleResultConverter exten >>> Converter.getLong(reader.getAttribute(ATT_TIME))); >>> >>> res.setIdleTime(Converter.getLong(reader.getAttribute(ATT_IDLETIME))); >>> >>> res.setLatency(Converter.getLong(reader.getAttribute(ATT_LATENCY))); >>> + >>> res.setConnectTime(Converter.getLong(reader.getAttribute(ATT_CONNECT_TIME))); >>> res.setBytes(Converter.getInt(reader.getAttribute(ATT_BYTES))); >>> >>> res.setSampleCount(Converter.getInt(reader.getAttribute(ATT_SAMPLE_COUNT),1)); >>> // default is 1 >>> >>> res.setErrorCount(Converter.getInt(reader.getAttribute(ATT_ERROR_COUNT),0)); >>> // default is 0 >>> >>> Modified: >>> jmeter/trunk/src/core/org/apache/jmeter/visualizers/TableSample.java >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/visualizers/TableSample.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/src/core/org/apache/jmeter/visualizers/TableSample.java >>> (original) >>> +++ jmeter/trunk/src/core/org/apache/jmeter/visualizers/TableSample.java >>> Mon Jan 5 19:49:06 2015 >>> @@ -46,17 +46,19 @@ public class TableSample implements Seri >>> >>> private final long latency; >>> >>> + private final long connect; >>> + >>> /** >>> * @deprecated for unit test code only >>> */ >>> @Deprecated >>> public TableSample() { >>> - this(0, 1, 0, "", "", 0, true, 0, 0); >>> + this(0, 1, 0, "", "", 0, true, 0, 0, 0); >>> } >>> >>> public TableSample(long totalSamples, int sampleCount, long startTime, >>> String threadName, >>> String label, >>> - long elapsed, boolean success, long bytes, long latency) { >>> + long elapsed, boolean success, long bytes, long latency, long >>> connect) { >>> this.totalSamples = totalSamples; >>> this.sampleCount = sampleCount; >>> this.startTime = startTime; >>> @@ -67,6 +69,7 @@ public class TableSample implements Seri >>> this.bytes = (sampleCount > 0) ? bytes/sampleCount : 0; >>> this.success = success; >>> this.latency = latency; >>> + this.connect = connect; >>> } >>> >>> // The following getters may appear not to be used - however they are >>> invoked via the Functor class >>> @@ -142,4 +145,10 @@ public class TableSample implements Seri >>> return latency; >>> } >>> >>> + /** >>> + * @return the conneect time >>> + */ >>> + public long getConnectTime() { >>> + return connect; >>> + } >>> } >>> >>> 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=1649629&r1=1649628&r2=1649629&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 >>> Mon Jan 5 19:49:06 2015 >>> @@ -73,6 +73,7 @@ import org.apache.http.client.methods.Ht >>> import org.apache.http.client.params.ClientPNames; >>> import org.apache.http.client.params.CookiePolicy; >>> import org.apache.http.client.protocol.ResponseContentEncoding; >>> +import org.apache.http.conn.ClientConnectionManager; >>> import org.apache.http.conn.ConnectionKeepAliveStrategy; >>> import org.apache.http.conn.DnsResolver; >>> import org.apache.http.conn.params.ConnRoutePNames; >>> @@ -90,7 +91,6 @@ import org.apache.http.impl.client.Abstr >>> import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy; >>> import org.apache.http.impl.client.DefaultHttpClient; >>> import org.apache.http.impl.client.DefaultHttpRequestRetryHandler; >>> -import org.apache.http.impl.conn.PoolingClientConnectionManager; >>> import org.apache.http.impl.conn.SchemeRegistryFactory; >>> import org.apache.http.impl.conn.SystemDefaultDnsResolver; >>> import org.apache.http.message.BasicNameValuePair; >>> @@ -123,6 +123,7 @@ import org.apache.jmeter.util.JsseSSLMan >>> import org.apache.jmeter.util.SSLManager; >>> import org.apache.jorphan.logging.LoggingManager; >>> import org.apache.log.Logger; >>> +import org.htmlparser.http.ConnectionManager; >>> >>> /** >>> * HTTP Sampler using Apache HttpClient 4.x. >>> @@ -654,10 +655,9 @@ public class HTTPHC4Impl extends HTTPHCA >>> if (resolver == null) { >>> resolver = new SystemDefaultDnsResolver(); >>> } >>> - PoolingClientConnectionManager poolingClientConnectionManager >>> = new PoolingClientConnectionManager( >>> - SchemeRegistryFactory.createDefault(), resolver); >>> + ClientConnectionManager connManager = new >>> MeasuringConnectionManager(SchemeRegistryFactory.createDefault(), resolver); >>> >>> - httpClient = new >>> DefaultHttpClient(poolingClientConnectionManager, clientParams) { >>> + httpClient = new DefaultHttpClient(connManager, clientParams) { >>> @Override >>> protected HttpRequestRetryHandler >>> createHttpRequestRetryHandler() { >>> return new DefaultHttpRequestRetryHandler(RETRY_COUNT, >>> false); // set retry count >>> >>> Added: >>> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/MeasuringConnectionManager.java >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/MeasuringConnectionManager.java?rev=1649629&view=auto >>> ============================================================================== >>> --- >>> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/MeasuringConnectionManager.java >>> (added) >>> +++ >>> jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/MeasuringConnectionManager.java >>> Mon Jan 5 19:49:06 2015 >>> @@ -0,0 +1,268 @@ >>> +/* >>> + * Licensed to the Apache Software Foundation (ASF) under one or more >>> + * contributor license agreements. See the NOTICE file distributed with >>> + * this work for additional information regarding copyright ownership. >>> + * The ASF licenses this file to You under the Apache License, Version 2.0 >>> + * (the "License"); you may not use this file except in compliance with >>> + * the License. You may obtain a copy of the License at >>> + * >>> + * http://www.apache.org/licenses/LICENSE-2.0 >>> + * >>> + * Unless required by applicable law or agreed to in writing, software >>> + * distributed under the License is distributed on an "AS IS" BASIS, >>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. >>> + * See the License for the specific language governing permissions and >>> + * limitations under the License. >>> + * >>> + */ >>> + >>> +package org.apache.jmeter.protocol.http.sampler; >>> + >>> +import org.apache.http.HttpConnectionMetrics; >>> +import org.apache.http.HttpException; >>> +import org.apache.http.HttpHost; >>> +import org.apache.http.HttpResponse; >>> +import org.apache.http.HttpRequest; >>> +import org.apache.http.HttpEntityEnclosingRequest; >>> +import org.apache.http.conn.ClientConnectionRequest; >>> +import org.apache.http.conn.ConnectionPoolTimeoutException; >>> +import org.apache.http.conn.DnsResolver; >>> +import org.apache.http.conn.ManagedClientConnection; >>> +import org.apache.http.conn.routing.HttpRoute; >>> +import org.apache.http.conn.scheme.SchemeRegistry; >>> +import org.apache.http.impl.conn.PoolingClientConnectionManager; >>> +import org.apache.http.params.HttpParams; >>> +import org.apache.http.protocol.HttpContext; >>> +import org.apache.jmeter.samplers.SampleResult; >>> + >>> +import javax.net.ssl.SSLSession; >>> +import java.io.IOException; >>> +import java.net.InetAddress; >>> +import java.util.concurrent.TimeUnit; >>> + >>> +/** >>> + * Adapter for {@link PoolingClientConnectionManager} >>> + * that wraps all connection requests into time-measured implementation >>> {@link MeasuringConnectionRequest} >>> + */ >>> +public class MeasuringConnectionManager extends >>> PoolingClientConnectionManager { >>> + >>> + private MeasuringConnectionRequest measuredConnection; >>> + private SampleResult sample; >>> + >>> + public MeasuringConnectionManager(SchemeRegistry aDefault, DnsResolver >>> resolver) { >>> + super(aDefault, resolver); >>> + } >>> + >>> + @Override >>> + public ClientConnectionRequest requestConnection(final HttpRoute >>> route, final Object state) { >>> + ClientConnectionRequest res = super.requestConnection(route, >>> state); >>> + this.measuredConnection = new MeasuringConnectionRequest(res, >>> this.sample); >>> + return this.measuredConnection; >>> + } >>> + >>> + public void setSample(SampleResult sample) { >>> + this.sample = sample; >>> + } >>> + >>> + /** >>> + * And adapter class to pass {@link SampleResult} into {@link >>> MeasuredConnection} >>> + */ >>> + private static class MeasuringConnectionRequest implements >>> ClientConnectionRequest { >>> + private final ClientConnectionRequest handler; >>> + private final SampleResult sample; >>> + >>> + public MeasuringConnectionRequest(ClientConnectionRequest res, >>> SampleResult sample) { >>> + handler = res; >>> + this.sample = sample; >>> + } >>> + >>> + @Override >>> + public ManagedClientConnection getConnection(long timeout, >>> TimeUnit tunit) throws InterruptedException, ConnectionPoolTimeoutException >>> { >>> + ManagedClientConnection res = handler.getConnection(timeout, >>> tunit); >>> + return new MeasuredConnection(res, this.sample); >>> + } >>> + >>> + @Override >>> + public void abortRequest() { >>> + handler.abortRequest(); >>> + } >>> + } >>> + >>> + /** >>> + * An adapter for {@link ManagedClientConnection} >>> + * that calls SampleResult.connectEnd after calling >>> ManagedClientConnection.open >>> + */ >>> + private static class MeasuredConnection implements >>> ManagedClientConnection { >>> + private final ManagedClientConnection handler; >>> + private final SampleResult sample; >>> + >>> + public MeasuredConnection(ManagedClientConnection res, >>> SampleResult sample) { >>> + handler = res; >>> + this.sample = sample; >>> + } >>> + >>> + @Override >>> + public void open(HttpRoute route, HttpContext context, HttpParams >>> params) throws IOException { >>> + handler.open(route, context, params); >>> + if (sample != null) { >>> + sample.connectEnd(); >>> + } >>> + } >>> + >>> + // ================= all following methods just wraps handler's >>> ================= >>> + @Override >>> + public boolean isSecure() { >>> + return handler.isSecure(); >>> + } >>> + >>> + @Override >>> + public HttpRoute getRoute() { >>> + return handler.getRoute(); >>> + } >>> + >>> + @Override >>> + public SSLSession getSSLSession() { >>> + return handler.getSSLSession(); >>> + } >>> + >>> + @Override >>> + public void tunnelTarget(boolean secure, HttpParams params) throws >>> IOException { >>> + handler.tunnelTarget(secure, params); >>> + } >>> + >>> + @Override >>> + public void tunnelProxy(HttpHost next, boolean secure, HttpParams >>> params) throws IOException { >>> + handler.tunnelProxy(next, secure, params); >>> + } >>> + >>> + @Override >>> + public void layerProtocol(HttpContext context, HttpParams params) >>> throws IOException { >>> + handler.layerProtocol(context, params); >>> + } >>> + >>> + @Override >>> + public void markReusable() { >>> + handler.markReusable(); >>> + } >>> + >>> + @Override >>> + public void unmarkReusable() { >>> + handler.unmarkReusable(); >>> + } >>> + >>> + @Override >>> + public boolean isMarkedReusable() { >>> + return handler.isMarkedReusable(); >>> + } >>> + >>> + @Override >>> + public void setState(Object state) { >>> + handler.setState(state); >>> + } >>> + >>> + @Override >>> + public Object getState() { >>> + return handler.getState(); >>> + } >>> + >>> + @Override >>> + public void setIdleDuration(long duration, TimeUnit unit) { >>> + handler.setIdleDuration(duration, unit); >>> + } >>> + >>> + @Override >>> + public void releaseConnection() throws IOException { >>> + handler.releaseConnection(); >>> + } >>> + >>> + @Override >>> + public void abortConnection() throws IOException { >>> + handler.abortConnection(); >>> + } >>> + >>> + @Override >>> + public boolean isResponseAvailable(int timeout) throws IOException >>> { >>> + return handler.isResponseAvailable(timeout); >>> + } >>> + >>> + @Override >>> + public void sendRequestHeader(HttpRequest request) throws >>> HttpException, IOException { >>> + handler.sendRequestHeader(request); >>> + } >>> + >>> + @Override >>> + public void sendRequestEntity(HttpEntityEnclosingRequest request) >>> throws HttpException, IOException { >>> + handler.sendRequestEntity(request); >>> + } >>> + >>> + @Override >>> + public HttpResponse receiveResponseHeader() throws HttpException, >>> IOException { >>> + return handler.receiveResponseHeader(); >>> + } >>> + >>> + @Override >>> + public void receiveResponseEntity(HttpResponse response) throws >>> HttpException, IOException { >>> + handler.receiveResponseEntity(response); >>> + } >>> + >>> + @Override >>> + public void flush() throws IOException { >>> + handler.flush(); >>> + } >>> + >>> + @Override >>> + public InetAddress getLocalAddress() { >>> + return handler.getLocalAddress(); >>> + } >>> + >>> + @Override >>> + public int getLocalPort() { >>> + return handler.getLocalPort(); >>> + } >>> + >>> + @Override >>> + public InetAddress getRemoteAddress() { >>> + return handler.getRemoteAddress(); >>> + } >>> + >>> + @Override >>> + public int getRemotePort() { >>> + return handler.getRemotePort(); >>> + } >>> + >>> + @Override >>> + public void close() throws IOException { >>> + handler.close(); >>> + } >>> + >>> + @Override >>> + public boolean isOpen() { >>> + return handler.isOpen(); >>> + } >>> + >>> + @Override >>> + public boolean isStale() { >>> + return handler.isStale(); >>> + } >>> + >>> + @Override >>> + public void setSocketTimeout(int timeout) { >>> + handler.setSocketTimeout(timeout); >>> + } >>> + >>> + @Override >>> + public int getSocketTimeout() { >>> + return handler.getSocketTimeout(); >>> + } >>> + >>> + @Override >>> + public void shutdown() throws IOException { >>> + handler.shutdown(); >>> + } >>> + >>> + @Override >>> + public HttpConnectionMetrics getMetrics() { >>> + return handler.getMetrics(); >>> + } >>> + } >>> +} >>> >>> Modified: >>> jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- >>> jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java >>> (original) >>> +++ >>> jmeter/trunk/src/protocol/jdbc/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java >>> Mon Jan 5 19:49:06 2015 >>> @@ -84,6 +84,7 @@ public class JDBCSampler extends Abstrac >>> try { >>> conn = DataSourceElement.getConnection(getDataSource()); >>> } finally { >>> + // FIXME: there is separate connect time field now >>> res.latencyEnd(); // use latency to measure connection time >>> } >>> res.setResponseHeaders(conn.toString()); >>> >>> Modified: jmeter/trunk/xdocs/changes.xml >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/xdocs/changes.xml (original) >>> +++ jmeter/trunk/xdocs/changes.xml Mon Jan 5 19:49:06 2015 >>> @@ -55,6 +55,7 @@ Summary >>> <!-- <ch_title>Sample title</ch_title> >>> <p> >>> <ul> >>> +<li><bugzilla>48799</bugzilla> - Add time to establish connection to >>> available sample metrics. Implemented by Andrey Pokhilko (andrey at >>> blazemeter.com) and contributed by BlazeMeter Ltd.</li> >>> <li>Sample text</li> >>> </ul> >>> </p> >>> >>> Modified: jmeter/trunk/xdocs/usermanual/glossary.xml >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/xdocs/usermanual/glossary.xml?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/xdocs/usermanual/glossary.xml (original) >>> +++ jmeter/trunk/xdocs/usermanual/glossary.xml Mon Jan 5 19:49:06 2015 >>> @@ -48,6 +48,10 @@ browser or other application client. >>> </p> >>> >>> <p> >>> +<a name="Connect"><b>Connect Time</b></a>. JMeter measures the time it >>> took to estable the connection, including SSL handshake. Note that connect >>> time is not automatically subtracted from <a href="#Latency">latency</a>. >>> +</p> >>> + >>> +<p> >>> <a name="Median"><b>Median</b></a> is a number which divides the samples >>> into two equal halves. >>> Half of the samples are smaller than the median, and half are larger. >>> [Some samples may equal the median.] >>> >>> Modified: jmeter/trunk/xdocs/usermanual/listeners.xml >>> URL: >>> http://svn.apache.org/viewvc/jmeter/trunk/xdocs/usermanual/listeners.xml?rev=1649629&r1=1649628&r2=1649629&view=diff >>> ============================================================================== >>> --- jmeter/trunk/xdocs/usermanual/listeners.xml (original) >>> +++ jmeter/trunk/xdocs/usermanual/listeners.xml Mon Jan 5 19:49:06 2015 >>> @@ -137,6 +137,7 @@ The full set of properties that affect r >>> #jmeter.save.saveservice.subresults=true >>> #jmeter.save.saveservice.assertions=true >>> #jmeter.save.saveservice.latency=true >>> +#jmeter.save.saveservice.connect_time=false >>> #jmeter.save.saveservice.samplerData=false >>> #jmeter.save.saveservice.responseHeaders=false >>> #jmeter.save.saveservice.requestHeaders=false >>> @@ -304,6 +305,7 @@ The order of appearance of columns is fi >>> <li>URL</li> >>> <li>Filename - if Save Response to File was used</li> >>> <li>latency - time to first response</li> >>> +<li>connect - time to establish connection</li> >>> <li>encoding</li> >>> <li>SampleCount - number of samples (1, unless multiple samples are >>> aggregated)</li> >>> <li>ErrorCount - number of errors (0 or 1, unless multiple samples are >>> aggregated)</li> >>> @@ -427,6 +429,7 @@ The sample attributes have the following >>> <tr><td>it</td><td>Idle Time = time not spent sampling (milliseconds) >>> (generally 0)</td></tr> >>> <tr><td>lb</td><td>Label</td></tr> >>> <tr><td>lt</td><td>Latency = time to initial response (milliseconds) - not >>> all samplers support this</td></tr> >>> +<tr><td>lt</td><td>Connect Time = time to establish the connection >>> (milliseconds) - not all samplers support this</td></tr> >>> <tr><td>na</td><td>Number of active threads for all thread groups</td></tr> >>> <tr><td>ng</td><td>Number of active threads in this group</td></tr> >>> <tr><td>rc</td><td>Response Code (e.g. 200)</td></tr> >>> >>> >
