Jörn - thanks a lot for your work - this is the way to go! I'm really looking forward to see all your scenarios arriving!
If anybody has question feel free to ping me on IRC - I'm happy to help! Take care, Tom aka DeepDiver Am Freitag, dem 21.09.2012 um 0:34 schrieb Jörn Friedrich Dreyer: > TLDR: Describe a feature with scenarios in gherkin[1]! Do it! Do it now! > > Have you, too, asked yourself what Frank actually means when he says > "Please give it a really good hard test."? I always imagine a dark > cellar, chained to a desk, where I have to sit late into the night to > click through every possible action ownCloud offers. What else would a > good hard test be? > > But I don't want to ruin my evenings like this. I prefer sitting in my > garden, sipping a cold beer (you are hereby invited to join me, should > you visit Hannover). There must be a better solution! I mean, we are > software developers ... we automate things! So, Tom (DeepDiver) and I > started working on setting up an automated test suite that emulates a > user sitting in front of a browser, doing all the "really good hard > test"ing. Now we need to tell it what to do! > > As an example I just committed some Gherkin scenarios for the core files > app[1]. The nice thing about them is: they are readable by your mom! > Take for example, this excerpt: > > <gherkin> > Feature: files > In order to organize my files > As a mom > I want to have basic file management > > Background > Given I am logged in > # these are the files hosted on demo.owncloud.org > And I am in the files app > > Scenario: create files and folders > When I click on the new button > And I click on the new <type> action > And I enter <filename> > Then I should see <filename> > And <filename> should have mimetype <mimetype> > And <filename> should have size <size> > > Examples: > | type | mimetype | filename | size | > | file | text/plain | simplefile.txt | 0 | > | file | text/plain | äöü ß ÄÖÜ € @.txt | 0 | > | file | text/x-c | test.cc | 0 | > | file | text/x-php | test.php | 0 | > | folder | httpd/unix-directory | Testfolder | 0 | > | folder | httpd/unix-directory | Testfolder with spaces | 0 | > </gherkin> > > Not that hard to understand, is it? > > Until now, this is basically a checklist, a tester could use to do > Franks bidding. Now, as I said earlier, I tend to find this kind of > tedious task ... very boring. Enter cucumber[2]: with a little glue > code, these gherkin scenarios can be executed as unit tests! The clue > code translates "I click on the new button" into code that cucumber uses > to execute actions in a browser and check results. > > At this point I admit that I sometimes forget to execute the test suite > before commiting. Enter our continuous integration server[3] (thx again > tom for your awesome work there, too!): > Jenkins will monitor the commits and execute the cucumber test suite > after each checkin. He currently posts the result of the simpletest test > suite into the IRC dev channel allowing you to blame me whenever I break > a feature our users expect ;) > > In the end, this process will enable us to automate large parts of QA by > testing each commit against every feature with combination of sqlite, > mysql, Postgresql, Oracle, Firefox and Chrome/Chromium. We will always > be able to say "Feature A works, which means that you can do scenario X, > Y and Z". I cannot stress enough how awwwesome ... err ... sweeeeeeet > this is! > > Sure,there is still a ton of work left to do, and as we all know the > first steps are always the hardest. Fortunately, even your mom, dad, > sister, brother or significant other can help us with the first step - > writing textual scenarios for features: > > 1. Go to http://demo.owncloud.org > 2. Pick an app from the navigation bar > 3. Keep the gherkin syntax page open for reference > https://github.com/cucumber/cucumber/wiki/Gherkin > 4. Learn from feature examples > https://github.com/aslakhellesoy/cucumber-rails-test/tree/master/features (all > the *.feature files) > 5. Start with a general Feature description: > > Feature: [the app name is enough for now] > In order to [goal] > [stakeholder] > wants [behavior] > > 6. Flesh out some scenarios with Given-When-Then: > https://github.com/cucumber/cucumber/wiki/Given-When-Then > > Scenario: browsing the gallery > Given I am logged in > And I have uploaded the demo files > When I go to the gallery > Then I want to see a thumbnail of <image> > > Examples: > | image | > | Demo Image - ccc.jpg | > | Demo Image - Laser Towards Milky Ways Centre.jpg | > | Demo Image - Northern Lights.jpg | > > 7. Send the .feature as a response to this message or directly to me. > > I'll take care of aggregating the first round of scenarios into > features. We'll then create a public repository on github and start > writing the glue code (Step Definitions[4]). But thats another topic for > the future. > > Now, go ahead, write a few feature scenarios, and ask your neighbor to > do it, too! It'll save you lots of hours of silly clicking in the night! > And it will bring world peace! > > so long > > Jörn > > [1] > https://gitorious.org/owncloud-acceptance-test-suite/owncloud-acceptance-test-suite > [2] http://cukes.info/ > [3] http://ci.tmit.eu/ > [4] https://github.com/cucumber/cucumber/wiki/Step-Definitions > > -- > Jörn Friedrich Dreyer ([email protected]) > Software Developer > ownCloud GmbH > > Your Data, Your Cloud, Your Way! > > ownCloud GmbH, GF: Markus Rex, Holger Dyroff > Schloßäckerstrasse 26a, 90443 Nürnberg, HRB 28050 (AG Nürnberg) > _______________________________________________ > Owncloud mailing list > [email protected] > https://mail.kde.org/mailman/listinfo/owncloud _______________________________________________ Owncloud mailing list [email protected] https://mail.kde.org/mailman/listinfo/owncloud
