A robot framework library for Django.
Project description
Introduction
DjangoLibrary is a web testing library to test Django with Robot Framework. It uses Selenium2Library to run tests against a real browser instance.
The library will automatically start and stop your Django instance while running the tests. It also comes with serveral autologin keywords that allow you to login different users during your tests, without the need to actually access the login page.
DjangoLibrary is tested against Django 1.8.x and 1.9.x with SQLite and Postgres on Python 2.7 and 3.5.
Documentation
Installation
robotframework-djangolibrary is still in alpha, therefore you have to use ‘–pre’ to install it with pip:
$ pip install --pre robotframework-djangolibrary
In order to be able to use DjangoLibrary’s autologin keywords you have to add the AutologinAuthenticationMiddleware to your MIDDLEWARE_CLASSES in your settings.py:
MIDDLEWARE_CLASSES = ( ... 'django.contrib.auth.middleware.AuthenticationMiddleware', 'DjangoLibrary.middleware.AutologinAuthenticationMiddleware', )
First Robot Test
In order to write your first robot test, make sure that you include Selenium2Library and DjangoLibrary. Create a test.robot file with the following content:
*** Variables *** ${HOSTNAME} 127.0.0.1 ${PORT} 55001 ${SERVER} http://${HOSTNAME}:${PORT}/ ${BROWSER} firefox *** Settings *** Documentation Django Robot Tests Library Selenium2Library timeout=10 implicit_wait=0 Library DjangoLibrary ${HOSTNAME} ${PORT} path=mysite/mysite manage=mysite/manage.py settings=mysite.settings db=mysite/db.sqlite3 Suite Setup Start Django and open Browser Suite Teardown Stop Django and close Browser *** Keywords *** Start Django and open Browser Start Django Open Browser ${SERVER} ${BROWSER} Stop Django and close browser Close Browser Stop Django *** Test Cases *** Scenario: As a visitor I can visit the django default page Go To ${SERVER} Wait until page contains element id=explanation Page Should Contain It worked! Page Should Contain Congratulations on your first Django-powered page.
Run Tests
Then you can run the test with pybot:
$ pybot test.robot
The output should look like this:
============================================================================== Test :: Django Robot Tests ============================================================================== Scenario: As a visitor I can visit the django default page | PASS | ------------------------------------------------------------------------------ Test :: Django Robot Tests | PASS | 1 critical test, 1 passed, 0 failed 1 test total, 1 passed, 0 failed ============================================================================== Output: /home/timo/workspace/prounix/robotframework-djangolibrary/output.xml Log: /home/timo/workspace/prounix/robotframework-djangolibrary/log.html Report: /home/timo/workspace/prounix/robotframework-djangolibrary/report.html
Test Isolation
robotframework-djangolibrary does not provide isolation between tests by default. This means if you add an object to the database in a test, this object will be present in the next test as well. You need to cleanup yourself in order to have a proper isolation between the tests. You can use the robotframework “Test Teardown” call to call the “Clear DB” keyword after each test:
*** Settings *** Library Selenium2Library timeout=10 implicit_wait=0 Library DjangoLibrary ${HOSTNAME} ${PORT} path=mysite/mysite manage=mysite/manage.py settings=mysite.settings db=mysite/db.sqlite3 Suite Setup Start Django and open Browser Suite Teardown Stop Django and close Browser Test Teardown Clear DB
Development
Checkout repository from github:
$ git clone https://github.com/kitconcept/robotframework-djangolibrary.git
Create a virtual Python environment:
$ cd robotframework-djangolibrary/ $ virtualenv .py27 $ source .py27/bin/activate
Install robotframework-djangolibrary in development mode:
$ python setup.py develop
Install the requirements:
$ pip install -r requirements.txt
Run Unit/Integration-Tests:
$ pytest mysite/
Run Acceptance Tests:
$ pybot DjangoLibrary/tests/
1.0a6 (2016-04-29)
New Features:
Python 3 compatibility. Note that the latest offical release of robotframework-selenium2library is currently not compatible with Python 3. See https://github.com/HelioGuilherme66/robotframework-selenium2library/releases for a working pre-release and details. [timo]
Support for Postgres added. All Django database backends should work. We test SQLite and Postgres only though. [timo]
Add ‘Factory Boy’ keyword. This allows us to use factory_boy factories in Robot Framework tests. [timo]
Breaking Changes:
Drop Django 1.7.x support. We test and support Django 1.8.x and 1.9.x. [timo]
Change ‘Clear DB’ implementation to use “python manage.py flush” instead of deleting and re-building the database. [timo]
Remove ‘Debug’ and ‘Pause’ keywords. The ‘Debug’ keyword, which is provided by robotframework-debuglibrary is sufficient. [timo]
1.0a5 (2016-02-11)
Make middleware part Python 3 compatible.
robotframework-djangolibrary is still not compatible with Python 3 because robotframework-selenium2library does not work with Python 3 yet. Though, you can install robotframwork-djangolibrary on Python 3 with “pip install robotframework-djangolibrary –no-deps” and then run your tests with Python 2.7. [timo]
Add ‘Framework :: Robot Framework’ classifier to setup.py. [timo]
1.0a4 (2016-02-05)
Use ‘migrate’ instead of ‘syncdb’ for Django > 1.7.x. [timo]
1.0a3 (2015-09-28)
Add list_classifiers to setup.py. [timo]
Fix user creation and startup. This fixes #3. [MatthewWilkes]
1.0a2 (2015-06-25)
Remove Django and zest.releaser from requirements.txt. This fixes #2. [timo]
1.0a1 (2015-06-24)
Initial release. [timo]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for robotframework-djangolibrary-1.0a6.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2d1d4fbcc3abcf31ad6407aa92d94e62dc5604b782c23b6e48cee39292c4814a |
|
MD5 | 0bc1ceb043bb58ea28234e6b37c1f6d6 |
|
BLAKE2b-256 | 05a2f6e45762845fe0d7554d727cc0b1bafb049b0e7062dd16b004f56a28eb13 |