[Webtest] Any way to test webservices/SOAP with webtest?

Paul King webtest@lists.canoo.com
Thu, 25 May 2006 17:55:04 +1000


Michael Knapp wrote:
> I need to do a lot of SOAP tesing for an upcoming project  and would
> love to use WT.  Is it  possible?  Any plans for a SOAP module/steps?
> Or any other tool that you'd recommend (and if it could be configured to
> work with ant/WT all the better)?
> 
> Thanks
> Mike

I thought I would put some more information into an example.

If you look at the Web Service example at:

    http://groovy.codehaus.org/Groovy+SOAP

Here is how you would test it using traditional webtest:

    <steps>
        <invoke method="POST" contentFile="addreq.xml" soapAction=""
            url="http://localhost:6980/MathServiceInterface"/>
        <verifyXPath xpath="//addResponse/out[text()='3.0']"/>
        <invoke method="POST" contentFile="squarereq.xml" soapAction=""
            url="http://localhost:6980/MathServiceInterface"/>
        <verifyXPath xpath="//squareResponse/out[text()='9.0']"/>
    </steps>

Where addreq.xml would look something like:

    <?xml version='1.0' encoding='UTF-8'?>
    <soap:Envelope
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <soap:Body>
        <add xmlns="http://DefaultNamespace">
            <in0 xmlns="http://DefaultNamespace">1.0</in0>
            <in1>2.0</in1>
        </add>
        </soap:Body>
    </soap:Envelope>

and squarereq.xml would look something like:

    <?xml version='1.0' encoding='UTF-8'?>
    <soap:Envelope
            xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <soap:Body>
            <square xmlns="http://DefaultNamespace">
                <in0 xmlns="http://DefaultNamespace">3.0</in0>
            </square>
        </soap:Body>
    </soap:Envelope>

Alternatively, testing using groovy within webtest would look like:

    <steps>
        <groovy>
            import groovy.net.soap.SoapClient

            def proxy = new SoapClient("http://localhost:6980/MathServiceInterface?wsdl")

            def result = proxy.add(1.0, 2.0)
            assert (result == 3.0)

            result = proxy.square(3.0)
            assert (result == 9.0)
        </groovy>
    </steps>

Note: you will need to place the jars mentioned on that page in your
webtest lib directory (i.e. groovysoap, stax, jaf and mail jars).

The first approach (traditional webtest) produces more information in the test
summary reporting but requires you to do more work (i.e. keep the requests around
as XML). It depends if you already have those XML files around for other purposes,
e.g. manual testing.



Cheers ,Paul.