Python test framework pytest: parámetros comunes, encontrar subconjuntos, parametrización, omitir

Pytest es un marco de prueba basado en Python para escribir y ejecutar código de prueba. pytest se usa principalmente para pruebas de API, puede escribir código para probar API, base de datos, interfaz de usuario, etc.
pytest es un marco de prueba de Python muy maduro y con todas las funciones, que tiene principalmente las siguientes ventajas:
simple y flexible, fácil de usar. La sintaxis de pytest es concisa y clara, fácil de entender y usar.
Se admite la parametrización. pytest puede parametrizar casos de prueba a través de decoradores o métodos de fijación para mejorar la cobertura de los casos de prueba.
Puede admitir pruebas unitarias simples y pruebas funcionales complejas, y también puede usarse para pruebas automatizadas como selenium/appnium y pruebas automatizadas de interfaz (pytest+requests).
pytest tiene muchos complementos de terceros y puede personalizar extensiones, como pytest-selenium (selenio integrado), pytest-html (generación perfecta de informes de prueba html), pytest-rerunfailures (ejecución repetida de casos fallidos), pytest-xdist ( distribución multi-CPU), etc.
Omitir y xfail procesamiento de casos de prueba. pytest proporciona un mecanismo flexible para omitir casos de prueba o fallas esperadas, y uno o algunos casos de prueba se pueden omitir durante la prueba según sea necesario.
Se puede integrar bien con jenkins. pytest se puede integrar a la perfección con herramientas de integración continua como Jenkins para facilitar las pruebas automatizadas y la generación de informes.
El marco de informes: allure también es compatible con pytest. pytest se puede integrar con el marco de informes de Allure para generar informes de prueba HTML detallados para facilitar el análisis y la visualización de los resultados de la prueba.
pytest es un marco de prueba de Python potente, flexible y fácil de usar, que es adecuado para varios tipos de requisitos de prueba y tiene un alto valor práctico.

Instalar

# 安装
pip install pytest

# 帮助
pytest -h

requisito de formato

Nombre del archivo: test_*.py o *_test.py
Nombre de la función: comience con prueba

Parámetros comunes

-sMuestra la salida estándar , equivalente a –capture=no, pytest no genera print loggingla salida de forma predeterminada, a menos que la aserción falle.
-vMostrar informe detallado .
-kBusque casos de prueba por palabra clave .
-qMostrar un informe conciso .
-mEjecute solo los casos de prueba marcados .
-xDeje de probar inmediatamente cuando falle un caso de uso.
-c fileCargue el archivo de configuración desde el archivo.
-l (--showlocals)Muestre las variables locales y sus valores al retroceder con información de falla del caso.
-rsxXInforme® por qué se omitieron los casos de prueba (s), se esperaba que fallaran (x), se esperaba que fallaran pero en realidad se aprobaron (X).
-strictDeshabilitar el uso de banderas de marca no registradas en el archivo de configuración (pytest.ini).
--maxfail=nDejar de ejecutar pruebas después de fallar n.
–reruns=numLos casos fallidos se vuelven a ejecutar varias veces. Requiere pytest-rerunfailuresque se instale el módulo del complemento.
--lf (--last-failed)Ejecutar solo el último caso de uso fallido. Si no hay casos fallidos o no se encuentran archivos de caché, el valor predeterminado es ejecutar todos los casos. Usado
--lfnf =[all, none]al mismo tiempo, significa que todos los casos de prueba se ejecutan cuando no se encuentran casos de prueba o archivos de caché, y significa que no se ejecutan casos de prueba cuando no se encuentran casos de prueba o archivos de caché.--lf=all=none

pytest.main(['--lf','--lfnf=none', "test.py"])

