Geekflare cuenta con el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliados comprando enlaces en este sitio.
Comparte en:

Prueba unitaria con el módulo unittest de Python

prueba unitaria de Python
Escáner de seguridad de aplicaciones web Invicti – la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Ningún buen desarrollador implementa código sin realizar pruebas exhaustivas. La prueba unitaria es el proceso de probar los módulos individuales de un programa grande.

Este artículo discutirá cómo puede realizar pruebas unitarias de su código utilizando el módulo de prueba unitaria de Python. Primero, entendamos cuáles son los tipos de pruebas.

Cuando se trata de las pruebas , hay pruebas manuales y pruebas automáticas. Prueba manual es una técnica de prueba en la que los humanos realizan la prueba manualmente después de completar el desarrollo.  Pruebas de automatización es una técnica de prueba donde los programas realizan la prueba automáticamente y nos dan los resultados.

Habría entendido que las pruebas manuales requieren tiempo y son difíciles de realizar. Entonces, los desarrolladores escriben código para realizar pruebas (pruebas automáticas). Hay diferentes tipos de pruebas en las pruebas automatizadas. Algunos de ellos son Pruebas unitarias, pruebas integradoras, pruebas de un extremo a otro, pruebas de estrés, etc ..,

Veamos el flujo estándar de pruebas.

  • Escribe o actualiza el código.
  • Escriba o actualice pruebas para diferentes casos para su código.
  • Ejecute las pruebas (ya sea manualmente o con un corredor de pruebas).
  • Vea los resultados de la prueba. Si hay algún error, corríjalo y repita los pasos.

Aquí, vamos a discutir el tipo de prueba más esencial y básico llamado examen de la unidad. Sin más preámbulos, profundicemos en el tutorial real.

What is Unit Testing?

La prueba unitaria es una técnica para probar un pequeño bloque de código independiente. El código de bloque pequeño será una función en la mayoría de los casos. La palabra independiente significa que no depende de otras piezas de código del proyecto.

Digamos que tenemos que comprobar si una cadena es igual a "Geekflare" o no. Para eso, hemos escrito una función que toma un argumento y devuelve si es igual a "Geekflare" o no.

def is_equal_to_geekflare(string):
	return string == "Geekflare"

La función anterior no depende de ningún otro código. Entonces, podemos probarlo de forma independiente dando diferentes entradas. La pieza de código independiente se puede utilizar en todo el proyecto.

Importance of Unit Testing

En general, el código de bloques independientes se puede utilizar en todo el proyecto. Por lo tanto, debe estar bien redactado y probado. Las pruebas unitarias son las pruebas que se utilizan para probar esos tipos de bloques de código independientes. ¿Qué sucede si no usamos pruebas unitarias para nuestro proyecto?

Supongamos que no probamos pequeños bloques de código que se utilizan en todo el proyecto. Todas las demás pruebas, como las pruebas de integración, las pruebas de extremo a extremo, etc., que utilizan los otros bloques pequeños de código pueden fallar. Esto rompe la aplicación. Es por eso que los bloques de construcción básicos del código deben probarse bien.

Ahora, sabemos la importancia de las pruebas unitarias y las pruebas unitarias escritas para todos los bloques de código independientes. Dado que hemos realizado pruebas unitarias, otras pruebas como integración las pruebas, las pruebas de extremo a extremo, etc., no fallarán debido al bloque independiente de códigos.

En las próximas secciones, veremos qué es el módulo unittest de Python y cómo usamos el módulo unittest para escribir pruebas unitarias en Python.

Nota: Suponemos que está familiarizado con las clases, los módulos, etc. de Python. Si no está familiarizado con los conceptos intermedios de Python, como clases, módulos, etc., es posible que le resulte difícil comprender las secciones siguientes.

What is Python unittest?

