PyTest: Pruebas Unitarias en Python 🐍 | Unit Tests | Testing Automatizado con Python ✅

UskoKruM2010
15 Nov 202220:03

Summary

TLDREste video tutorial ofrece una introducción a la utilización de la librería Pytest para realizar pruebas unitarias y testing automatizado en Python. El creador guía a los espectadores a través del proceso de creación de un entorno virtual, instalación de Pytest y creación de funciones básicas en un archivo llamado 'Main.py'. Luego, se enseña cómo estructurar las pruebas en una subcarpeta 'test' y ejecutar pruebas simples utilizando la función 'assert' para verificar resultados esperados. Continua con pruebas más avanzadas, incluyendo el uso de parámetros y la verificación de funcionalidades como un sistema de inicio de sesión y una clase 'LanguageModel'. El objetivo es enseñar a los programadores a integrar pruebas automatizadas en sus proyectos para garantizar la calidad y el correcto funcionamiento del código.

Takeaways

  • 😀 El video ofrece una introducción a la utilización de la librería Pytest para realizar testing automatizado y pruebas unitarias en Python.
  • 🛠️ Se muestra cómo crear un entorno virtual en Python para aislar las dependencias del proyecto.
  • 📚 El creador del video enseña a instalar la librería Pytest y a verificar su instalación exitosa.
  • 📁 Se crea una estructura de carpetas para organizar el código fuente y las pruebas unitarias.
  • 🔢 Se implementa una función simple llamada 'suma' para demostrar cómo escribir pruebas unitarias.
  • 🆚 Se crea otra función 'is_greater' para comparar si un número es mayor que otro, también sujeto a pruebas.
  • 📝 Se explica la importancia de las pruebas unitarias para garantizar que el código siga funcionando después de realizar cambios.
  • 🔍 Pytest se presenta como una herramienta para facilitar las pruebas unitarias, enfocándose en probar funcionalidades específicas del código.
  • 📈 Se ejemplifica cómo escribir una prueba para la función 'suma' y cómo interpretar los resultados de las pruebas.
  • 🔧 Se utiliza el decorador `@pytest.mark.parametrize` para probar la función 'suma' con una variedad de parámetros y casos de prueba.
  • 🚫 Se muestra cómo identificar y solucionar errores mediante las pruebas automatizadas, como el caso de una prueba fallida debido a una expectativa incorrecta.

Q & A

  • ¿Qué es la librería pipes y cómo se utiliza en el script del video?

    -Parece que hay un error en el script, ya que no se menciona la librería 'pipes'. Sin embargo, el script habla sobre la librería 'pytest', que se utiliza para realizar testing automatizado y crear pruebas unitarias en Python.

  • ¿Cómo se crea un entorno virtual en Python y por qué es útil?

    -Se crea un entorno virtual utilizando el comando 'python -m venv nombre_del_entorno'. Es útil porque aísla las dependencias de los proyectos, evitando conflictos entre las versiones de los paquetes en diferentes proyectos.

  • ¿Qué comando se utiliza para activar un entorno virtual en Windows?

    -Para activar un entorno virtual en Windows, se utiliza el comando 'scripts\activate' dentro de la carpeta del entorno virtual.

  • ¿Qué hace el comando 'pip install pytest' en el script?

    -Este comando instala la librería 'pytest' en el entorno virtual actual. 'Pytest' es una herramienta para realizar pruebas unitarias y automatizadas en proyectos de Python.

  • ¿Qué es un archivo '__init__.py' y por qué se utiliza?

    -El archivo '__init__.py' es un archivo que indica a Python que el directorio que lo contiene debe ser tratado como un paquete. Se utiliza para organizar el código y permitir la importación de módulos dentro de ese paquete.

  • ¿Qué función se crea en el script para sumar dos números?

    -Se crea una función llamada 'zoom_sumar' que recibe dos parámetros, 'x' e 'y', y retorna su suma.

  • ¿Cuál es la función 'is_greater' y qué hace?

    -La función 'is_greater' es una función que recibe dos números, 'number1' y 'number2', y retorna un valor booleano indicando si 'number1' es mayor que 'number2'.

  • ¿Qué es un test y por qué es importante realizar pruebas en el código?

    -Un test es una verificación automatizada del comportamiento de una función o sistema. Es importante realizar pruebas para asegurar que las funcionalidades del código continúen funcionando correctamente a pesar de los cambios y mejoras en el proyecto.

  • ¿Qué hace el comando 'pytest -v' en el script?

    -El comando 'pytest -v' ejecuta las pruebas unitarias con un nivel de detalle más alto, mostrando información más detallada sobre el resultado de las pruebas.

  • ¿Cómo se utiliza la parametrización en las pruebas con 'pytest'?

    -La parametrización en 'pytest' se logra utilizando el decorador '@pytest.mark.parametrize', el cual permite pasar diferentes conjuntos de valores a las pruebas para verificar el comportamiento de la función con varias entradas.

  • ¿Qué función se crea para simular un proceso de inicio de sesión?

    -Se crea una función llamada 'login' que recibe un 'user_name' y un 'password', y retorna un valor booleano. Solo retorna verdadero si el 'user_name' es 'busco_chrome_2010' y el 'password' es '123456'.

  • ¿Cómo se puede verificar que una lista de elementos en una base de datos no está vacía y contiene elementos validos?

    -Se pueden crear pruebas que verifiquen que la lista no es 'None', tiene elementos (longitud mayor a cero) y que cada elemento tiene una longitud mayor a cero, evitando así cadenas vacías.

