Selenium
Selenium est utilisé pour réaliser les tests front-end. Il s’agit d’un outil très utilisé qui propose des interfaces dans différents languages dont Python. Il est donc possible de l’utiliser avec Django.
Pour l’utiliser, il suffit au développeur d’installer Selenium et un webdriver.
Les tests front-end
Installation du webdriver
Il est nécessaire d’installer deux choses pour utiliser Selenium avec Django : Selenium (présent dans requirements-dev.txt
) et un webdriver. Pour ceci, il suffit d’exécuter :
# Installation du webdriver
wget https://github.com/mozilla/geckodriver/releases/download/v0.30.0/geckodriver-v0.30.0-linux64.tar.gz
mkdir geckodriver
tar -xzf geckodriver-v0.30.0-linux64.tar.gz -C geckodriver
# Ajout du webdriver dans le PATH
export PATH=$PATH:$PWD/geckodriver
Pour Mac OS ou Windows, il suffit de lire les instructions à l’adresse suivante : https://github.com/mozilla/geckodriver/
Attention
La version de geckodriver à installer dépend des versions de Selenium et de Firefox ! Par exemple, la version 30.0 de geckodriver fonctionne correctement avec Selenium >= 3.14 et Firefox >= 78 ESR mais peut ne pas fonctionner avec d’autres versions. Mozilla met à disposition une table de compatibilité. En cas de problème lors de l’installation, ne pas hésiter à demander de l’aide !
Écriture des tests
Il est donc possible d’écrire des tests pour Django directement en utilisant la document de Selenium ici : <http://selenium-python.readthedocs.io/> et le StaticLiveServerTestCase de Django (<https://docs.djangoproject.com/fr/2.1/ref/contrib/staticfiles/#django.contrib.staticfiles.testing.StaticLiveServerTestCase>).
Il est aussi possible d’utiliser l’extension Firefox (<https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/>) et d’exporter le test généré, cependant, il est nécessaire de le réécrire pour prendre en compte Django et Python 3. De plus, il est nécessaire d’ajouter un tag à la classe afin de pouvoir lancer les tests Selenium séparément.
Voici le contenu d’un test :
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from django.test import tag
from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options
@tag("front")
class MySeleniumTests(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
options = Options()
options.add_argument("--headless")
cls.selenium = Firefox(options=options)
cls.selenium.implicitly_wait(30)
@classmethod
def tearDownClass(cls):
cls.selenium.quit()
super().tearDownClass()
def test_zestedesavoir_is_present(self):
self.selenium.get(self.live_server_url + "/")
Lancement des tests
Il suffit d’utiliser le Makefile et de lancer make test-back-selenium
.