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
320
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
360
Refactoring: la méthode Mikado
ronnix
0
270
Techniques de test avancées en Python
ronnix
0
330
Product Development in a Startup
ronnix
2
270
Performance des frameworks web : Python vs The World (v1.1)
ronnix
1
8.2k
Performance des frameworks web : Python vs The World
ronnix
0
420
Introduction au Customer Development
ronnix
1
150
Rendez votre code Python plus beau !
ronnix
1
560
Trompez-vous, et vite !
ronnix
2
300
Other Decks in Programming
See All in Programming
副作用と戦う PHP リファクタリング ─ ドメインイベントでビジネスロジックを解きほぐす
kajitack
3
520
商品比較サービス「マイベスト」における パーソナライズレコメンドの第一歩
ucchiii43
0
270
대규모 트래픽을 처리하는 프론트 개발자의 전략
maryang
0
110
SwiftでMCPサーバーを作ろう!
giginet
PRO
2
220
#QiitaBash TDDで(自分の)開発がどう変わったか
ryosukedtomita
1
350
ZeroETLで始めるDynamoDBとS3の連携
afooooil
0
150
Reactの歴史を振り返る
tutinoko
1
170
画像コンペでのベースラインモデルの育て方
tattaka
3
1.1k
リバースエンジニアリング新時代へ! GhidraとClaude DesktopをMCPで繋ぐ/findy202507
tkmru
7
1.7k
Flutterと Vibe Coding で個人開発!
hyshu
1
220
技術的負債で信頼性が限界だったWordPress運用をShifterで完全復活させた話
rvirus0817
0
150
NEWT Backend Evolution
xpromx
1
170
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
512
110k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Become a Pro
speakerdeck
PRO
29
5.5k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
How to train your dragon (web standard)
notwaldorf
96
6.1k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
Faster Mobile Websites
deanohume
308
31k
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 !