Outlines

00:00

😀 Introducción a las pruebas automatizadas con la librería pytest

El video ofrece una introducción a la realización de pruebas automatizadas y unitarias en Python utilizando la librería pytest. Se comienza por crear un entorno virtual y se procede a instalar pytest. Luego, se crea una carpeta 'source' con un archivo 'main.py' que contiene funciones básicas como 'suma' y 'is_greater'. Se destaca la importancia de las pruebas unitarias para asegurar que las funcionalidades del código continúen funcionando a pesar de los cambios y mejoras. Se sugiere ver otros videos del canal para comprender mejor los entornos virtuales y los paquetes en Python.

05:01

🔍 Ejecución y detalle de pruebas unitarias con pytest

Se describe el proceso de ejecutar pruebas unitarias utilizando pytest. Primero, se ejecuta 'pytest' en la consola para detectar y ejecutar las pruebas, mostrando los resultados de las pruebas y su eficacia en tiempo real. Luego, se utiliza la opción '-v' para obtener un resultado más detallado, lo que permite ver el nombre de las funciones probadas y su estado. Además, se explica cómo probar funciones con diferentes valores utilizando el decorador 'pytest.mark' y la parametrización de pruebas para ejecutar una función con múltiples parámetros en una sola ejecución de pytest.

10:03

🛠 Pruebas de funcionalidades y manejo de errores

El script avanza hacia la creación de pruebas para validar funcionalidades más complejas, como una función de inicio de sesión 'login' que verifica credenciales. Se muestra cómo escribir pruebas tanto para casos donde se espera un resultado positivo como para casos de error. Se utiliza 'assert' para verificar que las respuestas de las funciones son las esperadas, y se ejemplifica cómo se manejan los casos de prueba fallidos, permitiendo identificar rápidamente los errores en el código. Además, se abordan pruebas para una función 'get_language' que simula la conexión a una base de datos y devuelve una lista de lenguajes de programación.

15:03

📚 Conclusión y recursos adicionales para aprender más sobre pytest

El video concluye con una revisión de las pruebas realizadas y se enfatiza la utilidad de pytest para la comprobación continua y automatizada del código. Se invita al espectador a dejar comentarios con sus dudas o sugerencias para futuros videos más avanzados. El presentador ofrece sus redes sociales y menciona que el canal cuenta con más de 600 videos sobre programación, tecnología y consejos para YouTube, creados con el propósito de ser útiles para el público.

Mindmap

Keywords

💡Testing automatizado

El término 'testing automatizado' se refiere a la realización de pruebas de software utilizando herramientas y scripts para ejecutar y verificar automáticamente si el software cumple con los requisitos especificados. En el video, el tema principal es enseñar cómo realizar pruebas unitarias de manera automatizada utilizando la librería 'pytest' en Python, lo cual es fundamental para garantizar la calidad y el correcto funcionamiento del código.

💡Pruebas unitarias

Las 'pruebas unitarias' son una técnica de prueba de software que se enfoca en verificar el correcto funcionamiento de los componentes individuales de un programa. En el script, el creador del video muestra cómo crear y ejecutar pruebas unitarias para funciones específicas de un programa utilizando 'pytest', como parte de un enfoque de testing automatizado.

💡Librería pytest

La 'librería pytest' es una herramienta de Python utilizada para la realización de pruebas unitarias. En el video, se muestra cómo instalar esta librería mediante 'pip install pytest' y cómo utilizarla para crear y ejecutar pruebas automatizadas, lo que demuestra su importancia en el proceso de testing en Python.

💡Entorno virtual

Un 'entorno virtual' es una forma de aislar el espacio de nombres de los paquetes de Python, permitiendo la creación de un ambiente de desarrollo controlado sin interferir con otros proyectos. En el script, se menciona la creación de un entorno virtual con el comando 'python -m venv vm', que es una práctica recomendada para el desarrollo de software en Python.

💡Funciones de prueba

Las 'funciones de prueba' son bloques de código que definen los casos de prueba para verificar el comportamiento de otras funciones o módulos. En el video, se crean funciones como 'test_zoom' y 'test_isgreater' para probar la funcionalidad de las funciones 'zoom' y 'isgreater' respectivamente, ejemplificando cómo se estructuran las pruebas en 'pytest'.

💡Aserciones

Las 'aserciones' son declaraciones en un programa que permiten verificar si una condición es verdadera; si no lo es, el programa informa de un error. En el script, se utilizan aserciones como 'assert result == expected' para verificar que los resultados de las funciones de prueba coinciden con los valores esperados, lo cual es crucial para la validación de que el software funcione correctamente.

💡Parametrización

