Test de groupe Pytest

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

Je suppose que tu aimes

Origine blog.csdn.net/asuf1364/article/details/131316182
conseillé
Classement