cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ovidiu Predescu <ovi...@apache.org>
Subject Re: Cocoon functional testing using Anteater
Date Fri, 05 Apr 2002 05:58:17 GMT
On Thu, 4 Apr 2002 21:25:42 -0600, "Ivelin Ivanov" <ivelin@iname.com> wrote:

> 
> Super Extra Cocool !
> 
> Have you considered integration with Jakarta's Latka?
> http://jakarta.apache.org/commons/latka/index.html

Jeff Turner, the co-author of Anteater, is looking into this. He's a
committer in the Latka project. Unfortunately Latka is not implemented
on top of Ant, so integration would really mean refactoring most of
the code.

> Please put on the wish list a features:
> 
> 1) allowing for POST of text/xml mime content. This will allow testing web
> services.

This is already done. Use the contentType attribute of <httpRequest>,
or directly use the <soapRequest> which is a specialization of
<httpRequest> for SOAP requests.

> 2) Allowing for match of XML content. This will help with WS (related to 1)
> and testing against "content" views of a web site.

Already implemented ;-)

Anteater was designed specifically for Web Services and Web
Applications testing.

> A quick and dirty example:
> 
> <project name="calc-test" default="calc">
> 
>   <target name="calc">
>     <http description="Test the 'calc' JavaScript implementation">
>       <httpRequest href="${schecoon}/calc/${cont1}" mime="text/xml">
>         <post>
>             <?xml version="1.0" encoding="utf-8"?>
>             <soap:Envelope
> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
>             <soap:Body>
>             <GetTopIdeas
> xmlns="http://www.soapengine.com/lucin/salcentral/cidea.asmx">
>                 <UserID>long</UserID>
>                 <Password>string</Password>
>                 <HTMLFormat>boolean</HTMLFormat>
>             </GetTopIdeas>
>           </soap:Body>
>           </soap:Envelope>
>         </post>
>         <match>
>           <xpath
> select="envelope/body/getTopIdeasResponse/GetTopIdeasResult"
> assign="result">
>             <value>
>                 <Item
> xmlns="http://www.soapengine.com/lucin/salcentral/cidea.asmx">
>                   <IdeaID>6</r:IdeaID>
>                   <IdeaName>Global Positioning</IdeaName>
>                   <YesVote>0</YesVote>
>                   <NoVote>0</NoVote>
>               </Item>
>             </value>
>           </xpath>
>         </match>
>       </httpRequest>
> 
> 
> 
> 
> Do you think this will make it in CVS before 2010 ;-) ?

Already implemented ;-), although with a different syntax.

The following sample is taken directly from the test.xml file in the
Anteater distribution:

  <target name="simple-soap">
    <property name="url" value="http://services.xmethods.net:80/soap"/>
    <echo>A SOAP request will now be sent off to ${url} to retrieve a stock quote.</echo>

    <http description="Post a simple SOAP request">
      <soapRequest href="${url}"
                   content="test/requests/get-quote">
        <match>
          <header name="Content-Length" assign="cl"/>
          <responseCode value="200" assign="rc"/>
          <xpath select="soap:Envelope/soap:Body/n:getQuoteResponse/Result"
                 assign="result"/>
          <echo>Got ${cl} bytes back from server; HTTP response code ${rc}</echo>
          <echo>XPath-selected the value '${result}'</echo>
        </match>
      </soapRequest>
    </http>
  </target>


To check for specific values just use:

 <xpath select="your/xpath/of/choice" value="specific/value"/>

This test will succeed only if the value of the specified XPath is
exactly the specified value. You can also use <contentEquals> or
<regexp> to match on the content.

The major difference between Anteater and any other HTTP testing
framework out there is that you can use Anteater to test the client
side, not only the server side. Most of the testing frameworks
simulate the client side only, with Anteater you can simulate the
server side as well!

This is achieved using the <listener> task. Suppose you want to test
if your client Web service application sends the correct message to a
service. You can write something like this:

  <listener path="/my-service/">
    <match>
      <method value="POST"/>
      <header name="SOAPAction" value=""/>
      <header name="Content-type" value="text/xml"/>
      <xpath select="/soap:Envelope/soap:Body/n:getQuoteRequest"/>
      <sendResponse select="responses/stock.xml"/>
    </match>
  </listener>

You can setup multiple listeners to wait in parallel for requests
using <parallel>, if you don't care about the order in which the
messages are received. Or you can use <sequential> to listen for
messages only in a given order.

Again check out the test.xml file from Anteater's distribution for
more samples. You're more than welcome to contribute suggestions for
improvements, or even code to Anteater ;-)

Regards,
-- 
Ovidiu Predescu <ovidiu@cup.hp.com>
http://www.geocities.com/SiliconValley/Monitor/7464/ (GNU, Emacs, other stuff)


> ----- Original Message -----
> From: "Ovidiu Predescu" <ovidiu@cup.hp.com>
> To: <cocoon-dev@xml.apache.org>
> Sent: Thursday, April 04, 2002 8:14 PM
> Subject: Cocoon functional testing using Anteater
> 
> 
> > I've finally decided to take time to implement functional testing in
> > Cocoon using Anteater, a tool Jeff Turner and I worked on since the
> > end of last year.
> >
> > Using Anteater you can write regression tests against a deployed
> > Cocoon application. You can fire HTTP requests, and check for various
> > things in the response, using regular expressions, XPath and other
> > things. Anteater is more powerful than this, it can also act as the
> > server side, allowing you to test the client side of your application.
> >
> > For now the integration is done specifically for Schecoon, but it
> > should be trivial to adapt to the normal Cocoon. To run the tests you
> > simply type in the schecoon/ directory:
> >
> > ./build.sh test
> >
> > This spawns off Anteater on the tests/anteater/all-tests.xml file. The
> > default task in this file will search for test files located in
> > tests/anteater and will run them automatically.
> >
> > To write a test you create a "normal" Ant file, which will actually
> > contain Anteater extended tasks. The file should contain only one
> > target, whose name is the same as the file's name, except for the .xml
> > suffix. This target will be automatically picked up by the
> > all-tests.xml file and executed. Checkout the calc.xml test for an
> > example:
> >
> >
> http://cvs.apache.org/viewcvs.cgi/xml-cocoon2/src/scratchpad/schecoon/tests/
> anteater/calc.xml?rev=1.3&content-type=text/vnd.viewcvs-markup
> >
> > This file tests the Calculator example written using the brand new
> > control flow layer in Schecoon.
> >
> > To run the sample, you first need to install Anteater from
> >
> > http://sourceforge.net/projects/aft/
> >
> > At this point, the Anteater documentation is very crude, and there's
> > no Web page, besides the Sourceforge project one. If you know Ant it
> > should be fairly easy to learn the new commands introduced by
> > Anteater.
> >
> > Please let me know if you're interested in getting more info on
> > Schecoon or Anteater.
> >
> > Have fun,
> > --
> > Ovidiu Predescu <ovidiu@cup.hp.com>
> > http://www.geocities.com/SiliconValley/Monitor/7464/ (GNU, Emacs, other
> stuff)

---------------------------------------------------------------------
To unsubscribe, e-mail: cocoon-dev-unsubscribe@xml.apache.org
For additional commands, email: cocoon-dev-help@xml.apache.org


Mime
View raw message