La 'parametrización' en el contexto de las pruebas de software es el proceso de ejecutar una prueba con diferentes conjuntos de datos. En el video, se muestra cómo utilizar la parametrización con el decorador '@pytest.mark.parametrize' para probar la función 'zoom' con varios pares de números, lo que permite abordar múltiples escenarios de prueba en una sola función de prueba.

💡Ejecución de pruebas

La 'ejecución de pruebas' se refiere a la acción de correr las pruebas unitarias para verificar el comportamiento del software. En el script, se ejecutan las pruebas utilizando el comando 'pytest' en la terminal, lo que permite al programador obtener resultados y feedback sobre la efectividad de las pruebas y el estado de la aplicación.

💡Cobertura de pruebas

La 'cobertura de pruebas' mide qué porcentaje del código ha sido probado por las pruebas unitarias. Aunque no se menciona explícitamente en el script, el video ilustra cómo se pueden realizar pruebas exhaustivas para cubrir diferentes funcionalidades y casos de uso, lo que es esencial para garantizar una alta cobertura de pruebas y una aplicación confiable.

💡Modelo de lenguaje

Un 'modelo de lenguaje' en el contexto del video parece referirse a una clase o estructura de datos que representa y maneja información relacionada con lenguajes de programación. Se menciona en el script al crear una clase 'LanguageModel' con un método 'get_language' que retorna una lista de lenguajes, lo que indica que se está模拟 una interacción con una base de datos o fuente de datos para obtener información.

Highlights

Tutorial introductorio sobre cómo utilizar la librería pytest para realizar testing automatizado y crear pruebas unitarias en Python.

Creación de un entorno virtual para trabajar con Python utilizando el comando 'python -m venv vm'.

Activación del entorno virtual y verificación de los paquetes instalados con 'pip list'.

Instalación de la librería pytest con 'pip install pytest'.

Creación de una carpeta 'source' con un archivo 'main.py' para el código fuente.

Ejemplo de una función simple 'zoom_sumar' que suma dos números.

Creación de una función 'is_greater' para comparar si un número es mayor que otro.

Importancia de las pruebas unitarias para garantizar que el código siga funcionando después de cambios.

Uso de pytest para probar funcionalidades específicas del código de manera unitaria.

Estructura de un archivo de prueba con el nombre 'test_' seguido del nombre del archivo a probar.

Ejecución de pruebas con el comando 'pytest' y análisis de los resultados.

Uso del parámetro '-v' para obtener resultados más detallados en pytest.

Prueba de la función 'is_greater' con valores específicos y verificación del resultado.

Uso de parametrización con pytest para probar una función con diferentes conjuntos de parámetros.

Creación de una función 'login' para simular la verificación de credenciales contra una base de datos.

Pruebas de la función 'login' con credenciales correctas e incorrectas para verificar su comportamiento.

Creación de una clase 'LanguageModel' para simular la conexión y retorno de datos de una base de datos.

Pruebas de la clase 'LanguageModel' para verificar la integridad y contenido de la lista de lenguajes devueltos.

Inclusión de ejemplos de cómo probar la lógica de negocio y la conexión a bases de datos con pytest.

Invitación a los espectadores a dejar comentarios, suscripciones y compartir el video para recibir más contenido similar.

Transcripts

play00:00

Hola amigos de YouTube en este vídeo Te

play00:02

voy a enseñar de manera introductoria

play00:04

Cómo utilizar la librería pipes para

play00:06

realizar testing automatizado y crear

play00:08

pruebas unitarias en python si te

play00:10

interesa saber cómo probar tus programas

play00:12

de manera automatizada pues quédate

play00:14

hasta el final del vídeo empezamos

play00:18

[Música]

play00:25

tengo aquí ya creado una carpeta en el

play00:27

escritorio que he arrastrado aviso el

play00:29

estudio code Nada del otro mundo Así que

play00:32

voy a abrir una terminal en la parte

play00:33

superior nuevo terminal y vamos a

play00:35

comenzar creando un entorno virtual para

play00:37

trabajar el día de hoy Así que vamos a

play00:39

crear aquí con python y un m virtual m

play00:42

Vamos a ponerle vm doy un enter para que

play00:45

se cree el entorno virtual listo Ahora

play00:47

toca activarlo esto ya lo he hecho en

play00:49

varios de los vídeos de mi canal donde

play00:51

te enseño python Así que te invitaría

play00:53

que los revises Ok entramos a vm a

play00:56

virtual environment a scripts activate

play00:59

para activar nuestro entorno virtual si

play01:01

no has trabajado mucho con entornos

play01:02

virtuales te recomiendo que veas el

play01:04

vídeo que está apareciendo en este

play01:05

momento en la parte superior una vez

play01:07

activo nuestro entorno virtual voy a

play01:08

ejecutar Philips para ver lo que tengo

play01:10

instalado solamente tengo los paquetes

play01:12

básicos y vamos a comenzar instalando

play01:14

con pip install la librería Pay test

play01:17

bien damos un enter listo ya lo tengo

play01:20

vamos a comprobar nuevamente

play01:22

para ver si es que tengo la librería Y

play01:24

sí correctamente Aquí está junto con

