Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Je teste mon code avec py.test
Search
Ronan Amicel
October 25, 2014
Programming
1
290
Je teste mon code avec py.test
Présentation à la conférence PyCon FR à Lyon le 25 octobre 2014.
Ronan Amicel
October 25, 2014
Tweet
Share
More Decks by Ronan Amicel
See All by Ronan Amicel
Développeur : ce qu’on ne m’a pas appris à l’école
ronnix
1
330
Refactoring: la méthode Mikado
ronnix
0
260
Techniques de test avancées en Python
ronnix
0
300
Product Development in a Startup
ronnix
2
250
Performance des frameworks web : Python vs The World (v1.1)
ronnix
1
8.1k
Performance des frameworks web : Python vs The World
ronnix
0
390
Introduction au Customer Development
ronnix
1
130
Rendez votre code Python plus beau !
ronnix
1
550
Trompez-vous, et vite !
ronnix
2
280
Other Decks in Programming
See All in Programming
Formの複雑さに立ち向かう
bmthd
1
720
“あなた” の開発を支援する AI エージェント Bedrock Engineer / introducing-bedrock-engineer
gawa
11
1.8k
最近のVS Codeで気になるニュース 2025/01
74th
1
250
Pulsar2 を雰囲気で使ってみよう
anoken
0
230
Grafana Loki によるサーバログのコスト削減
mot_techtalk
1
110
昭和の職場からアジャイルの世界へ
kumagoro95
1
350
Lottieアニメーションをカスタマイズしてみた
tahia910
0
120
Honoのおもしろいミドルウェアをみてみよう
yusukebe
1
200
Amazon ECS とマイクロサービスから考えるシステム構成
hiyanger
2
490
CNCF Project の作者が考えている OSS の運営
utam0k
5
690
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
7
2.5k
Flutter × Firebase Genkit で加速する生成 AI アプリ開発
coborinai
0
150
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
28
8.4k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.5k
Automating Front-end Workflow
addyosmani
1367
200k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
How GitHub (no longer) Works
holman
313
140k
Done Done
chrislema
182
16k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
RailsConf 2023
tenderlove
29
1k
Transcript
Je teste mon code avec py.test Ronan Amicel @amicel PyCon
FR — 25 octobre 2014 — Lyon
Ronan Amicel Fondateur @ Pocket Sensei Hacker en résidence @
The Family
Préambule
None
C’est quoi py.test ?
$ py.test • Un outil en ligne de commande pour
lancer vos tests : • découverte • exécution • affichage des résultats
import pytest • Un framework pour écrire vos tests •
avec très peu de bla bla • avec un mécanisme de fixtures très flexible
Le plan • Écrire ses tests avec py.test • Moins
de bla bla • Utiliser les fixtures • Lancer ses tests avec py.test • Comment passer facilement à py.test
Écrire ses tests avec py.test
Moins de bla bla
Rappel : unittest import unittest def fact(n): return 1 if
n <= 1 else n * fact(n - 1) class TestFact(unittest.TestCase): def test_three(self): self.assertEqual(fact(3), 6) if __name__ == '__main__': unittest.main()
Avec py.test def fact(n): return 1 if n <= 1
else n * fact(n - 1) def test_fact(self): assert fact(3) == 6
Démo assertions
Les fixtures
Setup from selenium import webdriver import pytest @pytest.fixture def browser():
return webdriver.Firefox() def test_pycon(browser): browser.get('http://pycon.fr/') assert 'Bienvenue' in browser.title
Durée de vie @pytest.fixture(scope='function') ... @pytest.fixture(scope='module') ... @pytest.fixture(scope='session') ...
Teardown (1/2) @pytest.fixture def browser(request): b = webdriver.Firefox() def teardown():
b.quit() request.addfinalizer(teardown) return b
Teardown (2) @pytest.yield_fixture def browser(): b = webdriver.Firefox() yield b
b.quit()
Fixtures paramétrées @pytest.fixture(scope='session', params=['firefox', 'chrome']) def browser(request): if request.param ==
'firefox': return webdriver.Firefox() elif request.param == 'chrome': return webdriver.Chrome() else: raise ValueError('Unknown browser')
Trouver et lancer ses tests avec py.test
Rappel : Python ≥ 2.7 $ python -m unittest discover
py.test $ py.test
Découverte • Parcours récursif des répertoires • Fichiers test_*.py ou
*_test.py • Classes qui commencent par Test • Fonctions et méthodes qui commencent par test_ • Reconnait les tests unittest et nose existants
Exécuter seulement certains tests $ py.test tata/ $ py.test toto.py
$ py.test --pyargs mon.module
Collecter les tests uniquement $ py.test --collect-only
Un test bien précis $ py.test fichier.py::fonction $ py.test fichier.py::Classe::methode
Seulement les tests dont le nom contient un mot-clé $
py.test -k toto $ py.test -k 'toto or tata'
Exécution
S’arrêter en cas d'erreur $ py.test -x $ py.test --maxfail=3
Lancer le debugger en cas d’erreur $ py.test --pdb $
py.test -x --pdb
Contrôle de l'affichage
Afficher le nom des tests $ py.test -v
Ne pas capturer la sortie standard $ py.test -s $
py.test --capture=no
Niveau de détail des tracebacks $ py.test --tb=auto # défaut
$ py.test --tb=long $ py.test --tb=short $ py.test --tb=line $ py.test --tb=native $ py.test --tb=no
Afficher les valeurs des variables locales $ py.test --showlocals $
py.test -l
Afficher un résumé à la fin $ py.test -rf #
failures
Afficher les tests les plus lents $ py.test --durations=10
Plugins
Lancer ses tests en parallèle $ pip install pytest-xdist $
py.test -n4
Couverture de tests $ pip install pytest-cov $ py.test --cov
myproj
Django $ pip install pytest-django $ py.test --ds=proj.settings
BDD $ pip install pytest-bdd $ py.test --ds=proj.settings
Passer facilement à py.test
Recette facile en 2 étapes 1. Utilisez py.test pour lancer
vos tests existants (unittest, doctest, nose, Django) 2. Commencez à (ré)écrire vos tests dans le style py.test
En savoir plus http://pytest.org/
Questions ?
Merci !