La prueba unitaria de Python es un marco de prueba integrado para probar el código Python. Tiene un corredor de pruebas, lo que nos permite ejecutar las pruebas sin mucho esfuerzo. Entonces, podemos usar el prueba de unidad módulo para probar sin utilizar los módulos de terceros. Pero cambia según sus requisitos. El incorporado prueba de unidad El módulo es bueno para comenzar con las pruebas en Python.

Tenemos que seguir los pasos a continuación para probar el código Python usando el módulo unittest.

#1. Escribe el código.

#2. Importar el unittest módulo.

#3. Cree un archivo que comience con la palabra clave test. Por ejemplo test_prime.py. La palabra clave test se utiliza para identificar los archivos de prueba.

#4. Crea una clase ampliando la clase unittest.TestCase.

#5. Escribe métodos (pruebas) dentro de la clase. Cada método contiene diferentes casos de prueba según sus requisitos. Debemos nombrar el método comenzando con test palabra clave.

#6. Ejecute las pruebas. Podemos ejecutar las pruebas de diferentes formas.

  • Ejecuta el comando python -m unittest test_filename.py.
  • Ejecutamos los archivos de prueba como archivos generales de Python con el comando python test_filename.py. Para que este método funcione, necesitamos invocar el main método de la unittest en el archivo de prueba.
  • Y finalmente, usando el discover. Podemos ejecutar automáticamente las pruebas usando el comando python -m unittest discover sin mencionar el nombre de archivo de la prueba. Encontrará las pruebas utilizando la convención de nomenclatura que seguimos. Entonces, debemos nombrar nuestros archivos de prueba con la palabra clave test en el arranque.

Generalmente, en las pruebas, comparamos la salida del código con la salida esperada. Entonces, para comparar las salidas prueba de unidad proporciona diferentes métodos. Puede encontrar la lista de funciones de comparación aquí.

Puede comprenderlos fácilmente sin ninguna dificultad. Son sencillos.

Eso es mucha teoría. Ahora debemos meternos en la codificación.

Nota: Si tiene alguna consulta sobre el módulo unittest, puede ir a la documentación y despeja tus dudas. Sin más demora, usemos el módulo unittest.

Unit Tests in Python using unittest

Primero escribiremos algunas funciones y luego nos centraremos en escribir las pruebas. Primero, abra una carpeta en su favorito Editor de código. Y crea un archivo llamado utils.py. Pegue el siguiente código en el archivo.

import math


def is_prime(n):
    if n < 0:
        return 'Negative numbers are not allowed'

    if n <= 1:
        return False

    if n == 2:
        return True

    if n % 2 == 0:
        return False

    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True


def cubic(a):
    return a * a * a


def say_hello(name):
    return "Hello, " + name

Tenemos tres funciones diferentes en el utils.py expediente. Ahora, tenemos que probar cada función con diferentes casos de prueba. Escribamos las pruebas para la primera función. is_prime.

#1. Crea un archivo llamado test_utils.py en la carpeta de muestra como utils.py.

#2. Importar el utils y unittest módulo.

#3. Crea una clase con el nombre TestUtils extensión unittest.TestCase clase. El nombre de la clase puede ser cualquier cosa. Intente darle a la clase un nombre significativo.

#4. Dentro de la clase, escribe un método llamado test_is_prime que acepta self como argumento

#5. Escriba diferentes casos de prueba con argumentos al is_prime y compare la salida con la salida esperada.

#6. Caso de prueba de ejemplo self.assertFalse(utils.is_prime(1)).

#7. Esperamos el resultado del is_prime(1) será falso en el caso anterior.

#8. Al igual que en el caso anterior, realizaremos diferentes casos de prueba en función de la función que estamos probando.

Veamos las pruebas.

import unittest

import utils


class TestUtils(unittest.TestCase):
    def test_is_prime(self):
        self.assertFalse(utils.is_prime(4))
        self.assertTrue(utils.is_prime(2))
        self.assertTrue(utils.is_prime(3))
        self.assertFalse(utils.is_prime(8))
        self.assertFalse(utils.is_prime(10))
        self.assertTrue(utils.is_prime(7))
        self.assertEqual(utils.is_prime(-3),
                         "Negative numbers are not allowed")


