Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Je teste mon code avec py.test

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

More Decks by Ronan Amicel

Other Decks in Programming

Transcript

  1. $ py.test • Un outil en ligne de commande pour

    lancer vos tests : • découverte • exécution • affichage des résultats
  2. import pytest • Un framework pour écrire vos tests •

    avec très peu de bla bla • avec un mécanisme de fixtures très flexible
  3. 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
  4. 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()
  5. Avec py.test def fact(n): return 1 if n <= 1

    else n * fact(n - 1) def test_fact(self): assert fact(3) == 6
  6. 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
  7. 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')
  8. 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
  9. Seulement les tests dont le nom contient un mot-clé $

    py.test -k toto $ py.test -k 'toto or tata'
  10. 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
  11. 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