Enlaces rápidos
Las pruebas son una parte importante del desarrollo de software. Ayuda a detectar errores temprano y reduce la posibilidad de errores en el futuro.
Pytest es uno de los marcos de prueba más populares en Python. Le permite escribir pruebas pequeñas y legibles que se pueden escalar a medida que crece su aplicación. Aprenda a configurar y usar Pytest con su código de Python. Verificar Cómo instalar Python en un teléfono Android usando Termux.
Configuración de Pytest
Antes de instalar Pytest, es mejor crear un entorno virtual para aislar el entorno de prueba del entorno de trabajo predeterminado, de modo que pueda evitar conflictos con otros paquetes y dependencias.
Para crear un entorno virtual, ejecute el siguiente comando antes de instalar Pytest.
python -m venv tests
Esto creará un nuevo entorno virtual llamado pruebas en su directorio actual. Para activar el entorno, ejecute este comando si está en Linux o Mac:
source tests/bin/activate
Para Windows, ejecute este comando:
tests\\Scripts\\activate
Para instalar Pytest, puede usar pip, el administrador de paquetes de Python, con este comando en la Terminal:
pip install pytest
Si no tienes un Pip, no te preocupes; Puedes instalar Pip en sistemas operativos Windows و mac y linux.
Ejecute el siguiente comando para comprobar si ha instalado Pytest correctamente.
pytest — version
Este comando debería devolver el número de versión instalada.
Crea tu primera prueba
Considere la siguiente función que suma dos números y devuelve el resultado.
def add_numbers(a, b): return a + b
Varias cosas pueden salir mal con esta función. Por ejemplo, considere lo que sucede si llama a la función con valores no numéricos como Ninguno o un valor de tipo Cadena. Estas son algunas de las posibles condiciones que podrían causar que la función falle.
Una de las primeras pruebas que escriba debe comprobar si la función devuelve el resultado esperado. Para hacer esto, puede usar la palabra clave assert para comparar el resultado real de la función con el resultado esperado. En el caso de la función add_numbers, la función de prueba podría verse así:
def test_add_numbers(): assert add_numbers(2, 3) == 5 assert add_numbers(-1, 1) == 0 assert add_numbers(0, 10) == 10
Esta función de prueba incluye tres aserciones, cada una de las cuales compara la salida de la función add_numbers con el valor esperado. La primera prueba verifica que sumar 2 y 3 da como resultado 5, la segunda prueba verifica que sumar -1 y 1 da como resultado 0, y la tercera verifica que sumar 0 y 10 da como resultado 10.
Cómo ejecutar pruebas con Pytest
Después de escribir sus pruebas, el siguiente paso es ejecutarlas. Para hacer esto con Pytest, vaya al directorio que contiene su archivo de prueba y ejecute el comando pytest:
pytest
Si todo funciona como se esperaba, verá un mensaje que indica que todas las pruebas pasaron con éxito. Sin embargo, si alguna de las afirmaciones falla, Pytest informará un error y le mostrará los valores de entrada que causaron la falla.
Por ejemplo, supongamos que ejecuta la siguiente función de prueba para la función add_numbers:
def test_add_numbers(): assert add_numbers(2, 3) == 6 assert add_numbers(-1, 1) == 0 assert add_numbers(0, 0) == 0
La primera afirmación fallará porque el valor esperado era 6, pero el valor real era 5 (la suma de 2 y 3). Pytest devolverá el siguiente mensaje:
Este mensaje le muestra los valores de entrada que causaron el valor y también le dice cuál debería ser el valor real. Esto facilita la identificación y corrección rápida de errores en su código. Verificar Cómo instalar y codificar Python en Android con Pydroid 3.
Use Pytest.raises para detectar excepciones
Ahora, escribamos una prueba para cubrir uno de los casos extremos de la función add_numbers. Cuando se pasa un argumento no numérico como None a una función, Python debería generar un TypeError.
Ya debería manejar excepciones en su código de Python, y puede probar que su código también las maneja correctamente.
Para hacer esto, copie la siguiente función de prueba en su archivo. El administrador de contexto usa pytest.raises para verificar si llamar a add_number con "Ninguno" genera un TypeError.
import pytest def test_add_numbers_with_invalid_inputs(): with pytest.raises(TypeError): add_numbers(None, 2)
Luego ejecute Pytest desde la línea de comandos. Si la excepción no aparece, la prueba fallará.
Puede ir más allá y verificar los detalles del mensaje de excepción. El administrador de contexto produce un objeto ExceptionInfo con los detalles.
Por ejemplo, en esta función de prueba, confirme el mensaje de excepción de la siguiente manera:
def test_add_numbers_with_invalid_inputs(): with pytest.raises(TypeError) as exc_info: add_numbers(None, 2) assert exc_info.value.args[0] == “unsupported operand type(s) for +: ‘NoneType’ and ‘int’”
Si el mensaje no coincide con el mensaje en la prueba, Pytest indicará una falla.
Cómo usar pruebas certificadas para probar múltiples entradas a la vez
En lugar de llamar manualmente a una función con múltiples entradas como esta:
def test_add_numbers(): assert add_numbers(2, 3) == 6 assert add_numbers(-1, 1) == 0 assert add_numbers(0, 0) == 0
Pytest proporciona una función de prueba parametrizada que le permite hacer lo mismo más fácilmente. He aquí cómo reescribir la función de prueba anterior:
import pytest @pytest.mark.parametrize(“a,b,expected”, [ (2, 3, 5), (-1, 1, 0), (0, 0, 0) ]) def test_add_numbers(a, b, expected): assert add_numbers(a, b) == expected
Cómo ejecutar varias pruebas
Hasta ahora he escrito solo dos pruebas para la función add_numbers. Para funciones más complejas con más pruebas, es posible que desee agruparlas en una Clase.
Por ejemplo, aquí se explica cómo crear una clase de prueba para la función test_addition.
class TestAddFunction: @pytest.mark.parametrize(“a, b, expected”, [ (2, 3, 5), (-1, 1, 0), (0, 0, 0), ]) def test_addition_with_numbers(self, a, b, expected): assert add_numbers(a, b) == expected def test_add_numbers_with_invalid_inputs(self): with pytest.raises(TypeError) as exc_info: add_numbers(None, 2) assert exc_info.value.args[0] == “unsupported operand type(s) for +: ‘NoneType’ and ‘int’”
Tenga en cuenta que debe anteponer el nombre de la clase con "Prueba" para que Pytest pueda identificarla como una clase de prueba y ejecutarla. Verificar Repositorios prácticos de GitHub que le enseñarán Python.
Pytest tiene muchas características
Con Pytest, puede comprobar automáticamente que su código funciona como espera. Pytest ofrece varias otras funciones, como construcciones que le permiten configurar datos de prueba y etiquetas para configurar metadatos en trabajos de prueba y trituración.
Además, puede integrar Pytest en su canalización de CI y comenzar a ejecutar pruebas de forma automática y continua cuando cambie su código. Puedes ver ahora Los mejores sitios web para aprender Python en línea gratis.