|
@@ -0,0 +1,48 @@
|
|
|
|
|
+En voyant le titre de cette page, tu te rappelles sûrement qu'avant de s'embarquer dans cette exploration de HTTP, on parlait de Python et de TDD !
|
|
|
|
|
+
|
|
|
|
|
+Peut-être ne vois-tu pas encore le rapport entre notre travail préparatoire sur le TDD, et ces nouvelles infos sur HTTP.
|
|
|
|
|
+
|
|
|
|
|
+Alors voici un rappel du plan :
|
|
|
|
|
+
|
|
|
|
|
+- Apprendre un minimum sur Python et le TDD : *fait*.
|
|
|
|
|
+- Comprendre le fonctionnement de HTTP et d'un serveur web : *en cours*.
|
|
|
|
|
+- Ajouter des fonctionnalités à ce mini-serveur web : *en cours*, du moins l'intention, à la page précédente, était d'ajouter la possibilité de gérer les requêtes POST !
|
|
|
|
|
+
|
|
|
|
|
+<img src="https://media.giphy.com/media/WL950i62D3HQA/giphy.gif" alt="kata" style="float: left; padding: 0 25px 25px 0;" />
|
|
|
|
|
+
|
|
|
|
|
+Le fait que j'allais me lancer tête baissée dans le handler POST est significatif : maintenir la *discipline* du TDD est difficile, au début, et même quand on a déjà l'habitude d'écrire des tests.
|
|
|
|
|
+
|
|
|
|
|
+On est souvent pressé d'ajouter des fonctionnalités à tout prix. Et c'est mal ! C'est pourquoi j'insiste sur l'importance de prendre de bonnes habitudes dès maintenant.
|
|
|
|
|
+
|
|
|
|
|
+Les experts en TDD comparent son apprentissage à la pratique des katas en arts martiaux : des mouvements qui sont au début peu naturels, mais qu'à force de répéter, on assimile.
|
|
|
|
|
+
|
|
|
|
|
+<div style="clear:both;"></div>
|
|
|
|
|
+
|
|
|
|
|
+##### Donc, retour aux tests
|
|
|
|
|
+
|
|
|
|
|
+Nous avons terminé la section précédente, "Bases de Python", avec un exercice de TDD. Nous avons écrit la fonction `est_bissextile()` en écrivant d'abord des tests.
|
|
|
|
|
+
|
|
|
|
|
+Ce type de test que nous avons écrit est appelé **test unitaire**. Ce sont des tests qui permettent de vérifier le fonctionnement d'un composant précis de l'application que l'on construit. Si jamais on change l'implémentation, le test doit toujours passer, sinon on a cassé quelque chose, et on parle de *régression*.
|
|
|
|
|
+
|
|
|
|
|
+Un autre type de test est le **test fonctionnel** ou **test d'intégration**. Il sert à tester l'application avec une vue d'ensemble, plus globale que les tests unitaires. En fait, le test fonctionnel vise à simuler l'interaction d'un véritable utilisateur avec l'application.
|
|
|
|
|
+
|
|
|
|
|
+C'est là que va intervenir Selenium : il permet de contrôler un navigateur (ici Firefox) via geckodriver qu'on a téléchargé au début.
|
|
|
|
|
+
|
|
|
|
|
+Avant d'aller plus loin et d'ajouter d'autres choses à notre mini-serveur, on va écrire un test dans lequel on va décrire ce qu'on voudrait que notre page web affiche, et comment on voudrait pouvoir interagir avec.
|
|
|
|
|
+
|
|
|
|
|
+Commençons par faire simple :
|
|
|
|
|
+
|
|
|
|
|
+```python
|
|
|
|
|
+from selenium import webdriver
|
|
|
|
|
+
|
|
|
|
|
+# Instance de Firefox contrôlée par webdriver
|
|
|
|
|
+browser = webdriver.Firefox()
|
|
|
|
|
+
|
|
|
|
|
+# On pointe ce browser vers l'URL de notre mini-serveur
|
|
|
|
|
+browser.get('http://localhost:8081')
|
|
|
|
|
+
|
|
|
|
|
+# En toute logique, on voudrait que le HTML généré par notre serveur ait un titre
|
|
|
|
|
+assert 'Mini-Serveur' in browser.title
|
|
|
|
|
+
|
|
|
|
|
+browser.quit()
|
|
|
|
|
+```
|