Hello Artem, At minimum, we should have a JMX Test plan that allows testing all combinations of an authentication using httpbin.org for example and some java library that could play the role of a proxy, I see the following cases but feel free to complete:
- No proxy set - Global Proxy set at JMeter level - Proxy set in HTTP Request Defaults - Proxy set only on request We should have 2 threads (to check ), 2 iterations and 3 requests (the one we are concerned about in the middle) Regarding JUnit, unless we externalize this particular piece of code into a custom class, it looks to me hard to do that but if you have an idea ... Regards On Wed, Sep 19, 2018 at 5:23 PM Artem Fedorov <[email protected]> wrote: > Hi Philippe > > I have very simple use case > I configure squid proxy with authentication and I have jmx Test Plan that > makes 3 HTTP Request. > > I attached jmx file and access log from squid. > > Is there any ways for create a JUnit test with the same scenario? > Also I want to remove !isDynamicProxy(getProxyHost(), getProxyPortInt())) from > this condition > <https://github.com/apache/jmeter/blob/387271deb6f5b310fa4f8672f65948ab6049ed90/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java#L694>, > because it always false, when proxy config was specified. > > Thanks, > Artem > > > On Sun, Sep 16, 2018 at 9:53 PM, Philippe Mouawad < > [email protected]> wrote: > >> Thanks for last PR update. >> We'll merge it once 5.0 is released; >> >> But before, could you describe the use case met that made you see this >> issue ? >> Is the a possibility to provide a JMX Test plan that could be used as >> integration test ? and if possible a JUnit test ? >> >> Thanks >> >> On Sat, Sep 1, 2018 at 4:02 PM Philippe Mouawad < >> [email protected]> >> wrote: >> >> > Hello, >> > Thanks for latest updates of PR. >> > 1/ I would not use Object but AuthState instead. >> > >> > 2/ Shouldn't we use HTTPCLIENTS_CACHE_PER_THREAD_AND_HTTPCLIENTKEY and >> > store AuthState there (transforming Pair to Triple)? >> > >> > This would be the case for a Thread representing a Virtual User. >> > But it would not be correct if a thread is not a Virtual User >> > >> > >> > Regards >> > >> > On Wed, Aug 29, 2018 at 11:14 AM Artem Fedorov < >> > [email protected]> wrote: >> > >> >> Fixed. >> >> >> >> Regarding (HttpClientContext.PROXY_AUTH_STATE + this) I also have >> doubts: >> >> >> >> - minimal number of authstate, that we should store = Number of >> Requests >> >> in >> >> Test Plan. (each request can use own proxy). Does the AuthState is >> Thread >> >> Safe and we can share it between threads? I think no and it'll better >> to >> >> store Number of Requests in Plan * Number of Threads AuthStates. >> >> >> >> - Also in case if we use dynamic proxy we can not reuse saved >> AuthState: >> >> >> >> > if (!isDynamicProxy(getProxyHost(), getProxyPortInt())) { >> >> > localContext.setAttribute(HttpClientContext.PROXY_AUTH_STATE, >> proxy); >> >> > } >> >> >> >> Artem >> >> >> >> On Tue, Aug 28, 2018 at 11:46 PM, Philippe Mouawad < >> >> [email protected]> wrote: >> >> >> >> > Thank you Artem, >> >> > >> >> > I made a little comment on PR. >> >> > >> >> > Just to be sure I understand the PR: >> >> > >> >> > - You set HttpClientContext.PROXY_AUTH_STATE so that it is used if >> >> > updated >> >> > >> >> > But is it correct to store it as: >> >> > >> >> > - "http.auth.proxy-scope" + this >> >> > >> >> > Because we'll end per Thread with : >> >> > >> >> > - Number of Requests in Plan * Number of Threads AuthStates >> >> > >> >> > Regards >> >> > >> >> > >> >> > On Mon, Aug 27, 2018 at 3:43 PM Artem Fedorov < >> >> > [email protected]> >> >> > wrote: >> >> > >> >> > > Hi Philippe >> >> > > >> >> > > https://github.com/apache/jmeter/pull/397 >> >> > > >> >> > > Let's discuss the details in the PR >> >> > > >> >> > > Thanks, >> >> > > Artem >> >> > > >> >> > > On Sun, Aug 26, 2018 at 12:04 AM, Philippe Mouawad < >> >> > > [email protected]> wrote: >> >> > > >> >> > > > Hello Artem, >> >> > > > Go ahead and propose a patch or PR. >> >> > > > It will be a clearer base to discuss. >> >> > > > >> >> > > > Thank you >> >> > > > >> >> > > > On Wed, Aug 22, 2018 at 10:56 AM Artem Fedorov < >> >> > > > [email protected]> >> >> > > > wrote: >> >> > > > >> >> > > > > I work with the latest JMeter version from github >> >> > > > > (revision f27c31590cf07bc8427663b62fc22d6d650b95af) >> >> > > > > >> >> > > > > I create a Thread Group with 1 loop and 1 user. This Thread >> Group >> >> > > > contains >> >> > > > > View Results Tree (Listener) and HTTP Resuest (Sampler) >> >> > > > > >> >> > > > > Configuration of HTTP Sampler: >> >> > > > > >> >> > > > > <HTTPSamplerProxy guiclass="HttpTestSampleGui" >> >> > > > > > testclass="HTTPSamplerProxy" testname="HTTP Request" >> >> > enabled="true"> >> >> > > > > > <elementProp name="HTTPsampler.Arguments" >> >> > > > > > elementType="Arguments" guiclass="HTTPArgumentsPanel" >> >> > > > > testclass="Arguments" >> >> > > > > > testname="User Defined Variables" enabled="true"> >> >> > > > > > <collectionProp name="Arguments.arguments"/> >> >> > > > > > </elementProp> >> >> > > > > > <stringProp name="HTTPSampler.domain"></stringProp> >> >> > > > > > <stringProp name="HTTPSampler.port"></stringProp> >> >> > > > > > <stringProp >> name="HTTPSampler.protocol"></stringProp> >> >> > > > > > <stringProp >> >> > > name="HTTPSampler.contentEncoding"></stringProp> >> >> > > > > > <stringProp name="HTTPSampler.path"> >> >> http://blazedemo.com >> >> > > > > > </stringProp> >> >> > > > > > <stringProp >> name="HTTPSampler.method">GET</stringProp> >> >> > > > > > <boolProp name="HTTPSampler.follow_ >> >> > > > redirects">true</boolProp> >> >> > > > > > <boolProp >> >> > > name="HTTPSampler.auto_redirects">false</boolProp> >> >> > > > > > <boolProp name="HTTPSampler.use_ >> >> > keepalive">true</boolProp> >> >> > > > > > <boolProp >> name="HTTPSampler.DO_MULTIPART_POST">false</ >> >> > > > boolProp> >> >> > > > > > <stringProp >> >> > > name="HTTPSampler.embedded_url_re"></stringProp> >> >> > > > > > <stringProp name="HTTPSampler.proxyHost"> >> >> > > > localhost</stringProp> >> >> > > > > > <stringProp name="HTTPSampler.proxyPort"> >> >> > 3321</stringProp> >> >> > > > > > <stringProp name="HTTPSampler.proxyUser"> >> >> > artem</stringProp> >> >> > > > > > <stringProp name="HTTPSampler.proxyPass"> >> >> > artem</stringProp> >> >> > > > > > <stringProp >> >> > > name="HTTPSampler.connect_timeout"></stringProp> >> >> > > > > > <stringProp name="HTTPSampler.response_ >> >> > > > timeout"></stringProp> >> >> > > > > > </HTTPSamplerProxy> >> >> > > > > >> >> > > > > >> >> > > > > When I run this Test Plan I see 1 sample in the View Results >> Tree, >> >> > but >> >> > > in >> >> > > > > the access.log of squid I see 2 request from JMeter. >> >> > > > > >> >> > > > > 1534844834.248 0 127.0.0.1 TCP_DENIED/407 4056 GET >> >> > > > > > http://blazedemo.com/ - HIER_NONE/- text/html >> >> > > > > > 1534844834.320 52 127.0.0.1 TCP_MISS/200 8077 GET >> >> > > > > > http://blazedemo.com/ artem HIER_DIRECT/54.93.131.97 >> text/html >> >> > > > > >> >> > > > > >> >> > > > > So, in real test each Sampler will send 2 requests: >> >> > > > > - 1st without authentication data (and will receive 407 http >> >> response >> >> > > > code) >> >> > > > > - TCP_DENIED/407 >> >> > > > > - 2nd with authentication data(username/password/type) - will >> be a >> >> > > > success >> >> > > > > - TCP_MISS/200 >> >> > > > > >> >> > > > > JMeter (httpclient) send 1st request for detect authentication >> >> type >> >> > > > > (Basic/Digest/NTLM/SPNEGO/Kerberos) which use proxy server. >> >> > > > > If we will have 2 loops the JMeter will send 4 requests, 3 >> loops >> >> = 6 >> >> > > > > requests etc. I would like to reduce number of request to the >> >> proxy >> >> > > > server >> >> > > > > and make request for detect authentication type once at the >> start >> >> of >> >> > > the >> >> > > > > loop >> >> > > > > >> >> > > > > Artem >> >> > > > > >> >> > > > > On Wed, Aug 22, 2018 at 12:26 AM, Philippe Mouawad < >> >> > > > > [email protected]> wrote: >> >> > > > > >> >> > > > > > Hello Artem, >> >> > > > > > I am not sure to understand. >> >> > > > > > >> >> > > > > > Can you clarify with an example or reformulating what you >> mean >> >> by >> >> > > HTTP >> >> > > > > > Request that use proxy with authentication. >> >> > > > > > >> >> > > > > > and also clarify what’s after that, it’s really not clear for >> >> me. >> >> > > > > > >> >> > > > > > Thank you >> >> > > > > > >> >> > > > > > On Tuesday, August 21, 2018, Artem Fedorov < >> >> > > > [email protected] >> >> > > > > > >> >> > > > > > wrote: >> >> > > > > > >> >> > > > > > > HI All >> >> > > > > > > >> >> > > > > > > I configure HTTP Request that use proxy with authentication >> >> > > > > > > >> >> > > > > > > In proxy log I can see, that JMeter *always send 2 >> >> requests*: (I >> >> > > > used >> >> > > > > > > `squid` in tests) >> >> > > > > > > >> >> > > > > > > 1534844834.248 0 127.0.0.1 TCP_DENIED/407 4056 GET >> >> > > > > > > > http://blazedemo.com/ - HIER_NONE/- text/html >> >> > > > > > > > 1534844834.320 52 127.0.0.1 TCP_MISS/200 8077 GET >> >> > > > > > > > http://blazedemo.com/ artem HIER_DIRECT/54.93.131.97 >> >> text/html >> >> > > > > > > >> >> > > > > > > >> >> > > > > > > The first request JMeter send without authentication >> options, >> >> > > because >> >> > > > > > this >> >> > > > > > > options are create after server got a response with 401/407 >> >> code. >> >> > > > > > > >> >> > > > > > > In performance test I'll see the following log: (50 % of >> all >> >> > > requests >> >> > > > > are >> >> > > > > > > send without authentication options) - IMO this is >> incorrect >> >> load >> >> > > of >> >> > > > > > proxy >> >> > > > > > > server or we lose a lot of time for create authentication >> >> scheme >> >> > > for >> >> > > > > each >> >> > > > > > > request >> >> > > > > > > >> >> > > > > > > - TCP_DENIED/407 (without proxy authentication) >> >> > > > > > > - TCP_MISS/200 (with proxy authentication) >> >> > > > > > > - TCP_DENIED/407 (without proxy authentication) >> >> > > > > > > - TCP_MISS/200 (with proxy authentication) >> >> > > > > > > - TCP_DENIED/407 (without proxy authentication) >> >> > > > > > > - TCP_MISS/200 (with proxy authentication) >> >> > > > > > > .... >> >> > > > > > > >> >> > > > > > > The first request (the response for this request) use by >> >> > httpclient >> >> > > > for >> >> > > > > > > detect Standard authentication type >> >> > > > > (Basic/Digest/NTLM/SPNEGO/Kerberos). >> >> > > > > > I >> >> > > > > > > think If we have not dynamic proxy we can *reuse* >> knowledges >> >> > about >> >> > > > > > > authentication type in the second and subsequent requests. >> >> > > > > > > After such changes we will see the following log: >> >> > > > > > > >> >> > > > > > > - TCP_DENIED/407 (without proxy authentication) >> >> > > > > > > - TCP_MISS/200 (with proxy authentication) >> >> > > > > > > - TCP_MISS/200 (with proxy authentication) >> >> > > > > > > - TCP_MISS/200 (with proxy authentication) >> >> > > > > > > .... >> >> > > > > > > >> >> > > > > > > What do you think about such changes? If all is OK I can >> >> > contribute >> >> > > > the >> >> > > > > > fix >> >> > > > > > > >> >> > > > > > > >> >> > > > > > > Thanks, >> >> > > > > > > Artem >> >> > > > > > > >> >> > > > > > >> >> > > > > > >> >> > > > > > -- >> >> > > > > > Cordialement. >> >> > > > > > Philippe Mouawad. >> >> > > > > > Ubik-Ingénierie >> >> > > > > > >> >> > > > > > UBIK LOAD PACK Web Site <http://www.ubikloadpack.com/> >> >> > > > > > >> >> > > > > > UBIK LOAD PACK on TWITTER <https://twitter.com/ubikloadpack> >> >> > > > > > >> >> > > > > >> >> > > > >> >> > > > >> >> > > > -- >> >> > > > Cordialement. >> >> > > > Philippe Mouawad. >> >> > > > >> >> > > >> >> > >> >> > >> >> > -- >> >> > Cordialement. >> >> > Philippe Mouawad. >> >> > >> >> >> > >> > >> > -- >> > Cordialement. >> > Philippe Mouawad. >> > >> > >> > >> >> -- >> Cordialement. >> Philippe Mouawad. >> > > -- Cordialement. Philippe Mouawad.