--ff (--failed-first)Ejecute primero los casos de uso fallidos antes de ejecutar otros casos de uso.
--nf (--new-first)Comience ejecutando pruebas desde un archivo nuevo o un caso de uso recién modificado.
--sw (--stepwise)Salga en caso de falla de la prueba y comience la prueba la próxima vez en el caso de prueba fallida.
--stepwise-skipIgnore la primera prueba fallida y salga en la segunda prueba fallida.
--keep-duplicatesPruebas repetidas.
--durations=nMuestra los n casos de uso más lentos. Nota: pytest no mostrará tiempos de prueba <0,01 s de forma predeterminada a menos que se agregue el parámetro -vv.
--fixturesMostrar todos los accesorios disponibles.
--tb=styleModo de impresión de información de seguimiento de pila (automático/largo/corto/línea/nativo/no]).
--setup-showMuestra los pasos de ejecución del dispositivo.
--cache-show=[CACHESHOW]Muestra el contenido de la memoria caché, no realiza recopilación ni prueba.
--cache-clearBorre el caché de pytest antes de ejecutar.
--continue-on-collection-errorsHacer cumplir las pruebas incluso si se produce un error de recopilación (fase de caso de recopilación).
--rootdir=ROOTDIRDefine el directorio raíz para las pruebas.
--color=colorColor de la salida del terminal (sí/no/automático).
--collect-onlySolo se recopilan casos de uso, no se ejecutan.
--assert=MODE"simple" no realiza ninguna depuración de afirmación, "reescribir" reescribe la declaración de afirmación en el módulo de prueba para proporcionar información de expresión de afirmación

prueba basica

Nombre del archivo:test_one.py

# 测试函数
def test_division():
    assert 1/1.0==1

# 测试类
class TestOne:
    def test_addition(self):
        """
        测试方法
        """
        assert 1 + 1 == 2

    def testsquare(self):
        """
        测试方法
        """
        assert 2*2 == 3
    
    def tesequality():
        """
        无效
        """
        assert 10 == 11

correr:

pytest -v

-vIndica para ver detalles.
3

Se encontraron 3 casos de prueba, 1 falló y 2 pasaron.

subconjunto de prueba

Encuentra un subconjunto por nombre de función

prueba_sub.py

# 测试子集
class TestSub:
    def test_compare_one(self):
        """
        测试方法
        """
        assert 1 + 1 == 2


    def test_compare_two(self):
        """
        测试方法
        """
        assert 1 + 2 == 3
pytest -v -k compare

Utilice el valor del parámetro pytest -k <substring>del comando -kpara filtrar el nombre de la función.
1

marca de grupo

# -*- coding: utf-8 -*-
import pytest

# 测试子集
class TestGroup:
    @pytest.mark.group
    def test_group_one(self):
        """
        测试方法
        """
        assert 1 + 1 == 2

    @pytest.mark.group
    def test_group_two(self):
        """
        测试方法
        """
        assert 1 + 2 == 3
pytest -v -m group

Aquí el decorador se usa @pytest.mark.grouppara marcar la función, y luego el pytest -v -m groupin -mse usa para encontrar esta marca de agrupación.
1

función de fijación

import pytest

# 测试fixture
class TestFixture:
    @pytest.fixture
    def input_value(self):
        return 36


    def test_division(self, input_value):
        """
        测试方法
        """
        assert input_value / 6 == 6

1
Aquí, @pytest.fixturela función modificada input_value se usa para preparar los datos con anticipación para test_divisionsu uso. Este método solo se puede usar en un archivo, si desea usarlo globalmente, puede configurar Conftest.py.

parametrizar

import pytest

@pytest.mark.parametrize("num, output",[(1,11),(2,22),(3,35),(4,44)])
def test_multiplication_11(num, output):
   assert 11*num == output

pytest test_parame.py -v

1

omitir prueba

import pytest
@pytest.mark.xfail
@pytest.mark.great
def test_greater():
   num = 100
   assert num > 100

@pytest.mark.xfail
@pytest.mark.great
def test_greater_equal():
   num = 100
   assert num >= 100

@pytest.mark.skip
@pytest.mark.others
def test_less():
   num = 100
   assert num < 200

pytest test_xfail_skip.py -v

@pytest.mark.xfailMarcado como estado xfail.
@pytest.mark.skipSaltar directamente.

1

Consulte el sitio web oficial para obtener más información .

Supongo que te gusta

Origin blog.csdn.net/lilongsy/article/details/132150307
Recomendado
Clasificación