Saturday, January 31, 2009

Grails WebTest Plugin 0.6 Released

The latest version of the Webtest Plugin has been released for Grails 1.0.4. A release for 1.1 will follow shortly, with a newer WebTest snapshot which is now Java 5 dependent.

Release Notes

  • setUp/tearDown at the method and class level

    • classSetUp() and classTearDown() are run as individual test cases. SetUp() and tearDown() are run as the first and last steps of each test case.

  • Superclass changes in WebTest

    • The WebTest superclass now automatically runs all methods starting with test. This saves you having to manually maintain the suite method unless you really want to for test order reasons.

    • WebTest will also generate the test case name from the class and method name removing the need for repetitive webtest('blah'){...} code. The generated test name also makes it much easir to find the failing test from the generate reports.

    • MethodMissing code has been added so you can refactor a group of steps without having to wrap them in and ant.group closure.

    • You can now call config() as the first step in your test method to set WebTest options like host, port and ajax support

  • -nostart option allows you to runthe tests against a server that is already running. It should come after run-webtest on the command line

  • System parameters now passed through to WebTest. They need to be placed directly after grails on the command line e.g. grails -Dwt.headless=true run-webtest

    • -Dwt.headless=true to hide Swing monitor and stop browser launching

    • -Dserver.port=XXXX to get the tests to run against a server on a non-default port

  • The plugin has been updated with a recent snapshot version of WebTest which includes an update of HtmlUnit to version 2.3

  • Application lib folder now on WebTest classpath. This avoids the need to duplicate/move libraries into webtest/home/lib

  • Custom steps

    • You can now extend com.canoo.webtest.steps.Step by placing groovy classes in webtest/tests/step. They will be automatically loaded at runtime and allow for easy testing of complicated scenarios such as JSON interfaces and email integration

      • The last project I worked on used these custom steps to start, check then stop an embedded Wiser SMTP server for testing email functionality.

Upgrade Instructions

delete plugins/webtest-0.x

svn delete webtest/home, commit.

This avoids svn issues as the install script deletes the folder and extracts the latest build over the top, removing the .svn directories

grails install-plugin webtest

6 comments:

Schalk Neethling said...

Nice plug-in Lee, posted an announcement here: http://tinyurl.com/bubcbp

Please feel free to add any future releases there as well.

Regards,
Schalk

Unknown said...

Very Good Plugin

Unknown said...

:)

j pimmel said...

Nice post lee. I was tinkering with some more advanced Custom step creation and when i investigated why something was not working, I found that the grails classpath doesn't appear to be getting on the webtest classpath.

The file 'call-webtest.xml' references

<fileset dir="${grailsHome}/lib" includes="commons-cli*.jar"/> only.

Suggesting to me that only the commons-cli.jar is sourced from grails CP into webtest cp.

Would I be reading this right?

Lee said...

Hi J,

yes, only some of the Jars are taken across to the WebTest classpath. This was around before I started on the plugin but I think it was to avoid library clashes between Grails and WebTest. Unfortunately it means you cannot reference your grails application code or plugins from your webtests. There is a JIRA related to fixing this so if you have any ideas on how it could be achieved please add them to the issue.

cheers

Lee

j pimmel said...

Lee,

Thanks for your note. I posted a short writeup on using a custom webtest step to test a JSON controller action.

http://act.ualise.com/blogs/continuous-innovation/2009/07/json-webtests-with-grails/

Cheers

Jerome