Hi,

I take the time to give my point of view, which is not the best one but some ideas could interest you. I've built an extensible test suite entirely in Groovy and found it astonishing. The based examples are documented, and that's all you need to begin with. Well, it's just a few lines of code to write in Eclipse or your favorite IDE (here is an example of how to validate a page against W3C):
     def ant = new AntBuilder()

     def webtest_home = System.properties.'webtest.home'
ant.taskdef(resource:'webtest.taskdef'){
         classpath(){
                pathelement(location:"$webtest_home/lib")
                fileset(dir:"$webtest_home/lib", includes:"**/*.jar")
         }
}; def config_map = ['host':"www.somestuff.com",'port':"80",'protocol':"http",'basepath':"",'summary':"true",'saveresponse':"true",'resultfile':"result.xml",'resultpath':".",'haltonfailure':"false",'haltonerror':"false",'defaultPropertyType':"dynamic"]

     ant.testSpec(name:gname){
         config(config_map){
option(name:"ThrowExceptionOnScriptError",value:"false")
         }
steps(){ invoke(description: "Get the page: somestuff.com", url: "http://www.somestuff.com";)
           groovy(description:"Store the html of the page","""
               def document = step.context.currentResponse.asXml()
               def props = step.webtestProperties
               props.putAt("htmlPage",document)
                """)
invoke(description:"goto W3C page",url:"http://validator.w3.org/#validate_by_input";) setInputField(description:'set textarea with feeds',htmlId:'fragment',value="#{htmlPage}") clickButton(description:"Submit the simple feedvalidation",xpath:"//[EMAIL PROTECTED]'validate-by-input']//[EMAIL PROTECTED]'Check']")
         }

}

What groovy gives to Webtest is an extreme flexibility. You can write behaviors that change regards to the type of test you want to make. My purpose was to change the type of user registering a given form. I've wrote a test suite that filled the value depending on user parameters stored in a database, and it was a form that spanned approx. between 50 and 90 user actions (Ajax site that make appear some fields depending on the user profile). And it worked great. Moreover, I implemented a decision chain that has to decide what value to input given a context (example, if the parameter is "Saint Georges Sur Baulches" in the database and "St-Georges-Sur-Baulche" on the website, you can analyze that in groovy and tell what value to input)

I'll try to answer your questions :
1.) Can Groovy code return data to XML-based tests, somehow? Perhaps via ANT properties? 2.) Is it possible to write a class in Groovy, then call its functions directly from WebTest XML files? 2.) How does one organize a test suite written in Groovy? It doesn't seem that using build.xml etc would be valid.
You have two possibilities :
1- use the build.xml file with <groovy> step. You can write a class, and pass it to the step <groovy file="mygroovyfile.groovy">. Then you can exchange data with the ant step via properties :
def props = step.webtestProperties
//get a property from the xml steps
def webtestproperty = props.propertyname
//add a new property that will be visible in the xml test
//be careful it's only strings...
props.put("newpropertyname","newpropertyvalue")

2- use a groovy class to trigger the step (as I show above). This allows you to build complex java objects and services that can be used to test the a scenario on the web site

I use both in fact. All my tests are run in Groovy, and I use Groovysteps inside to provide deep analysis of the pages and adapt behavior regarding of the context

3.) Is it better to create a Groovy test suite using WebTest and the WebTest file structure, or is it better to create a Grails project and import the WebTest functionality from an external source? Don't really understand what you mean... Just create your groovy tests and run them in a JVM... No need to add Grails upon it unless you used this framework to code the website. I do not know much about Grails/Webtest integration, so, you can forget what I've just said ;-)

3.) Does anyone have an example/proof-of-concept test suite written predominately in Groovy which they might be willing to share? Can't really share the entire code, because its purpose is really precise and might not fit other needs. But it can be adapt depending on the way you want to test. I can give you some tricks if you want

4.) Are there major drawbacks to using a 100% Groovy code base as opposed to WebTest's XML based tests? In fact, i think you gain in flexibility, but you loose a bit of abstraction. Groovy is pretty simple and really powerful, but it will always be longer to initiate a groovy way of coding than to write XML tests...

A last thing : With a 100% Groovy code, you can preprocess a database, run your tests against these values, pick results on web pages and then compare the tests results immediately with expectations. Groovy is a perfect way to analyze quickly XML documents produced by Webtest

Hope that helps

Florent

Pingwy
27, rue des arènes
49100 Angers



Harihara Vinayakaram a écrit :
Hi
I am not qualified to answer all the questions . But let me try answering a few that I know of. We started with the aim of developing a test suite in groovy but we gave it up since it was difficult to get engineers to learn groovy rather than ant specific syntax which they were familiar. It was easier to get newer tests in

So we ended up with a test harness in groovy (using the grails framework as the model ) that ran an automated suite by clicking on the links and the rest of the actual tests were in XML .

Yes XML has its own issues with webtest. Particulary (JIRA WT-382 ) which makes verification of tests a pain but gets the job done when integrated with Hudson

   Some issues we faced when we used groovy was :
a) It is tough to get the idea that groovy is interpreted . So you see print's in closures getting printed on the console and the actual tests getting executed much later

b) Organization of tests in groovy did not have any documentation but this was rectified . You can search the mailing list for examples

c) XPath support in groovy was very laboured . (i.e.) if you want to write a test and then decide on what to click based on some xPath expression was very tough

My experience has been that it is better to stick with XML predominantly and extend if needed using Groovy

Regards
Hari

On Tue, Jul 1, 2008 at 9:18 PM, <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:


    Hello all,

    I'm researching WebTest's feasibility for use in the testing of
    some web interfaces. We've achieved some very nice results with
    WebTest, and we like it, but we also feel that in some cases the
    use of XML is holding us back. We want functions which accept
    parameters and return values (includes and properties are not a
    good substitute), we need more data types (hashes, arrays, etc),
    we want more extensibility with third-party libraries, etc. It
    seems that WebTest's integration with Groovy would offer us the
    desired functionality.

    Unfortunately, as far as I can tell, the use of WebTest with
    Groovy is not very well-documented. I was hoping that perhaps you
    could help me out by answering some questions.

    1.) Can Groovy code return data to XML-based tests, somehow?
    Perhaps via ANT properties?
    2.) Is it possible to write a class in Groovy, then call its
    functions directly from WebTest XML files?
    2.) How does one organize a test suite written in Groovy? It
    doesn't seem that using build.xml etc would be valid.
    3.) Is it better to create a Groovy test suite using WebTest and
    the WebTest file structure, or is it better to create a Grails
    project and import the WebTest functionality from an external source?
    3.) Does anyone have an example/proof-of-concept test suite
    written predominately in Groovy which they might be willing to share?
    4.) Are there major drawbacks to using a 100% Groovy code base as
    opposed to WebTest's XML based tests?

    Thank you all for your help. Your input is greatly appreciated.

    Thanks,
    George Johnson


Reply via email to