I'm sorry, but I don't understand how this relates to the SampleSaveConfiguration, which generates this piece of JMX... I have correct defaults specified for connect times, it is false both in the code and in the jmeter.properties. I used no string "magic" strings in my code, did everything just like it is done for latency. I think this change in JMXses is unavoidable, since JMeter writes into JMX all sample save flags, including those with default values. I see the sense of this behavior to make JMXses consistently portable between different JMeter installation.
Am I wrong? Andrey Pokhilko On 01/06/2015 03:45 PM, sebb wrote: > 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> >>>> >>>>
