wiki:DeveloperGuidelines/Testing/Selenium

Version 22 (modified by graeme, 12 years ago) ( diff )

--

Testing

"A bug is a test case you haven't written yet"

"Unit Tests allow merciless refactoring"

This page defines what our current approach versus our BluePrint for future options

Test-Driven Development is a programming style which says that you 1st write your test cases (from the specs) & then proceed to make them pass.

Introduction

Selenium provides the ability to test Sahana Eden as users see it - namely through a web browser. This therefore does end-to-end Functional Testing, however it can also be used as Unit Testing

We are building our framework around the new WebDriver, despite having some legacy code in the older format:

The tests are stored in eden/modules/tests

Installation of the testing environment in your machine

In order to execute the automated Selenium powered test scripts, you must install the Selenium Web Drivers into Python.

Download latest Selenium package:

  1. http://pypi.python.org/packages/source/s/selenium/selenium-2.20.0.tar.gz
  2. Extract it
  3. CMD/Terminal bash:
    cd selenium-2.20.0
    python setup.py install
    

Running / Executing Automated test scripts:

Before running the Selenium scripts, you should put your database into a known state:

clean

For the whole test suite, it is assumed that you are using:

deployment_settings.base.prepopulate = ["IFRC_Demo"]

Run the whole test suite for the Eden application:

cd web2py
python web2py.py -S eden -M -R applications/eden/modules/tests/suite.py

Run a single test script for the Eden application:

cd web2py
python web2py.py -S eden -M -R applications/eden/modules/tests/suite.py -A mytestfunction

Writing / Creating your own test scripts:

We aim to make it as easy as possible to write additional tests, which can easily be plugged into the testing suite or/and executed separately.

The canonical example is: eden/modules/tests/org/org_create_organisation.py

New tests should be stored in a subfolder per module, adding the foldername to eden/modules/tests/__init__.py & creating an __init__.py in the subfolder.

The key is to make tests which are as least fragile as possible through:

  • State (we should be able to run individual tests easilty, which check their current state as-required)
  • Deployment_Settings
  • Localisation
  • Theme

This suggests refactoring tests to centralise common elements into a library to mean fixes should only happen in 1 place.

There are a number of possible selectors to use to find your elements...the 'ID' may be the most stable, so don't be afraid of patching the code to add IDs where you'd like to be able to reach them reliably:

We separate data out into a separate file, so that this is easy to change to allow reruns of the tsts with different data sets.

ToDo

See Also

Systers' approach:

Alternative Options:

Note: See TracWiki for help on using the wiki.