[Owncloud] Automating what Frank means when he says "Please give it a really good hard test." Help build the test suite!

Thomas Müller thomas.mueller at tmit.eu
Fri Sep 21 09:20:25 UTC 2012


Am Freitag, dem 21.09.2012 um 11:09 schrieb Arthur Schiwon:
> Hey Jörn,
> 
> thanks a lot, it's too long of course, but i read it anyway.
> 
> You know i would really love to automatically test the LDAP backend. However, 
> it requires an available LDAP server, otherwise there is not much to test. Is 
> it possible to have one running on Jenkins?
>

Hi Arthur,

My plan in terms of executing the test suite is based on heavy usage of automated vm
creation using vagrant (http://vagrantup.com/)

This is necessary to test ownCloud with a great variety of server configurations:
[sqlite, mysql, pg, (oracle?)] x [apache, nginx, lighttpd, (IIS?)] x [....]

ldap - among other authentication backends will 'just' add another dimension to this configuration space.
 
> Plus, it is not enough to check if configuring and login works, but also all 
> the other lovely things which are used for local users. Then however, some 
> features do not work (e.g. current encryption, because password changes are 
> unknown). Do you have a fluffy sweet recipe for this, too? :)
> 

>From a pure behavior driven testing approach I would expect that all scenarios should 
work in any configuration combination.

Exceptions - as usual - prove the rule! ;-)

Take care,

Tom aka DeepDiver

> Cheers
> Arthur
> 
> On Friday, September 21, 2012 12:34:42 AM Jörn Friedrich Dreyer wrote:
> > 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-tes
> > t-suite [2] http://cukes.info/
> > [3] http://ci.tmit.eu/
> > [4] https://github.com/cucumber/cucumber/wiki/Step-Definitions
> _______________________________________________
> Owncloud mailing list
> Owncloud at kde.org
> https://mail.kde.org/mailman/listinfo/owncloud



More information about the Owncloud mailing list