play01:27

algunas librerías y paquetes adicionales

play01:28

que necesita voy a volver a limpiar con

play01:31

cls para limpiar la consola y vamos a

play01:33

comenzar creando aquí una carpeta

play01:35

llamada source donde voy a tener un

play01:37

archivo llamado Main puede ser main.py y

play01:41

para que se tome como un paquete Pues

play01:43

voy a ponerle guión bajo guión bajo

play01:46

init__.b si no conoces mucho acerca del

play01:49

trabajo con paquetes y módulos en python

play01:51

puedes ver el vídeo que te está

play01:52

apareciendo en este momento en la parte

play01:53

superior Bien dentro de main lo que voy

play01:56

a hacer es crear una función llamada

play01:57

zoom sumar muy sencilla realmente

play01:59

bastante sencilla y lo único que va a

play02:02

hacer es retornar x + y que sería lo

play02:05

básico Pero la idea de hoy es aprender

play02:07

Cómo probar y vamos a comenzar con

play02:08

ejemplos básicos para ir más adelante

play02:10

con algo más avanzado listo entonces

play02:12

tendría esta función aquí suma bastante

play02:15

sencilla voy a aprovechar de crear una

play02:17

función también llamada is greater Tank

play02:19

que significa es mayor Aquí también que

play02:23

reciba un número uno number 1 y number 2

play02:26

y lo que va a hacer esta función lo que

play02:29

va el trabajo que nos va a dar es

play02:31

retornar si es que este número es mayor

play02:32

que el otro Así que simplemente voy a

play02:34

copiar aquí y poner el símbolo de mayor

play02:37

bien sería ya dos funciones que voy a

play02:39

poder probar más adelante para hacer

play02:41

esto dentro de surf voy a crear una

play02:43

subcarpeta llamada test que no es

play02:45

necesario hacerlo pero para ir

play02:47

manteniendo un orden con nuestro código

play02:49

lo voy a hacer así una carpeta separada

play02:51

donde estén solamente los testing voy a

play02:54

también copiar el archivo init para

play02:56

convertirlo en un paquete ya está lo

play02:58

tengo dentro de Test y aquí voy a crear

play03:00

un nuevo archivo llamado test guión bajo

play03:03

Main lo importante para que un archivo

play03:05

de prueba se reconozca es que tenga

play03:08

primero el nombre test guión bajo y el

play03:10

nombre pues que tú quieras indicarle

play03:11

como estoy probando las funcionalidades

play03:13

de el archivo Main Pues sería bueno

play03:16

poner test guión bajo Main para indicar

play03:18

que estoy probando esas funcionalidades

play03:20

Cuál es la diferencia de las pruebas del

play03:22

testing en nuestro código son

play03:24

importantes realizar las pruebas porque

play03:26

lo que funciona en un momento lo que

play03:29

funciona ahora en nuestro código debería

play03:31

seguir funcionando si es que hacemos

play03:32

pruebas recordemos que un proyecto de

play03:34

programación en cualquier lenguaje

play03:36

siempre está sujeto a cambios Así que es

play03:39

importante poder probar que las

play03:40

funcionalidades que ya teníamos

play03:41

funcionando valga la redundancia si

play03:44

nosotros hacemos cambios en nuestro

play03:46

código mejoras todo siga funcionando tal

play03:48

cual Así que es bueno poder

play03:49

acostumbrarnos a escribir pruebas que

play03:51

ejecuten de manera automatizada toda esa

play03:54

comprobación de la lógica y de las

play03:56

funciones que tenemos pytés es una

play03:58

librería que nos ayuda con esto es

play04:00

justamente la que hemos instalado y se

play04:02

enfoca en pruebas unitarias es decir en

play04:04

probar funcionalidades específicas de

play04:06

nuestro código bien Vamos a comenzar

play04:08

aquí

play04:09

importando de source del archivo Main

play04:12

vamos a importar la función zoom y la

play04:14

función isrator tan esas dos y vamos a

play04:18

comenzar probando la función

play04:20

suma voy a crear aquí una función

play04:22

llamada test guión bajo zoom y voy a

play04:25

poner la palabra acert es una palabra

play04:27

clave una palabra reservada y bastante

play04:30

orientada muy utilizada en varios

play04:32

lenguajes en varios frames para indicar

play04:34

que un valor debe ser igual a otro aquí

play04:37

donde realmente vamos a comprobar si el

play04:38

resultado de una función es el esperado

play04:40

Así que vamos a utilizar la función zoom

play04:42

y vamos a poner Digamos 2,5 si sumamos 2

play04:46

y 5 esto no debería dar 7 Así que voy a

play04:48

poner igual a 7 te estarás imaginando

play04:52

que esto es muy sencillos de comprobar y

play04:54

de verificar pero vamos a ir poco a poco

play04:55

y lo importante es que aprendas Cómo

play04:57

hacer pruebas y cómo poder interpretar

play04:59

los resultados que tengas más allá de lo

play05:01

que estemos haciendo Así que vamos a

play05:03

comenzar con esto Ahora aquí en la

play05:05

consola voy a ejecutar pitest

