pytest session scope fixtures – Tests Python

By | avril 11, 2019

Cours Python en ligne

Dans les écrous et les boulons des appareils pytest, j'ai remarqué que vous pouvez spécifier l'étendue de la session de sorte qu'un appareil ne s'exécute qu'une fois par session de test et qu'il soit disponible pour plusieurs fonctions, classes et modules de test.

Dans cet article, je vais vous montrer un exemple simple pour que vous puissiez le voir en action.

Voici le tableau du post précédent:

une fonction Exécuter une fois par test
classe Exécuter une fois par classe de tests
module Exécuter une fois par module
session Exécuter une fois par session

Un fichier séparé pour les fixtures, conftest.py

Avec les fonctions, les classes et les modules, il est tout à fait raisonnable que le code de la fixture soit dans le même fichier que les tests.
Mais maintenant, avec la session, cela n’a plus de sens.

Nous pouvons les mettre dans conftest.py. C'est un fichier nommé spécial que pytest recherche.
La documentation indique que c'est pour les plugins locaux, mais nous pouvons également l'utiliser pour les fixtures locales. Consultez le site pytest.org pour connaître l'emplacement et la portée de conftest.py.

Exemple simple de fixtures de portée de session

Je pense que le plus clair est de voir cela en action.

J'ai 4 fichiers:

  • conftest.py
    • 2 rencontres
    • my_own_session_run_at_beginning, un appareil automatique avec portée de session
    • some_resource, un appareil normal non autouse avec une étendue de session
  • test_alpha.py
    • 2 fonctions de test simples
    • test_alpha_1, n'a pas de fixtures nommées
    • test_alpha_2, a un appareil nommé, une_source
  • test_beta.py
    • similaire à test_alpha.py, mais avec des tests unittest
  • test_gamma.py
    • similaire à test_alpha.py, mais avec des tests de classe

conftest.py:

test_alpha.py:

test_beta.py:

test_gamma.py:

Sortie

Courir avec pytest -s -v

Fonction de mixage, portée du module et de la session

Disons que j’ai:

  • une fixture de portée de fonction 'resource_c'
  • qui utilise un fixture de module 'fixture_b'
  • qui utilise un fixture de session 'fixture_a'

Tout cela fonctionne bien.
Également dans cet exemple, j’ai ajouté quelques appareils autouse juste pour le plaisir.

conftest.py:

test_one_two.py:

test_three_four.py:

Cela me semble raisonnable.
Que penses-tu qu'il va se passer?

sortie:

AVERTISSEMENT: vous devez utiliser une portée de plus en plus grande

Si vous faites cela dans le mauvais ordre, les choses vont mal.

Échangeons la portée sur quelques articles.

conftest.py:

Nous aurons un avertissement comme celui-ci (ou plusieurs):

Alors. Ne fais pas ça.

Avertissement s'applique aux appareils encastrés

Pytest comprend certains appareils intégrés. Je crois que tous sont fonctionnels.
Cela signifie que vous ne pouvez pas les utiliser à partir de fonctions autres que des appareils fonctionnels.

Prenant plus loin

Le code que j'ai montré est pour une exécution simple au début et à la fin des fixtures.
Cependant, vous pouvez faire plus avec les fixtures de session.
Le site pytest.org a un exemple intéressant: un appareil de session qui peut examiner tous les tests collectés.

Pour quoi utilisez-vous les fixtures de session?

J'aimerais entendre des exemples et des cas d'utilisation pour les montages de session.
S'il vous plaît laissez un commentaire ou laissez-moi savoir @brianokken de comment vous les utilisez.