Multi-browser Selenium tests with Django 1.4+
In Selenium tests with Django 1.4+ we saw how to run Selenium tests on Django 1.4+ based projects.
However, these tests were run on a single Web Driver, ie. a single browser.
Fortunately, Selenose 1.3 makes it easy to test on multiple browser. Let's switch the single browser tested project to a multiple browser tested project.
Sample project
Let's use the same poll application from the Django tutorial.
The source code can be found on the django14-selenose
branch of this repository. Clone it with:
$ git clone -b django14-selenose https://github.com/shiningpanda/djangotutorial-selenium.git
Then step in the new djangotutorial-selenium
folder, and install all requirements with pip by typing:
$ pip install -r requirements.txt
Configure tests
We should be able to switch browser via an option on the manage.py jenkins
command line. To do so, edit djangotutorial/settings.py
and set JENKINS_TASKS
:
JENKINS_TASKS = [
'django_jenkins.tasks.run_pylint',
'django_jenkins.tasks.with_coverage',
'django_jenkins.tasks.django_tests',
'selenose.tasks.selenium_driver',
]
The first tasks are the django-jenkins default ones, but note the last one: selenose.tasks.selenium_driver
. This is the core of the solution.
Write tests
In our project, Selenium tests are located in the polls/tests.py
module.
Make all you tests inherit from selenose.cases.LiveServerTestCase
. A test template would be:
from selenose.cases import LiveServerTestCase
class SampleTestCase(LiveServerTestCase):
def test(self):
self.driver.get(self.live_server_url)
# You scenario here
Run tests
Then to run tests on Firefox, just execute:
$ python manage.py jenkins --selenium-driver=firefox
Creating test database for alias 'default'...
..
----------------------------------------------------------------------
Ran 2 tests in 15.258s
OK
Destroying test database for alias 'default'...
On Chrome? easily done (requires the Chrome Driver):
$ python manage.py jenkins --selenium-driver=chrome
This section details all the capabilities.
Need a Selenium Server?
Edit djangotutorial/settings.py
and append selenose.tasks.selenium_server
to JENKINS_TASKS
:
JENKINS_TASKS = [
# Other tasks
'selenose.tasks.selenium_server',
]
More?
For a full documentation, see the Django Jenkins section on selenose.readthedocs.org.
What's next?
In the next blog post, we will see how to integrate this project with Jenkins!