play05:07

simplemente paytés lo escribo y le pulso

play05:10

la tecla enter países automáticamente

play05:12

detectó todos los archivos de prueba que

play05:14

tengo ha detectado voy a acercar aquí un

play05:17

poco el archivo source guión test bueno

play05:19

s

play05:22

y me dice que esa prueba pasado pasó en

play05:26

0.01 segundos y podemos ver aquí el

play05:28

resultado bueno 100% de efectividad en

play05:31

mis pruebas todas pasaron Solamente

play05:33

tengo una por el momento veo aquí

play05:35

también al costado del nombre del

play05:37

archivo un punto ese punto me indica que

play05:39

todo las pruebas contenidas en este

play05:41

archivo pasaron pero digamos que yo

play05:43

quiero un poco más de detalle Quiero ver

play05:45

el resultado o el nombre quizá exacto de

play05:48

la función que probé Así que voy a poner

play05:50

nuevamente Pay test guión V este guión V

play05:54

lo que hace es poner el resultado más

play05:56

verboso entonces lo que va a hacer es

play05:58

que sea más detallado más explicativo

play06:00

voy a limpiar con cls voy a volver a

play06:03

ejecutar y podemos ver aquí el resultado

play06:05

me dice que de ese archivo test guión

play06:07

bajo Main ha ejecutado la función test

play06:10

zoom y ha pasado y como es la única que

play06:12

tengo es mi 100% de pruebas han pasado

play06:15

efectivamente han pasado de manera

play06:17

exitosa también veo que dice collecte

play06:20

ítem eso significa que es el único ítem

play06:22

de prueba que ha podido encontrar paités

play06:24

en mi código por ahora para hacerlo un

play06:27

poco más complejo vamos a probar otra

play06:28

función vamos a probar la función test y

play06:31

un bajo israton y vamos a darle aquí

play06:34

pues dos valores también para poder

play06:36

probar nuevamente con acert vamos a

play06:39

verificar que algo es verdadero si no te

play06:41

lo mencioné hacer lo que haces verificar

play06:43

que esto sea verdad Entonces sí lo que

play06:46

estamos tratando de comprobar es verdad

play06:47

pues eso daría como resultado que la

play06:50

prueba pasó Así que vamos a utilizar

play06:52

aquí la función israter tan y vamos a

play06:54

ponerle 10,2 10 Es mayor que 2 bueno

play06:59

Esto debería dar verdadero y si esto da

play07:01

verdadero el láser indica que la prueba

play07:04

ha pasado vamos a limpiar con cls

play07:06

volvemos a ejecutar y ahora vemos que

play07:09

dos pruebas han sido recolectadas

play07:11

collected to items y vemos ahí las dos

play07:13

pruebas que han pasado a la derecha

play07:15

debería aparecer 50% cada una Ahí está

play07:18

bueno 50% y 100% no en cuenta y 50 más

play07:21

el 100% de mis pruebas han pasado veo

play07:24

también dos pasadas en 0.02 segundos así

play07:27

que de esta manera ya estoy haciendo

play07:29

pruebas de mi código y de las

play07:31

funcionalidades puntuales que he

play07:33

construido como esta zoom sumar y como

play07:36

is greater Tom para saber si un valor Es

play07:38

mayor que otro pero de esto no queda

play07:40

aquí puedo hacer muchas cosas más

play07:41

digamos que Quiero probar con un Rango

play07:43

de valores porque estar probando aquí

play07:45

solamente con dos y cinco Quizá no me es

play07:48

tan útil Así que vamos a utilizar algo

play07:50

que también nos provee la librería el

play07:52

paquete Pay test voy a importarlo import

play07:55

Pay test aquí está y vamos a hacer lo

play07:57

siguiente voy a volver a probar de una

play08:01

de alguna manera la función test zoom

play08:03

bien Pero esta vez la voy a probar con

play08:05

parámetros Así que voy a poner otro

play08:06

nombre vamos a poner aquí input x

play08:11

para indicar los dos valores que esperan

play08:13

no que son los dos números que quiero

play08:15

sumar Y también voy a ponerle acá un

play08:17

parámetro llamado espected que es lo que

play08:19

espero recibir o lo que espero lograr el

play08:21

valor esperado de ese procesamiento Aquí

play08:23

voy a poner asert nuevamente zoom y

play08:26

vamos a poner estos dos valores

play08:28

deberían ser igual al Spec pero no queda

play08:32

aquí esto necesito darle unos parámetros

play08:35

para que pueda probar y aquí tengo

play08:37

mediante países un decorador pay test

play08:40

punto Marc y vamos a pasarle aquí

play08:43

parametrice parametrización o valores

play08:45

parametrizados esto de aquí voy a darle

play08:48

una serie de parámetros en una lista voy

play08:50

a poner aquí una lista y dentro vamos a

play08:52

poner tuplas con valores digamos que el

play08:54

primer par de valores que Quiero probar

play08:55

es 5,16 Qué significa que cuando el 5

play08:59

sea el inputx el 1 sea el input 10 Yo

play09:03

espero que bueno el spected sea 6 tal

