A fellow ThoughtWorker, Paul Hammant, recently announced his intent for QuickTest Professional. And his method? Provide some new technology tutorials for newbies, in the form of a series of open source automated tests for craft site Etsy.com.
He asked me to assist by providing some SpecDriver examples, and since I enjoy doing this stuff I am more than happy to help out.
So, I’ve updated the SpecDriver repository on Github to include some Etsy.com feature files, and working tests. It was a lot of fun to write these tests, because Etsy.com is awesomely testable. Its nicely formatted code with proper ids and class names makes automating against it a real treat.
The benefit of doing this exercise is that it’s meaty enough for me to get some insight into how other people code real automated tests. For example, I’ve had a look into a couple of the code samples and I see a lot of XPath selectors. I personally really dislike XPath stuff, just like I dislike XML as I find it hard to read, and less intuitive than using straight identifiers. I am proud that there isn’t a single XPath used in my Etsy.com examples.
Another thing that stood out to me was how embedded some of the stories are. For example, in the JBehave example the features are located under //etsy-stories/src/main/resources/stories, which took me some time to locate at first, and every time I forget where they are. I much prefer having a features folder in root that makes it pretty obvious what’s in there.
One thing I am very interested in is seeing how people specify tests. I found two of Paul’s scenarios repetitious so I moved them into a single scenario outline. Moving them into a scenario outline made me think about some different ways to test, so I added a new scenario, which didn’t require much more code, but strengthened my feature.
For example, Paul’s two scenarios:
Scenario: Advanced Search for a hat Given I am searching on Etsy.com When I specify the Knitting sub category And I search for hat Then there are search results Scenario: Advanced Search for a ring Given I am searching on Etsy.com When I specify the Jewelry sub category And I search for ring Then there are search results
Scenario Outline: Advanced Search for items in various categories that exist and don't exist Given I am searching on Etsy.com When I specify the <Sub Category> sub category And I search for <Search Term> Then I should see <Search Results> search results for <Search Term> Examples: | Sub Category | Search Term | Search Results | | Knitting | 'hat' | some | | Jewelry | 'necklace' | some | | Jewelry | 'specdriver' | no |
While I was at it, I noticed there was a spelling correction feature of the advanced search. I also thought it was a good idea to test that this was working correctly.
Scenario: Misspelling a word corrects search automatically Given I am searching on Etsy.com When I specify the Knitting sub category And I search for 'scalf' Then I should see some search results for 'scarf' And I should see that the search was for 'scarf' instead of 'scalf'
Now I’ve done this exercise using SpecFlow and WebDriver in C#, I’m keen to do it again using Cucumber & Watir (WebDriver) in Ruby, to compare the implementation. When I am done I will post it on here for you all to see. Enjoy.