Pruebas grupales Pytest

A veces es necesario ejecutar diferentes casos de prueba para diferentes entornos de prueba, como: prueba de humo, sit, uat, prd, por lo que es necesario marcar y agrupar casos de prueba automatizados. Pytest.mark puede realizar fácilmente esta función. Primero debe registrar su etiqueta personalizada.

Los metadatos para las funciones de prueba se pueden configurar fácilmente mediante el ayudante pytest.mark. Puede encontrar una lista completa de banderas integradas en la referencia de la API. Alternativamente, puede usar CLI-pytest-tags para enumerar todas las etiquetas, tanto integradas como personalizadas.

Aquí hay algunas etiquetas integradas:

usefixtures - use accesorios en funciones o clases de prueba

filterwarnings - filtra ciertas advertencias para funciones de prueba

skip - siempre omite las funciones de prueba

skipif: omite una función de prueba si se cumple una determinada condición

xfail: produce un resultado de "falla esperada" si se cumplen ciertas condiciones

parametrizar - realizar múltiples llamadas a la misma función de prueba.

Es fácil crear etiquetas personalizadas o aplicar etiquetas a una clase o módulo de prueba completo. Estos indicadores pueden ser utilizados por complementos y también se utilizan comúnmente para seleccionar pruebas en la línea de comando a través de la opción -m.


Hay 3 formas de registrar marcas , la primera es en el archivo pytest.ini

Registre etiquetas personalizadas a través del archivo pytest.ini
de la siguiente manera:

[pytest]
markers =
    sit: 标记测试为sit (deselect with '-m "not sit"')
    uat: 标记测试为uat
    prd: 标记测试为prd 
    serial

selecciona grupo

-m + banderas de agrupación como:

-m 'sit'

excluir grupo

m no + agrupación, como:

-m 'not sit'

Registre etiquetas personalizadas a través del archivo pyproject.tom l

[tool.pytest.ini_options]
markers = [
    "sit: 标记测试为sit (deselect with '-m \"not sit\"')",
    "serial",
]

Tenga en cuenta el nombre de la etiqueta: la siguiente es una descripción de etiqueta opcional

Registre etiquetas dinámicamente a través del gancho pytest_configure

def pytest_configure(config):
    config.addinivalue_line(
        "markers", "env(name): mark test to run only on named environment"
    )

lanzar una excepción para tokens desconocidos

Las marcas no registradas aplicadas con el decorador @pytest.mark.name_of_the_mark siempre emitirán una advertencia para evitar un comportamiento inesperado debido a nombres mal escritos. Las advertencias para las banderas personalizadas se pueden deshabilitar registrándolas en el archivo pytest.ini o usando un gancho pytest_configure personalizado.

Cualquier marca desconocida que se aplique con el decorador @pytest.mark.name_of_the_mark generará un error cuando se pase el indicador de línea de comando --strict marks. Puede hacer cumplir esta validación en su proyecto agregando el indicador --strict a addopts:

[pytest]
addopts = --strict-markers
markers =
    slow: marks tests as slow (deselect with '-m "not slow"')
    serial

Marcar funciones de prueba y seleccionarlas para ejecutar
Las ejecuciones de prueba se pueden restringir para ejecutar solo las pruebas marcadas como sentadas

pytest -v -s -m  sit test_sample.py

Resultado de salida:

  O por el contrario, para ejecutar todas las pruebas excepto sit:

 pytest -v -s -m "not sit" test_sample.py

Resultado de salida: 

  Seleccione un grupo y deseleccione el otro:

 pytest -v -s -m "sit and not uat" test_sample.py

La salida es la siguiente:

 Use etiquetas personalizadas en su código

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"])

La prueba anterior selecciona la prueba marcada por sit, y no selecciona la prueba marcada por uat

La salida es la siguiente:

 

Se puede ver en la imagen que los resultados de la ejecución son consistentes con las expectativas ~

marcar toda una clase o módulo

import pytest
@pytest.mark.sit
class TestPractise:
 
    def test_sit(self):
        print('sit环境测试')
 
    def test_uat(self):
        print('uat环境测试')

Esto es equivalente a aplicar el decorador directamente a las dos funciones de prueba. Para aplicar marcas a nivel de módulo, use la variable global pytestmark:

import pytest
pytestmark = pytest.mark.sit


o varias etiquetas:

pytestmark = [pytest.mark.sit, pytest.mark.uat]

Por razones heredadas, antes de presentar el decorador de clases, el atributo pytestmark podría establecerse en la clase de prueba de esta manera:

import pytest
 
 
class TestClass:
    pytestmark = pytest.mark.sit

Aviso:

Los marcadores solo se pueden aplicar a las pruebas y no tienen efecto en los accesorios.
————————————————————————————————————————————
_ ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------- ----- --------------------------------------------------
Referencia y: https://blog.csdn.net/TalorSwfit20111208/article/details/131134921

Supongo que te gusta

Origin blog.csdn.net/asuf1364/article/details/131316182
Recomendado
Clasificación