Saturday, December 12, 2009

Selenesse, nee WebTest

Marisa Seal and I have officially taken over maintenance of Gojko Adzic's 'WebTest' project. If you want to know why, I wrote about it here.

Marisa is doing the coding (so far; I've never written any Java and would like to learn) and I'm being something like a Customer. I've used similar tools in the past, and I know what I want this tool to do.

Eventually we're going to need documentation for our first release (0.9?), so it seems like a good idea to write down what we're doing, and this seems like a fine place to do it.

The first thing is that we want to change the name of the project to avoid confusion over the other tool with the same name, Canoo WebTest. My favorite so far is 'Selenesse'. Not only does it give a sense of the bridging nature of the tool, it also is very close to the word for the high-level selenium language known as 'Selenese', and since Selenium borrowed a lot of structure from Fitnesse early on, it's kind of poetic to bring it back around like that.

Marisa wants to host the project on Github not Sourceforge. I've used them both, so that switch will probably happen. This has the added benefit of leaving the old project on Sourceforge if anyone ever has a use for it.

We're going to change the namespace not to use "neuri", Mr Adzic's own company name.

The project will support SLIM and scenario tables from the beginning. I'm really liking scenario tables.

The project will have better support for Se-IDE-reported convenience methods. For instance, we've implemented support for clickAndWait, with more such coming.

The project will have a new approach to methods with two arguments. Because of how SLIM is built, methods with 2 arguments such as type() or select() that are normally spelled

| type | | |
| select | | |

are implemented as

| type | | in | |
| select | | in | |

In the course of working on Selenesse, Marisa has also become a committer on the Fitnesse project, so eventually we can support both styles of 2-argument commands.

One big change we're making is to have all Se commands return boolean values to Fitnesse. (This is what makes Fitnesse turn a line red or green; otherwise, if the command fails, Fitnesse returns an exception not a test failure.) At the moment, WebTest returns boolean values only for explicit assertions such as verifyFoo or waitForFoo. I want to emulate SWAT and WikiTest and have every test step return a boolean so that Fitnesse records each test step as a pass or fail. I have a long justification for doing this I've written about elsewhere.

Except that we hit a snag with this. We found that we need the Selenium command check(). Unfortunately, "check" is a reserved word in Fitnesse/SLIM. My suggestion here is to emulate WikiTest and Se-RC in Perl, which provides two versions of each method; a method that does not return boolean, such as click() or check(), and a method with the same name with 'Ok' appended that *does* return a boolean, e.g. checkOk(), clickOk(). If I'm not mistaken, this scheme is available in Se-RC in Perl, so having both versions of the method available would add a certain amount of compatibility between Selenesse and (at least) Se-RC in Perl.

At the moment all our work has been in Java, but already we have interest from a .NET user who may join the project also. The Java work is going to take priority, because we need that for our real job, but .NET support should come along eventually.

Finally, I have to acknowledge my own deep respect and gratitude for the people at Socialtext and at Ultimate Software who build the WikiTest framework and the SWAT tool. I've been an expert user of both, and Selenesse will be borrowing the best features of both projects.

Selenesse, though, will be far more portable, with far fewer dependencies than either SWAT or WikiTest.

1 comment:

TestWithUs said...
This comment has been removed by a blog administrator.