if __name__ == '__main__':
    unittest.main()

Estamos invocando el main método de unittest el módulo para ejecutar las pruebas usando python filename.py El comando. Ahora, ejecute las pruebas.

Verá una salida similar a la siguiente.

$ python test_utils.py 
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

Ahora, intente escribir también los casos de prueba para otras funciones. Piense en diferentes casos para las funciones y escriba pruebas para ellos. Eche un vistazo a las siguientes pruebas que se agregan a la clase anterior.

...


class TestUtils(unittest.TestCase):
    def test_is_prime(self):
        ...

    def test_cubic(self):
        self.assertEqual(utils.cubic(2), 8)
        self.assertEqual(utils.cubic(-2), -8)
        self.assertNotEqual(utils.cubic(2), 4)
        self.assertNotEqual(utils.cubic(-3), 27)

    def test_say_hello(self):
        self.assertEqual(utils.say_hello("Geekflare"), "Hello, Geekflare")
        self.assertEqual(utils.say_hello("Chandan"), "Hello, Chandan")
        self.assertNotEqual(utils.say_hello("Chandan"), "Hi, Chandan")
        self.assertNotEqual(utils.say_hello("Hafeez"), "Hi, Hafeez")


...

Usamos solo algunas de las funciones de comparación del unittest módulo. Puedes encontrar la lista completa aquí.

Hemos aprendido a escribir pruebas unitarias utilizando el módulo unittest. Ahora es el momento de ver diferentes formas de ejecutar las pruebas.

How to Run Tests using unittest

Ya hemos visto una forma de ejecutar los casos de prueba en la sección anterior. Veamos las otras dos formas de ejecutar las pruebas usando el módulo unittest.

#1. Usando el nombre del archivo y el módulo unittest.

En este método, usaremos el módulo unittest y el nombre del archivo para ejecutar las pruebas. El comando para ejecutar las pruebas es python -m unittest filename.py. En nuestro caso, el comando para ejecutar las pruebas es python -m unittest test_utils.py.

#2. Usando el método de descubrimiento

Usaremos el discover método del módulo unittest para detectar automáticamente todos los archivos de prueba y ejecutarlos. Para detectar automáticamente los archivos de prueba, debemos nombrarlos comenzando con la palabra clave test.

El comando para ejecutar las pruebas usando el método de descubrimiento es python -m unittest discover. El comando detectará todos los archivos cuyos nombres comiencen con test y ejecutarlos.

Conclusión 👩‍💻

Las pruebas unitarias son pruebas básicas en el mundo de la programación. Hay muchas otras pruebas en el mundo real. Trate de aprenderlos una por una. Espero que este tutorial te ayude a escribir pruebas básicas en Python usando el módulo unittest. Hay bibliotecas de terceros como pytest, Robot Framework, nose, nose2, slash, etc. Puede explorarlas según los requisitos de su proyecto.

Feliz prueba 😎

También podría interesarle Preguntas y respuestas de la entrevista de Python.

Gracias a nuestros patrocinadores
Más lecturas interesantes sobre el desarrollo
Impulse su negocio
Algunas de las herramientas y servicios para ayudar a que su negocio crezca.
  • Invicti utiliza Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en cuestión de horas.
    Prueba Invicti
  • Web scraping, proxy residencial, administrador de proxy, desbloqueador web, rastreador de motores de búsqueda y todo lo que necesita para recopilar datos web.
    Prueba Brightdata
  • Semrush es una solución de marketing digital todo en uno con más de 50 herramientas en SEO, redes sociales y marketing de contenido.
    Prueba Semrush
  • Intruder es un escáner de vulnerabilidades en línea que encuentra debilidades de ciberseguridad en su infraestructura, para evitar costosas filtraciones de datos.
    Intente Intruder