You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Ovidiu Predescu <ov...@apache.org> on 2002/04/05 07:58:17 UTC

Re: Cocoon functional testing using Anteater

On Thu, 4 Apr 2002 21:25:42 -0600, "Ivelin Ivanov" <iv...@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 <ov...@cup.hp.com>
http://www.geocities.com/SiliconValley/Monitor/7464/ (GNU, Emacs, other stuff)


> ----- Original Message -----
> From: "Ovidiu Predescu" <ov...@cup.hp.com>
> To: <co...@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 <ov...@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


Re: Cocoon functional testing using Anteater

Posted by Ivelin Ivanov <iv...@iname.com>.
Ovidiu,


You leave me speachless.

Only two requests I can think of:
- take Anteater out of the schecoon tree and move it in its own tree uner
scratchpad.
- write a 2 page README or xdoc that explains how to run a few tests. You
can use your last response for start :)

When you do that I would love to play with this framemework and promote it
to people I know.

Cheers,

Ivelin


----- Original Message -----
From: "Ovidiu Predescu" <ov...@apache.org>
To: "Ivelin Ivanov" <iv...@iname.com>
Cc: <co...@xml.apache.org>; "Jeff Turner" <je...@socialchange.net.au>
Sent: Thursday, April 04, 2002 11:58 PM
Subject: Re: Cocoon functional testing using Anteater


> On Thu, 4 Apr 2002 21:25:42 -0600, "Ivelin Ivanov" <iv...@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 <ov...@cup.hp.com>
> http://www.geocities.com/SiliconValley/Monitor/7464/ (GNU, Emacs, other
stuff)
>
>
> > ----- Original Message -----
> > From: "Ovidiu Predescu" <ov...@cup.hp.com>
> > To: <co...@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 <ov...@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
>


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