You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@jmeter.apache.org by Richard Gaywood <ri...@gmail.com> on 2006/03/28 12:53:27 UTC

Twin problems with a SOAP load test

Hi list. Just when I thought I was getting to grips with JMeter, a client
threw me a curveball :o(

I'm trying to load test a third-party SOAP web service to confirm it can
cope that the traffic we're going to be putting down it. I have, from one of
the developers, a precise XML conversion with three samples -- and initial
request and two extra information requests -- which works fine in a telnet
session to port 80 on the server. So, my first instinct was to feed it into
a SOAP Sampler and go home earlier. Unfortunately, JMeter's SOAP parsing is
mangling the request on the way through and I think the third-party server
doesn't like it. It's some sort of XML namespace problem but I'm rather new
at this bit and I can't see what's wrong.

Here's what the developer gave me:
==================================================
POST /foo.asmx HTTP/1.1
Connection: Close
User-Agent: HostDriver26/2.6.1
Content-Type: text/xml
SOAPAction: http://foo.soap.action
Content-Length: 842
Host: foo

<Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xmlns="
http://schemas.xmlsoap.org/soap/envelope/"><Body><foo xmlns="
http://foo.soap.action" /></Body></Envelope>
==================================================
(I've had to "foo" some bits out because it's commercially sensitive, but
hopefully you see the gist. The Content-Length is right in the original :o)

Note that this has some problems, like no XML declaration tag. I suspect the
fact the developers and clients are all Microsoft programmers is the root of
my problem. Anyway, I've cut and pasted this snippet, as appropriate, into a
Webservice(SOAP) Request sampler. I didn't configure through the WSDL but
manually input server name, path, SOAPAction and data. I've also turned off
Memory Cache and turned on Read SOAP response. The Data part of the Sampler
is the whole body of the request above (i.e. <Envelope ...>...</Envelope>).

Now here is what Jmeter sends, grabbed through an outgoing recording HTTP
proxy:
==================================================
POST /foo.asmx HTTP/1.0
Host: foo:80
Content-Type: text/xml; charset=utf-8
Content-Length: 917
SOAPAction: "http://foo.soap.action"

<?xml version='1.0' encoding='UTF-8'?>
<xmlns:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xmlns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="
http://www.w3.org/2001/XMLSchema">
<xmlns:Body>
<foo xmlns="http://foo.soap.action" />
</xmlns:Body>
</xmlns:Envelope>
==================================================
JMeter has changed the xmlns declarations, and the server doesn't like it.
This is what I get back:
==================================================
HTTP/1.1 500 Internal Server Error.
Connection: close
Date: Tue, 28 Mar 2006 11:33:11 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 1.1.4322
Cache-Control: private
Content-Type: text/xml; charset=utf-8
Content-Length: 485

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="
http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <soap:Fault>
      <faultcode>soap:Server</faultcode>
      <faultstring>Server was unable to process request. --&gt; This is a
reserved namespace. Line 2, position 71.</faultstring>
      <detail />
    </soap:Fault>
  </soap:Body>
</soap:Envelope>
==================================================
Is there anyway to get the SOAP sampler working? Does anyone more
clueful/experienced than I have a suggestion?

Failing that, I thought I'd try the TCP sampler out. I wrote three TCP
Sampler requests to open port 80 on my client's server and push the raw text
the developer gave me down the port. That works fine... for one Sampler at a
time. As soon as more than one Sampler is in the Thread Group, the second
and all subsequent ones fail instantly (0 milliseconds sample time).

Looking at the debug log, it's failing because my SOAP call is closing the
HTTP connection after the invocation but the TCP Sampler is trying to reuse
the connection in the second Sampler call. The docs suggest that changing
the case of the server name will prevent this behaviour, but it doesn't; the
docs also suggest that this should cause a new connection to be reopened,
but that doesn't seem to work either. Is there anything else I can try
before I crack the source code out?

Re: Twin problems with a SOAP load test

Posted by Richard Gaywood <ri...@gmail.com>.
I solved the problem with the SOAP sampler! For future googlenauts, I had to
adjust the XML namespace declarations from this:

<Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Body><foo xmlns="http://foo.soap.action"
> /></Body></Envelope>
>

To this:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="
http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
<foo xmlns="http://clients-xlmns"/>
</soap:Body></soap:Envelope>

That now works fine.

Re: Twin problems with a SOAP load test

Posted by Peter Lin <wo...@gmail.com>.
looking at the response, you're hitting IIS running ASP.NET.  the soap
webservice sampler has been tested against .NET 1.0 and 1.1.  I'm pretty
confident it should work.

peter


On 3/28/06, Richard Gaywood <ri...@gmail.com> wrote:
>
> Hi list. Just when I thought I was getting to grips with JMeter, a client
> threw me a curveball :o(
>
> I'm trying to load test a third-party SOAP web service to confirm it can
> cope that the traffic we're going to be putting down it. I have, from one
> of
> the developers, a precise XML conversion with three samples -- and initial
> request and two extra information requests -- which works fine in a telnet
> session to port 80 on the server. So, my first instinct was to feed it
> into
> a SOAP Sampler and go home earlier. Unfortunately, JMeter's SOAP parsing
> is
> mangling the request on the way through and I think the third-party server
> doesn't like it. It's some sort of XML namespace problem but I'm rather
> new
> at this bit and I can't see what's wrong.
>
> Here's what the developer gave me:
> ==================================================
> POST /foo.asmx HTTP/1.1
> Connection: Close
> User-Agent: HostDriver26/2.6.1
> Content-Type: text/xml
> SOAPAction: http://foo.soap.action
> Content-Length: 842
> Host: foo
>
> <Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="
> http://www.w3.org/2001/XMLSchema-instance" xmlns="
> http://schemas.xmlsoap.org/soap/envelope/"><Body><foo xmlns="
> http://foo.soap.action" /></Body></Envelope>
> ==================================================
> (I've had to "foo" some bits out because it's commercially sensitive, but
> hopefully you see the gist. The Content-Length is right in the original
> :o)
>
> Note that this has some problems, like no XML declaration tag. I suspect
> the
> fact the developers and clients are all Microsoft programmers is the root
> of
> my problem. Anyway, I've cut and pasted this snippet, as appropriate, into
> a
> Webservice(SOAP) Request sampler. I didn't configure through the WSDL but
> manually input server name, path, SOAPAction and data. I've also turned
> off
> Memory Cache and turned on Read SOAP response. The Data part of the
> Sampler
> is the whole body of the request above (i.e. <Envelope
> ...>...</Envelope>).
>
> Now here is what Jmeter sends, grabbed through an outgoing recording HTTP
> proxy:
> ==================================================
> POST /foo.asmx HTTP/1.0
> Host: foo:80
> Content-Type: text/xml; charset=utf-8
> Content-Length: 917
> SOAPAction: "http://foo.soap.action"
>
> <?xml version='1.0' encoding='UTF-8'?>
> <xmlns:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xmlns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="
> http://www.w3.org/2001/XMLSchema">
> <xmlns:Body>
> <foo xmlns="http://foo.soap.action" />
> </xmlns:Body>
> </xmlns:Envelope>
> ==================================================
> JMeter has changed the xmlns declarations, and the server doesn't like it.
> This is what I get back:
> ==================================================
> HTTP/1.1 500 Internal Server Error.
> Connection: close
> Date: Tue, 28 Mar 2006 11:33:11 GMT
> Server: Microsoft-IIS/6.0
> X-Powered-By: ASP.NET
> X-AspNet-Version: 1.1.4322
> Cache-Control: private
> Content-Type: text/xml; charset=utf-8
> Content-Length: 485
>
> <?xml version="1.0" encoding="utf-8"?>
> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="
> http://www.w3.org/2001/XMLSchema">
>   <soap:Body>
>     <soap:Fault>
>       <faultcode>soap:Server</faultcode>
>       <faultstring>Server was unable to process request. --&gt; This is a
> reserved namespace. Line 2, position 71.</faultstring>
>       <detail />
>     </soap:Fault>
>   </soap:Body>
> </soap:Envelope>
> ==================================================
> Is there anyway to get the SOAP sampler working? Does anyone more
> clueful/experienced than I have a suggestion?
>
> Failing that, I thought I'd try the TCP sampler out. I wrote three TCP
> Sampler requests to open port 80 on my client's server and push the raw
> text
> the developer gave me down the port. That works fine... for one Sampler at
> a
> time. As soon as more than one Sampler is in the Thread Group, the second
> and all subsequent ones fail instantly (0 milliseconds sample time).
>
> Looking at the debug log, it's failing because my SOAP call is closing the
> HTTP connection after the invocation but the TCP Sampler is trying to
> reuse
> the connection in the second Sampler call. The docs suggest that changing
> the case of the server name will prevent this behaviour, but it doesn't;
> the
> docs also suggest that this should cause a new connection to be reopened,
> but that doesn't seem to work either. Is there anything else I can try
> before I crack the source code out?
>
>

Re: Twin problems with a SOAP load test

Posted by Richard Gaywood <ri...@gmail.com>.
On 3/28/06, Peter Lin <wo...@gmail.com> wrote:
>
> are you using soap/xml sampler or the soap webservice sampler?


The latter. Add | Sampler | Webservice (SOAP) Request. I've had success with
this sampler in the past.

Re: Twin problems with a SOAP load test

Posted by sebb <se...@gmail.com>.
If it works in Telnet, you might be able to use the TCP Sampler, but
obviously it would be better to fix any problems in the SOAP samplers
if there are any.

Check jmeter.properties for details of properties you need to set for
the TCP sampler (or I think this is explained better in the current
nightly build documentation).

On 28/03/06, Peter Lin <wo...@gmail.com> wrote:
> are you using soap/xml sampler or the soap webservice sampler?
>
> peter
>
>
> On 3/28/06, Richard Gaywood <ri...@gmail.com> wrote:
> >
> > Hi list. Just when I thought I was getting to grips with JMeter, a client
> > threw me a curveball :o(
> >
> > I'm trying to load test a third-party SOAP web service to confirm it can
> > cope that the traffic we're going to be putting down it. I have, from one
> > of
> > the developers, a precise XML conversion with three samples -- and initial
> > request and two extra information requests -- which works fine in a telnet
> > session to port 80 on the server. So, my first instinct was to feed it
> > into
> > a SOAP Sampler and go home earlier. Unfortunately, JMeter's SOAP parsing
> > is
> > mangling the request on the way through and I think the third-party server
> > doesn't like it. It's some sort of XML namespace problem but I'm rather
> > new
> > at this bit and I can't see what's wrong.
> >
> > Here's what the developer gave me:
> > ==================================================
> > POST /foo.asmx HTTP/1.1
> > Connection: Close
> > User-Agent: HostDriver26/2.6.1
> > Content-Type: text/xml
> > SOAPAction: http://foo.soap.action
> > Content-Length: 842
> > Host: foo
> >
> > <Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="
> > http://www.w3.org/2001/XMLSchema-instance" xmlns="
> > http://schemas.xmlsoap.org/soap/envelope/"><Body><foo xmlns="
> > http://foo.soap.action" /></Body></Envelope>
> > ==================================================
> > (I've had to "foo" some bits out because it's commercially sensitive, but
> > hopefully you see the gist. The Content-Length is right in the original
> > :o)
> >
> > Note that this has some problems, like no XML declaration tag. I suspect
> > the
> > fact the developers and clients are all Microsoft programmers is the root
> > of
> > my problem. Anyway, I've cut and pasted this snippet, as appropriate, into
> > a
> > Webservice(SOAP) Request sampler. I didn't configure through the WSDL but
> > manually input server name, path, SOAPAction and data. I've also turned
> > off
> > Memory Cache and turned on Read SOAP response. The Data part of the
> > Sampler
> > is the whole body of the request above (i.e. <Envelope
> > ...>...</Envelope>).
> >
> > Now here is what Jmeter sends, grabbed through an outgoing recording HTTP
> > proxy:
> > ==================================================
> > POST /foo.asmx HTTP/1.0
> > Host: foo:80
> > Content-Type: text/xml; charset=utf-8
> > Content-Length: 917
> > SOAPAction: "http://foo.soap.action"
> >
> > <?xml version='1.0' encoding='UTF-8'?>
> > <xmlns:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> > xmlns:xmlns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="
> > http://www.w3.org/2001/XMLSchema">
> > <xmlns:Body>
> > <foo xmlns="http://foo.soap.action" />
> > </xmlns:Body>
> > </xmlns:Envelope>
> > ==================================================
> > JMeter has changed the xmlns declarations, and the server doesn't like it.
> > This is what I get back:
> > ==================================================
> > HTTP/1.1 500 Internal Server Error.
> > Connection: close
> > Date: Tue, 28 Mar 2006 11:33:11 GMT
> > Server: Microsoft-IIS/6.0
> > X-Powered-By: ASP.NET
> > X-AspNet-Version: 1.1.4322
> > Cache-Control: private
> > Content-Type: text/xml; charset=utf-8
> > Content-Length: 485
> >
> > <?xml version="1.0" encoding="utf-8"?>
> > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="
> > http://www.w3.org/2001/XMLSchema">
> >   <soap:Body>
> >     <soap:Fault>
> >       <faultcode>soap:Server</faultcode>
> >       <faultstring>Server was unable to process request. --&gt; This is a
> > reserved namespace. Line 2, position 71.</faultstring>
> >       <detail />
> >     </soap:Fault>
> >   </soap:Body>
> > </soap:Envelope>
> > ==================================================
> > Is there anyway to get the SOAP sampler working? Does anyone more
> > clueful/experienced than I have a suggestion?
> >
> > Failing that, I thought I'd try the TCP sampler out. I wrote three TCP
> > Sampler requests to open port 80 on my client's server and push the raw
> > text
> > the developer gave me down the port. That works fine... for one Sampler at
> > a
> > time. As soon as more than one Sampler is in the Thread Group, the second
> > and all subsequent ones fail instantly (0 milliseconds sample time).
> >
> > Looking at the debug log, it's failing because my SOAP call is closing the
> > HTTP connection after the invocation but the TCP Sampler is trying to
> > reuse
> > the connection in the second Sampler call. The docs suggest that changing
> > the case of the server name will prevent this behaviour, but it doesn't;
> > the
> > docs also suggest that this should cause a new connection to be reopened,
> > but that doesn't seem to work either. Is there anything else I can try
> > before I crack the source code out?
> >
> >
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-user-help@jakarta.apache.org


Re: Twin problems with a SOAP load test

Posted by Peter Lin <wo...@gmail.com>.
are you using soap/xml sampler or the soap webservice sampler?

peter


On 3/28/06, Richard Gaywood <ri...@gmail.com> wrote:
>
> Hi list. Just when I thought I was getting to grips with JMeter, a client
> threw me a curveball :o(
>
> I'm trying to load test a third-party SOAP web service to confirm it can
> cope that the traffic we're going to be putting down it. I have, from one
> of
> the developers, a precise XML conversion with three samples -- and initial
> request and two extra information requests -- which works fine in a telnet
> session to port 80 on the server. So, my first instinct was to feed it
> into
> a SOAP Sampler and go home earlier. Unfortunately, JMeter's SOAP parsing
> is
> mangling the request on the way through and I think the third-party server
> doesn't like it. It's some sort of XML namespace problem but I'm rather
> new
> at this bit and I can't see what's wrong.
>
> Here's what the developer gave me:
> ==================================================
> POST /foo.asmx HTTP/1.1
> Connection: Close
> User-Agent: HostDriver26/2.6.1
> Content-Type: text/xml
> SOAPAction: http://foo.soap.action
> Content-Length: 842
> Host: foo
>
> <Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="
> http://www.w3.org/2001/XMLSchema-instance" xmlns="
> http://schemas.xmlsoap.org/soap/envelope/"><Body><foo xmlns="
> http://foo.soap.action" /></Body></Envelope>
> ==================================================
> (I've had to "foo" some bits out because it's commercially sensitive, but
> hopefully you see the gist. The Content-Length is right in the original
> :o)
>
> Note that this has some problems, like no XML declaration tag. I suspect
> the
> fact the developers and clients are all Microsoft programmers is the root
> of
> my problem. Anyway, I've cut and pasted this snippet, as appropriate, into
> a
> Webservice(SOAP) Request sampler. I didn't configure through the WSDL but
> manually input server name, path, SOAPAction and data. I've also turned
> off
> Memory Cache and turned on Read SOAP response. The Data part of the
> Sampler
> is the whole body of the request above (i.e. <Envelope
> ...>...</Envelope>).
>
> Now here is what Jmeter sends, grabbed through an outgoing recording HTTP
> proxy:
> ==================================================
> POST /foo.asmx HTTP/1.0
> Host: foo:80
> Content-Type: text/xml; charset=utf-8
> Content-Length: 917
> SOAPAction: "http://foo.soap.action"
>
> <?xml version='1.0' encoding='UTF-8'?>
> <xmlns:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xmlns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="
> http://www.w3.org/2001/XMLSchema">
> <xmlns:Body>
> <foo xmlns="http://foo.soap.action" />
> </xmlns:Body>
> </xmlns:Envelope>
> ==================================================
> JMeter has changed the xmlns declarations, and the server doesn't like it.
> This is what I get back:
> ==================================================
> HTTP/1.1 500 Internal Server Error.
> Connection: close
> Date: Tue, 28 Mar 2006 11:33:11 GMT
> Server: Microsoft-IIS/6.0
> X-Powered-By: ASP.NET
> X-AspNet-Version: 1.1.4322
> Cache-Control: private
> Content-Type: text/xml; charset=utf-8
> Content-Length: 485
>
> <?xml version="1.0" encoding="utf-8"?>
> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="
> http://www.w3.org/2001/XMLSchema">
>   <soap:Body>
>     <soap:Fault>
>       <faultcode>soap:Server</faultcode>
>       <faultstring>Server was unable to process request. --&gt; This is a
> reserved namespace. Line 2, position 71.</faultstring>
>       <detail />
>     </soap:Fault>
>   </soap:Body>
> </soap:Envelope>
> ==================================================
> Is there anyway to get the SOAP sampler working? Does anyone more
> clueful/experienced than I have a suggestion?
>
> Failing that, I thought I'd try the TCP sampler out. I wrote three TCP
> Sampler requests to open port 80 on my client's server and push the raw
> text
> the developer gave me down the port. That works fine... for one Sampler at
> a
> time. As soon as more than one Sampler is in the Thread Group, the second
> and all subsequent ones fail instantly (0 milliseconds sample time).
>
> Looking at the debug log, it's failing because my SOAP call is closing the
> HTTP connection after the invocation but the TCP Sampler is trying to
> reuse
> the connection in the second Sampler call. The docs suggest that changing
> the case of the server name will prevent this behaviour, but it doesn't;
> the
> docs also suggest that this should cause a new connection to be reopened,
> but that doesn't seem to work either. Is there anything else I can try
> before I crack the source code out?
>
>