play09:05

cual cinco más uno Debería ser 6

play09:07

Entonces estos valores que yo estoy

play09:09

poniendo aquí una tupla se van a

play09:11

reemplazar como estos parámetros y van a

play09:14

entrar en cada posición a trabajar y así

play09:16

como tengo esto Pues podría tener más

play09:18

vamos a poner aquí unos cuatro ejemplos

play09:20

más vamos a poner aquí como segundo 6

play09:23

aquí Quiero probar la suma nuevamente

play09:26

puedo utilizar la función zoom 4,2 Eso

play09:29

me daría 6 6 + 6 debería darme 12 por

play09:32

aquí vamos a probar la suma de 19 y 1

play09:35

que debería darme 20 15 me debería dar

play09:38

35 20 + 15 35 y lo último quizá un

play09:42

negativo menos 7 más 10 debería darme

play09:46

pues la suma de esos dos valores de -7 y

play09:50

10 listo eso es lo que voy a tener hasta

play09:52

el momento pero aquí falta algo tengo

play09:55

que indicar como primer parámetro a esta

play09:57

función parametrice los nombres de estas

play10:00

variables o estos parámetros que voy a

play10:02

esperar así que lo voy a poner aquí

play10:03

entre comillas dobles una coma Y de esa

play10:07

manera ya quedaría ahora si Yo corro

play10:09

esto lo lo que va a pasar Es que voy a

play10:11

ejecutar o voy a probar la función suma

play10:13

varias veces voy a probarla por cada

play10:15

dupla que tengo por aquí serían cuatro

play10:18

pruebas en total Así que voy a subir

play10:20

aquí un poquito la consola cls y vuelvo

play10:23

a ejecutar fighters-v podemos ver como

play10:26

resultado que ha recolectado 6 ítems y

play10:28

vemos aquí todos los resultados que ha

play10:30

hecho

play10:31

5.166 12 20 con 15 35 y así

play10:34

sucesivamente y todos han pasado en la

play10:37

parte de la derecha puedo ver el

play10:38

porcentaje de avance de cada prueba y se

play10:41

puede apreciar Qué pasa si es que ahora

play10:43

yo cambio aquí en lugar de 12 voy a

play10:45

poner 13 vamos a limpiar y volver a

play10:48

ejecutar y aquí donde realmente puedes

play10:49

ver Para qué nos sirven las pruebas sin

play10:51

que yo haya tenido que comprobar todo

play10:53

manualmente y automáticamente las

play10:55

pruebas me dio como resultado que una ha

play10:57

fallado específicamente la que falló fue

play11:00

la cuarta prueba 66 debería darme 12

play11:02

pero esperaba 13 Bueno eso está mal

play11:06

porque 6 y 6 me da 12 Pero según esa

play11:08

prueba según ese pará esperaba 13 y voy

play11:11

a bajar aquí un poco para que se pueda

play11:13

apreciar mejor aquí se puede ver dice

play11:15

que asert comparó 12 contra 13 y por lo

play11:18

tanto no son valores iguales Así que esa

play11:21

prueba ha fallado Pero eso no implica

play11:23

que las demás hayan fallado las demás y

play11:25

pasaron entonces voy a regresarlo como

play11:27

estaba 12 vamos a limpiar volver a

play11:30

ejecutar y puedo ver que todo sigue

play11:32

funcionando correctamente ese fallo

play11:34

también podría haberse expresado en

play11:35

alguna de estas funciones si yo pongo

play11:37

por ejemplo que 10 es mayor a 12 Bueno

play11:39

eso es falso Así que la prueba debería

play11:42

fallar vamos a ver y efectivamente falló

play11:44

con esto estamos comprobando que una

play11:47

función o una serie de funciones falle

play11:49

Yo también podría ser que fallen dos a

play11:50

la vez digamos que también va a fallar

play11:52

esta limpio vuelvo a ejecutar y ahora

play11:55

veo un resultado mucho más grande donde

play11:57

dos pruebas han fallado de las seis que

play11:59

tenía y tengo los resultados de cada una

play12:01

aquí en este caso me está diciendo que

play12:03

falló en la función test is greater tan

play12:06

y acá me está diciendo que falló en ese

play12:08

parámetro bueno un conjunto de

play12:10

parámetros puntuales bueno fue aquí para

play12:13

la función test zoom para la prueba de

play12:15

las sumas bien Vamos correctos hasta

play12:18

aquí vamos a hacer algo más voy a

play12:19

regresar a Main y voy a crear una

play12:21

función llamada login voy a escribirla y

play12:23

te lo explico bien esta función login lo

play12:25

que hace es recibir dos parámetros bueno

play12:27

Aquí le voy a poner user name mejor va a

play12:29

recibir un nombre de usuario y un

play12:31

password aquí simularíamos que estamos

play12:33

conectándonos a una base de datos para

play12:34

comprobar las credenciales y va a

play12:37

regresar verdadero si es que user name

play12:39

es igual la busco Chrome 2010 y también

play12:41

el password es igual a 1 2 3 4 5 6

play12:43

solamente en ese caso retorna verdadero

play12:45

