1, pytest fixtures
vise à fournir une base fixe, de sorte que le test peut être fiable, répétitivement réalisée sur cette base, comparative xUnit
classique setup/teardown
forme, il est une nette amélioration dans les aspects suivants:
fixture
Nous avons un nom clair , en déclarant qu'il ne peut en fonction, classe, module, ou même être activé pendant l'essai utilisé lors de la session;fixture
Dans une manière modulaire . Parce que chaquefixture
nom peut déclencher une fonction de fixation , et cela peut fonction dans l' appel à leur tour d' autresfixture
;fixture
Gestion élargie du simple au test unitaire de tests fonctionnels complexes , et l'ensemble permet des options de configuration paramétriquesfixture
cas de test, ou à travers des fonctions, des classes, des modules, ou même la réutilisation de toute séance d'essaisfixture
;
2, en utilisant
(1) l'utilisation en tant que paramètre
processus de mise en œuvre
pytest
cas de test Collectedtest_ehlo
, il a un paramètresmtp_connection
,pytest
trouver un nom déjà enregistréfixture
;- Joué
smtp_connection()
pour créer unesmtp_connection
instance<smtplib.SMTP object at 0x00000244923A5F60>
comme l'test_ehlo
argument; - 执行 test_ehlo (<object smtplib.SMTP à 0x00000244923A5F60>).
Vous pouvez également utiliser l'invocation de ligne de commande: --fixtures de pytest [TestPath]
2, l'appareil: l'injection réelle est un exemple typique
fixture
Laisser test peut facilement recevoir et traiter les besoins d' un objet d'application particuliers à l' opération de pré-initialisation, sans trop concerné Import / Paramètres / nettoyage détail, de l' injection de dépendance, dans lequel le c'est une pratique typique de l' fixture
injection de l' acteur ( injector
) de le rôle joué par les consommateurs et les tests ( client
rôle);
3, conftest.py: Exemples de fixation partage
Si vous voulez partager avec l' un d'une pluralité de modules de test par fixture
exemple, vous pouvez l' utiliser fixture
pour accéder au conftest.py
fichier. Introduction ne nécessite pas le module de test manuel en elle, pytest
trouvera automatiquement fixture
la recherche séquentielle est: test de la catégorie, le module de test, conftest.py
et enfin le tiers des plug-ins et est construit ;
Vous pouvez également utiliser conftest.py
le fichier de cette fonction pour chaque répertoire pour obtenir une prise localisée ;
4, les données de test de partage
Si vous voulez tester plusieurs actions de test le même fichier de données, il y a deux bon moyen d'y parvenir:
- Pour charger les données dans
fixture
le test eux pour la réutilisationfixture
; - Ces fichiers de données dans des
tests
dossiers, des plug-ins tiers pour gérer l' essai 5 dans ce domaine, le champ d' application: les cas d'utilisation à travers des cours, des modules et séance d'essais ensemble, partagé exemples fixation
En @pytest.fixture
ajoutant décorateur scope='module'
paramètre, chaque module de test est appelé une seule fois smtp_connection
(la valeur par défaut sera appelée une fois pour chaque cas d'utilisation), tous les tests de ces modules partagent la même fixture
instance, dans laquelle scope
les valeurs des paramètres sont possibles: function
(par défaut class
valeur), module
,, package
etsession;
exemple
Remarque: pytest
Chaque fois qu'un cache uniquement par fixture
exemple lors de l' utilisation paramétrés fixture
temps, pytest
peut être appelé à plusieurs reprises dans le cadre de la présente déclaration fixture
;
5, fixation instancié commande
Plusieurs fixture
instances de la séquence, les principes suivants:
- champ d' application de haut niveau ( par exemple:
session
) avant oscilloscopes à bas niveau ( par exemple:class
oufunction
) instanciation; - champ d' application de niveau identique, dont des exemples qui suit l'ordre dans lequel la séquence est déclaré dans le test ( à savoir du paramètre de commande) , ou
fixture
appeler la relation entre les deux; - L' activation d'
autouse
unfixture
premier niveau avec son autrefixture
instanciation;
Autres Note:
-
En plus de
autouse
l'fixture
état requis affiché essai (paramètres), il ne sera pas instancié pas déclarée; -
Une pluralité de la même portée
autouse fixture
, des exemples qui suit l'ordre defixture
nom de la fonction de tri;
6, les opérations de nettoyage de fixation
(1) un rendement de retour proxy
La fixture
fonction de return
remplacement des mots - clés pour yield
, le yield
code suivant est de faire l'opération de nettoyage;
(2) l'utilisation avec
(3) Méthode utilisant addfinalizer
fixture
Une fonction capable de recevoir un request
paramètre représentant un contexte de la demande de test ; on peut utiliser request.addfinalizer
un procédé d' fixture
adjonction fonction de nettoyage;
Note: yield
Avant ou la addfinalizer
génération de code sortie d'erreur avant l' enregistrement, ne sera plus effectuer les opérations de nettoyage ultérieures.