Popular en toda la red, marco de prueba automatizado de Pytest: ejecución de casos de prueba y repetición de fallas (detalles en combate real)


prefacio

Estado de ejecución de caso de uso

Una vez que se completa la ejecución del caso de uso, cada caso de uso tiene su propio estado. Se
pasan los estados comunes: la prueba pasó
falló: la afirmación falló
error: la calidad del caso de uso en sí no es buena, y el código en sí informa un error (por ejemplo: el accesorio no existe y hay un error en el accesorio)
xfail: falla esperada, agregó @pytest.mark.xfail()

ejemplo de error 1: el parámetro no existe

def pwd():
    print("获取用户名")
    a = "yygirl"
    assert a == "yygirl123"


def test_1(pwd):
    assert user == "yygirl"

¿Por qué el
parámetro error pwd no existe, por lo que el caso de uso ejecuta el error?

ejemplo de error 2: el accesorio es incorrecto

@pytest.fixture()
def user():
    print("获取用户名")
    a = "yygirl"
    assert a == "yygirl123"
    return a


def test_1(user):
    assert user == "yygirl"

¿Por qué es un error?
La aserción en el dispositivo falla, por lo que el dispositivo informará un error;
debido a que test_1 llama al dispositivo incorrecto, el error indica que hay un problema con el caso de uso

errorEjemplo 1

@pytest.fixture()
def pwd():
    print("获取密码")
    a = "yygirl"
    return a


def test_2(pwd):
    assert pwd == "yygirl123"

¿Por qué falla
porque la aserción variable devuelta por el accesorio falló?

errorEjemplo 2

@pytest.fixture()
def pwd():
    print("获取密码")
    a = "polo"
    return a


def test_2(pwd):
    raise NameError
    assert pwd == "polo"

¿Por qué falla?
Porque se lanzó una excepción durante la ejecución del caso de uso.

Si el código del caso de prueba tiene una excepción, incluida la emisión activa de una excepción o el código tiene una excepción, se considera fallido;
cuando el dispositivo llamado por el caso de prueba tiene una excepción, o los parámetros pasados ​​tienen una excepción, se considera un error;
si un informe de prueba contiene , cuanto mayor sea el número de casos de prueba de error, peor será la calidad de los casos de prueba;

ejemplo de xfail

断言装饰器
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_f():
    1 / 0

¿Por qué xfail?
Hay una excepción en el código y coincide con la clase de excepción generada, por lo que es xfail (un tipo de prueba aprobada, que indica que la excepción detectada está en línea con las expectativas), no fallida

Si no coincide con la clase de excepción generada, falla

Complemento de repetición fallida pytest-rerunfailures

Prerrequisitos ambientales
Se requieren los siguientes prerrequisitos para usar pytest-rerunfailures
Python 3.5, hasta 3.8, o PyPy3
pytest 5.0 o posterior

instalar complemento

pip3 install pytest-rerunfailures -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

Enfoque del complemento:
Parámetros de la línea de comandos: –reruns n (número de repeticiones), –reruns-delay m (número de segundos de espera para ejecutar)
Parámetros del decorador: reruns=n (número de veces para volver a ejecutar), reruns_delay=m ( número de segundos a esperar para ejecutar)

Vuelva a ejecutar todas las pruebas fallidas
Para volver a ejecutar todas las pruebas fallidas, use la opción de línea de comando --reruns, especificando la cantidad máxima de veces para ejecutar las pruebas:

pytest --reruns 5 -s 

Los accesorios o setup_classes que no se ejecuten también se volverán a ejecutar

Agregar un retraso de repeticiones
Para agregar un retraso entre reintentos, use la opción de línea de comando --reruns-delay, especificando la cantidad de segundos que debe esperar antes de que se reinicie la próxima prueba

pytest --reruns 5 --reruns-delay 10 -s

Vuelva a ejecutar el caso de prueba especificado
Para agregar el decorador escamoso @pytest.mark.flaky(reruns=5) a un solo caso de prueba y volver a ejecutar automáticamente cuando la prueba falla, debe especificar el número máximo de repeticiones

ejemplo:

import pytest


@pytest.mark.flaky(reruns=5)
def test_example():
    import random
    assert random.choice([True, False, False])

Resultados de la

collecting ... collected 1 item

11_reruns.py::test_example RERUN                                         [100%]
11_reruns.py::test_example PASSED                                        [100%]

========================= 1 passed, 1 rerun in 0.05s ==========================

Del mismo modo, esto también puede especificar el tiempo de espera para volver a ejecutar

@pytest.mark.flaky(reruns=5, reruns_delay=2)
def test_example():
    import random
    assert random.choice([True, False, False])

Nota:
si se especifica el número de repeticiones para casos de uso, agregar --reruns a la línea de comando no tendrá efecto para estos casos de uso

Problema de compatibilidad
No se puede usar con el decorador de dispositivos: @pytest.fixture()
Este complemento no es compatible con el indicador --looponfail de pytest-xdist
Este complemento no es compatible con el indicador core --pdb

El siguiente es el diagrama de sistema de arquitectura de conocimiento de aprendizaje de ingeniero de prueba de software más completo en 2023 que compilé

1. De la entrada al dominio de la programación en Python

Por favor agregue una descripción de la imagen

2. Proyecto de automatización de interfaz de combate real.

Por favor agregue una descripción de la imagen

3. Combate real del proyecto de automatización web

Por favor agregue una descripción de la imagen

4. Combate real del proyecto de automatización de aplicaciones

Por favor agregue una descripción de la imagen

5. Hoja de vida de los fabricantes de primer nivel

Por favor agregue una descripción de la imagen

6. Probar y desarrollar el sistema DevOps

Por favor agregue una descripción de la imagen

7. Herramientas de prueba automatizadas de uso común

Por favor agregue una descripción de la imagen

Ocho, prueba de rendimiento JMeter

Por favor agregue una descripción de la imagen

9. Resumen (pequeña sorpresa al final)

Solo con el coraje de superarse constantemente a sí mismo, el sueño puede salir del capullo y florecer las flores más hermosas. No importa lo difícil que sea el frente, sigue luchando y abraza una vida trabajadora, y la luz del éxito siempre brillará en tu futuro.

Solo haciendo lo mejor que podemos podemos superarnos a nosotros mismos, solo esforzándonos constantemente podemos crear milagros, solo perseverando podemos recibir la gloria. ¡Cree en ti mismo y trabaja duro, el futuro será tu magnífico capítulo!

Solo con esfuerzos incansables podemos perseguir el éxito inalcanzable; cada revés es una oportunidad para afinar, mientras no te rindas, la victoria te espera. Cree en ti mismo y avanza con valentía, crearás tu propia brillantez.

Supongo que te gusta

Origin blog.csdn.net/m0_70102063/article/details/131516800
Recomendado
Clasificación