Parfois, il est nécessaire d'exécuter différents cas de test pour différents environnements de test, tels que : test de fumée, sit, uat, prd, il est donc nécessaire de marquer et de regrouper des cas de test automatisés. pytest.mark peut facilement réaliser cette fonction. Vous devez d'abord enregistrer votre balise personnalisée.
Les métadonnées des fonctions de test peuvent être facilement définies à l'aide de l'assistant pytest.mark. Une liste complète des drapeaux intégrés peut être trouvée dans la référence de l'API. Alternativement, vous pouvez utiliser les balises CLI-pytest pour répertorier toutes les balises, à la fois intégrées et personnalisées.
Voici quelques balises intégrées :
usefixtures - utilise des fixtures sur des fonctions ou des classes de test
filterwarnings - filtre certains avertissements pour les fonctions de test
skip - saute toujours les fonctions de test
skipif - saute une fonction de test si une certaine condition est remplie
xfail - produit un résultat "échec attendu" si certaines conditions sont remplies
paramétriser - effectuer plusieurs appels à la même fonction de test.
Il est facile de créer des balises personnalisées ou d'appliquer des balises à une classe ou à un module de test entier. Ces drapeaux peuvent être utilisés par les plugins et sont également couramment utilisés pour sélectionner des tests sur la ligne de commande via l'option -m.
Il y a 3 façons d' enregistrer des marques .La première chose est dans le fichier pytest.ini
Enregistrez les balises personnalisées via le fichier pytest.ini
comme suit :
[pytest]
markers =
sit: 标记测试为sit (deselect with '-m "not sit"')
uat: 标记测试为uat
prd: 标记测试为prd
serial
sélectionner un groupe
-m + drapeaux de regroupement tels que :
-m 'sit'
exclure le groupe
m non + groupement, tel que :
-m 'not sit'
Enregistrez des balises personnalisées via le fichier pyproject.tom l
[tool.pytest.ini_options]
markers = [
"sit: 标记测试为sit (deselect with '-m \"not sit\"')",
"serial",
]
Notez le nom de la balise : ce qui suit est une description facultative de la balise
Enregistrez les balises dynamiquement via le crochet pytest_configure
def pytest_configure(config):
config.addinivalue_line(
"markers", "env(name): mark test to run only on named environment"
)
lancer une exception pour les jetons inconnus
Les marques non enregistrées appliquées avec le décorateur @pytest.mark.name_of_the_mark émettront toujours un avertissement pour éviter un comportement inattendu dû à des noms mal saisis. Les avertissements pour les indicateurs personnalisés peuvent être désactivés en les enregistrant dans le fichier pytest.ini ou en utilisant un hook pytest_configure personnalisé.
Toute marque inconnue appliquée à l'aide du décorateur @pytest.mark.name_of_the_mark déclenchera une erreur lorsque l'indicateur de ligne de commande --strict marks est passé. Vous pouvez appliquer cette validation dans votre projet en ajoutant l'indicateur --strict à addopts :
[pytest]
addopts = --strict-markers
markers =
slow: marks tests as slow (deselect with '-m "not slow"')
serial
Marquez les fonctions de test et sélectionnez-les pour les exécuter
Les exécutions de test peuvent être limitées aux seuls tests marqués sit
pytest -v -s -m sit test_sample.py
Résultat de sortie :
Ou inversement, pour exécuter tous les tests sauf sit :
pytest -v -s -m "not sit" test_sample.py
Résultat de sortie :
Sélectionnez un groupe et désélectionnez l'autre :
pytest -v -s -m "sit and not uat" test_sample.py
La sortie est la suivante :
Utilisez des balises personnalisées dans votre code
import pytest
class TestPractise:
@pytest.mark.sit
def test_sit(self):
print('sit环境测试')
@pytest.mark.uat
def test_uat(self):
print('uat环境测试')
if __name__ == "__main__":
pytest.main(["-v", "-s", "-m sit and not uat"])
Le test ci-dessus sélectionne le test marqué par sit et ne sélectionne pas le test marqué par uat
La sortie est la suivante :
On peut voir sur la photo que les résultats en cours d'exécution sont conformes aux attentes ~
marquer une classe ou un module entier
import pytest
@pytest.mark.sit
class TestPractise:
def test_sit(self):
print('sit环境测试')
def test_uat(self):
print('uat环境测试')
Cela revient à appliquer le décorateur directement aux deux fonctions de test. Pour appliquer des repères au niveau du module, utilisez la variable globale pytestmark :
import pytest
pytestmark = pytest.mark.sit
ou plusieurs balises :
pytestmark = [pytest.mark.sit, pytest.mark.uat]
Pour des raisons d'héritage, avant d'introduire le décorateur de classe, l'attribut pytestmark pourrait être défini sur la classe de test comme ceci :
import pytest
class TestClass:
pytestmark = pytest.mark.sit
Avis:
Les marqueurs ne peuvent être appliqués qu'aux tests et n'ont aucun effet sur les montages.
———————————————————————————————————————————
_ ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- -----------------------------------
Référence et : https://blog.csdn.net/TalorSwfit20111208/article/details/131134921