Bueno aquí podría también poner return

play12:48

directamente Pero bueno para que se vea

play12:49

un poquito más claro por esta vez vamos

play12:51

a hacerlo así con un If y un Else en el

play12:53

caso de que alguno de estos dos no se

play12:55

cumpla directamente va a retornar Falls

play12:57

vamos a probar esta función login porque

play13:00

solamente debería darme verdadero cuando

play13:02

estos dos valores son los adecuados

play13:04

vamos a regresar a 3 Main vamos a

play13:07

importar la aquí en la parte superior

play13:08

login y en este caso vamos a crear

play13:11

cuando pase login te es login cuando

play13:15

pase vamos a hacer aquí una variable

play13:17

llamada login pass bueno paso que sea

play13:21

igual a login y le pasamos Busco Chrome

play13:23

2010 los valores correctos y la clave

play13:26

del 1 al 6 y vamos a decir o bueno vamos

play13:29

a hacer un láser de esto a ver si es que

play13:31

es cierto también podría haberlo puesto

play13:33

en una sola línea Pero bueno vamos a

play13:35

hacerlo de esta manera también voy a

play13:37

crear otro test para cuando falle Así

play13:39

que aquí Vamos a ponerle fail

play13:42

y Bueno solamente por tener un orden

play13:44

aquí con las variables le pongo de esta

play13:46

manera Aquí voy a hacer que falle le voy

play13:49

a poner uso común 2010 XD digamos que no

play13:52

es el usuario correcto y la clave hasta

play13:54

el 8 bueno son valores que son falsos y

play13:56

no deberían darme verdadero para esa

play13:58

función voy a regresar también lo que

play14:00

tenía por aquí para que no fallen estas

play14:02

pruebas Ok Aquí está listo entonces Aquí

play14:05

voy a hacer algo más si lo dejo tal cual

play14:07

está la primera prueba va a pasar pero

play14:10

la segunda va a fallar y aquí yo no debo

play14:13

comprobar para este caso que me retorne

play14:15

verdadero sino que si le doy las claves

play14:17

o bueno las credenciales incorrectas el

play14:19

usuario y el password incorrecto me

play14:21

debería retornarlo bien un negativo así

play14:22

que debo estar seguro de que lo que me

play14:25

retorna es un falso por lo tanto el

play14:27

láser va a ser a notch Qué significa en

play14:30

python para los que ya lo conocen not es

play14:32

negar algo entonces si niego un falso

play14:35

estoy dando estoy obteniendo un

play14:36

verdadero y es justamente lo que debería

play14:38

darme aquí debo comprobar para el caso

play14:41

de un login si le doy las credenciales

play14:43

correctas me de true pero también debo

play14:45

comprobar que si les doy las claves

play14:46

incorrectas ve de un Falls no debería

play14:48

Mostrarme o no debería de volverme true

play14:50

en ambos casos porque si no mi login no

play14:52

serviría para nada entonces es algo muy

play14:54

particular que se puede ver por ejemplo

play14:56

en este caso de un login de un inicio de

play14:58

sesión Como debería ser en cada caso voy

play15:01

a volver a ejecutar aquí con pytés y

play15:03

puedo ver que todo ha pasado ha pasado

play15:04

el login pass y el login fail entonces

play15:06

pasó o funcionó bien cuando las

play15:09

credenciales fueron correctas y falló

play15:11

cuando debió fallar también me retorno

play15:13

falso cuando debió retornar falso bien

play15:15

Vamos a hacer un ejemplo más voy a crear

play15:17

dentro de surf una carpeta llamada

play15:20

models vamos a simular aquí la conexión

play15:23

a una base de datos y el retorno de una

play15:25

lista primero creo mi init punto Pi y

play15:28

vamos a crear en esta parte digamos un

play15:31

Language model como si tuviéramos un

play15:33

modelo para poder leer lenguajes

play15:35

lenguajes de programación dentro de Test

play15:37

también para tenerlo ordenado voy a

play15:39

crear un models voy a copiar para que no

play15:42

me falle y vamos a crear de una vez un

play15:45

archivo llamado test guión bajo Language

play15:47

model para que se dedique a probar Pues

play15:51

todo lo que tenga en este archivo

play15:52

llamado lenguage model listo dentro de

play15:55

lenguage model que es lo que vamos a

play15:56

hacer voy a escribir rápidamente una

play15:58

clase tengo aquí una clase llamada

play16:00

lenguage model y un método de clase

play16:02

llamado get Language que lo único que

play16:03

hace es retornar una lista de lenguajes

play16:06

de programación si charry haga Script

play16:07

etcétera me retorna esta lista simulamos

play16:10

aquí que nos hemos conectado una base de

play16:12

datos y esto lo estamos trayendo

play16:13

mediante una consulta o un orm quizá

play16:16

Bueno lo importante es que tenemos aquí

play16:18

una lista para comprobar que sea

play16:21

correcto dentro de Test guión bajo

play16:23

Language model vamos a comprobar primero

play16:25

que esa lista que se me retorne sea

play16:27

distinta de Non el Non es equivalente en

play16:30

otro lenguaje de programación al null a

play16:32

la ausencia de un valor también debemos

play16:34

comprobar que esa lista tenga elementos

play16:36

y también Sería bueno comprobar que cada

play16:38

elemento su el texto que tenga sea no

play16:41

sea vacío porque también podría ser una

play16:43

cadena de caracteres vacío y eso no me

play16:45

sirve Entonces vamos a comprobar esos

play16:47

tres posibles escenarios Aquí voy a

play16:49

comenzar importando Bueno una sección

play16:51

aquí para importar models from Surf

play16:53

punto models punto lenguage model voy a

play16:56

importar lenguas Mode lo siguiente es

play16:58

crear una función llamada test get

play17:01

Language Esto va a ser bastante parecido

play17:02

para tener un orden y aquí voy a

play17:05

comprobar que no sea no es decir que lo

play17:07

que me retorne no sea no vamos a poner

play17:10

aquí una variable Language igual

play17:11

Language model punto get Language y voy

play17:14

a hacer un aser de que esto Language sea

play17:17

diferente de no Eso debería ser cierto

play17:20

bien Vamos a comenzar con esto limpiamos

play17:22

la consola volvemos a ejecutar y vemos

play17:24

Que efectivamente me ha dado un

play17:26

resultado de qué ha pasado esa prueba

play17:28

podemos ver ahí toda la ruta no está

play17:30

dentro de Test model Slash test guión

play17:33

bajo Language model punto pay y ha

play17:35

pasado la prueba muy bien otra prueba

play17:37

interesante sería que tenga elementos

play17:40

Así que voy a poner aquí

play17:41

elements tiene elementos y lo que voy a

play17:46

comprobar aquí es que la longitud de

play17:48

estos lenguajes sea mayor a cero mayor a

play17:50

cero listo y de una vez voy a hacer lo

play17:53

siguiente vamos a copiar una vez más y

play17:56

voy a comprobar la longitud de cada uno

play17:59

de esos elementos check

play18:01

elements Language quizá Perdón check

play18:04

elements la longitud de cada uno y vamos

play18:07

a hacer aquí un foro para cada lenguaje

play18:10

para cada lenguaje en esta lista de

play18:12

lenguajes vamos a hacer un aser de que

play18:16

la longitud de cada uno de estos

play18:17

lenguajes sea mayor a cero esa sería mi

play18:21

tercera prueba vamos a limpiar volver a

play18:23

ejecutar y vemos Que todos han pasado

play18:26

porque todos los elementos bueno primero

play18:28

la lista no es Non después existen

play18:30

elementos y también cada elemento su

play18:32

longitud es mayor a cero Esto fallaría

play18:35

si es que aquí algunos de los elementos

play18:37

digamos hay javascript lo quito y va a

play18:39

ser una cadena de caracteres vacía vamos

play18:41

a ver lo que con esto limpiamos

play18:43

ejecutamos y vemos que ha fallado la

play18:46

tercera prueba porque la longitud de un

play18:48

elemento en particular en este caso

play18:49

bueno javascript que ya no existe esa

play18:51

longitud fue cero para este caso y fallo

play18:54

Así que esto sería una buena manera de

play18:56

ir comprobando algo tan complejo como la

play18:59

lectura de una base de datos poder leer

play19:01

una lista de elementos y poder ver que

play19:03

exista la lista que tenga elementos y

play19:05

que cada elemento tenga quizá un formato

play19:07

una cantidad mínima de caracteres o

play19:09

determinada regla a cumplir como parte

play19:10

de una lógica de negocio que quieres

play19:12

alcanzar con esto amigo o amiga

play19:14

programadora Espero que hayas tenido ya

play19:16

un acercamiento A las pruebas

play19:17

automatizadas con pytés como la librería

play19:20

pites de python puedas ver cómo realizar

play19:22

pruebas unitarias te haya gustado y lo

play19:24

comiences a aplicar en tus proyectos Si

play19:26

te gustaría que traiga ejemplos más

play19:27

avanzados Quizá en un proyecto real con

play19:29

flash con python y Flash poder probar

play19:31

ciertas funcionalidades pues déjamelo

play19:33

saber en la caja de comentarios también

play19:35

cualquier duda Puedes hacerlo por ahí No

play19:37

te olvides de dejarme tu like

play19:38

suscribirte y compartir este vídeo si te

play19:40

ha servido Gracias si te ha gustado este

play19:43

vídeo dale like suscríbete a mi canal y

play19:46

activa esa campanita para saber Cuando

play19:48

suba un nuevo vídeo Te dejo mis redes

play19:50

sociales para que puedas seguirme y

play19:52

ponerte en contacto conmigo si es que lo

play19:53

deseas recuerda que en mi canal tienes

play19:55

más de 600 videos de programación

play19:57

tecnología consejos de YouTube y mucho

play19:59

más todo este contenido fue creado 100%

play20:02

para ti

Rate This

5.0 / 5 (0 votes)

Related Tags
Pruebas UnitariasPythonLibrería pytestTutorialAutomatizaciónProgramaciónTestingCódigoDesarrolloTecnología
Do you need a summary in English?