top 6 best python testing frameworks
Este tutorial explica cómo se puede utilizar Python para la programación de pruebas y enumera las características y la comparación de los principales marcos de prueba de Python:
Con la aplicación generalizada de la inteligencia artificial, Python se ha convertido en un lenguaje de programación popular.
Este tutorial cubrirá cómo se puede usar Python para la programación de pruebas junto con algunos marcos de prueba basados en Python.
¡¡Empecemos!!
=> Consulte TODOS los tutoriales de Python aquí.
Lo que vas a aprender:
¿Qué es Python?
Según la definición tradicional, Python es un lenguaje de programación general interpretado de alto nivel que ayuda a los programadores a escribir código lógico y manejable para proyectos tanto pequeños como grandes.
Algunos de los beneficios de las pitones son:
- Ninguna compilación provoca la rápida ejecución del ciclo Editar-Prueba-Depurar.
- Fácil depuración
- Amplia biblioteca de soporte
- Estructura de datos fácil de aprender
- Alta productividad
- Colaboración en equipo
Trabajando en Python
- El intérprete lee el código Python del archivo fuente y lo examina en busca de un error de sintaxis.
- Si el código está libre de errores, el intérprete lo convierte en su equivalente 'Código de bytes'.
- Este código de bytes se transmite luego a la máquina virtual de Python (PVM) donde el código de bytes se vuelve a compilar por error, si lo hubiera.
¿Qué son las pruebas de Python?
- Las pruebas automatizadas son un contexto bien conocido en el mundo de las pruebas. Es donde se ejecutan los planes de prueba utilizando un script en lugar de un humano.
- Python viene con las herramientas y bibliotecas que admiten pruebas automatizadas para su sistema.
- Los casos de prueba de Python son comparativamente fáciles de escribir. Con el mayor uso de Python, los marcos de automatización de pruebas basados en Python también se están volviendo populares.
Lista de marcos de prueba de Python
A continuación se enumeran algunos marcos de prueba de Python que debe conocer.
- Robot
- PyTest
- Prueba de unidad
- DocTest
- Nariz2
- Testificar
Comparación de herramientas de prueba de Python
Resumamos rápidamente estos marcos en una breve tabla comparativa:
Licencia | Parte de | Categoría | Categoría Característica especial | |
---|---|---|---|---|
pytest.warns () | advertencia_esperada: expectativa (, coincidencia) | Afirmar advertencia con las funciones | ||
Robot ![]() | Software libre (Licencia ASF} | Bibliotecas de prueba genéricas de Python. | Test de aceptación | Enfoque de prueba basado en palabras clave. |
PyTest ![]() | Software libre (licencia MIT) | Independiente, permite conjuntos de pruebas compactos. | Examen de la unidad | Accesorio de clase especial y simple para facilitar las pruebas. |
prueba de unidad ![]() | Software libre (licencia MIT) | Parte de la biblioteca estándar de Python. | Examen de la unidad | Recopilación de pruebas rápida y ejecución de pruebas flexible. |
DocTest ![]() | Software libre (licencia MIT) | Parte de la biblioteca estándar de Python. | Examen de la unidad | Python Interactive Shell para el símbolo del sistema y la aplicación inclusiva. |
Nariz2 ![]() | Software libre (Licencia BSD) | Lleva funciones de unittest con funciones y complementos adicionales. | extensión unittest | Una gran cantidad de complementos. |
Testificar ![]() | Software libre (Licencia ASF) | Lleva características unittest y nose con características y complementos adicionales. | extensión unittest | Mejora del descubrimiento de pruebas. |
(Abreviaturas: MIT = Instituto de Tecnología de Massachusetts (1980), BSD = Distribución de software de Berkeley (1988), ASF = Fundación de software Apache (2004) )
¡¡Empecemos!!
#1) Robot
- El Robot Framework más popular es un marco de pruebas de automatización de código abierto basado en Python.
- Este marco está completamente desarrollado en Python y se utiliza para Test de aceptación y T es un desarrollo impulsado. El estilo de palabras clave se utiliza para escribir casos de prueba en el marco de Robot.
- El robot es capaz de ejecutar Java y .Net y también admite pruebas de automatización en plataformas cruzadas como Windows, Mac OS y Linux para aplicaciones de escritorio, aplicaciones móviles, aplicaciones web, etc.
- Junto con las pruebas de aceptación, Robot también se utiliza para la automatización robótica de procesos (RPA).
- Pepita (Package Installer for Python) es muy recomendable para la instalación de Robot.
- El uso de sintaxis de datos tabulares, pruebas basadas en palabras clave, bibliotecas enriquecidas y conjunto de herramientas y pruebas paralelas son algunas de las características sólidas de Robot que lo hacen popular entre los probadores.
Ejemplo:
Aquí hay una muestra de Ejecución de prueba fallida.
Aquí hay una muestra de Ejecución exitosa de la prueba.
Paquetes / Métodos:
Nombre del paquete | Trabajando | Importación de paquetes |
---|---|---|
correr() | Para ejecutar pruebas. | desde la ejecución de importación de robot |
run_cli () | Para ejecutar pruebas con argumento de línea de comando. | desde robot import run_cli |
rebote () | Para procesar la salida de prueba. | from robot importe rebote |
Enlace a API: Guía del usuario de Robot Framework
Enlace de descarga: Robot
# 2) PyTest
- PyTest es un marco de prueba de código abierto basado en Python que generalmente es para todo uso, pero especialmente para Pruebas funcionales y API.
- Pepita (Package Installer for Python) es necesario para la instalación de PyTest.
- Admite código de texto simple o complejo para probar API, bases de datos y UI.
- La sintaxis simple es útil para una fácil ejecución de la prueba.
- Complementos enriquecidos y es capaz de ejecutar pruebas en paralelo.
- Puede ejecutar cualquier subconjunto específico de pruebas.
Ejemplo:
|_+_|Para ejecutar la prueba use el py.test mando.
Captura de pantalla para referencia:
(imagen fuente )
Paquetes / Métodos:
Función | Parámetros | Trabajando |
---|---|---|
pytest.approx () | previsto, rel = Ninguno, abs = Ninguno, nan_ok = Falso | Afirme que dos números o dos conjuntos de números son aproximadamente igual a algunas diferencias. |
pytest.fail() | msg (str) pytrace (bool) | Si la prueba en ejecución falla explícitamente, se muestra el mensaje. |
pytest.skip () | allow_module_level (bool) | Omita la prueba en ejecución con el mensaje que se muestra. |
pytest.exit () | msg (str) código de retorno (int) | Salir del proceso de prueba. |
pytest.main () | args = Ninguno plugins = Ninguno | Devuelve el código de salida una vez que se realiza la ejecución de la prueba en proceso. |
pytest.raises () | excepción_esperada: Expectativa (, coincidencia) | Afirmar que una llamada a un bloque de código genera una excepción_esperada o para generar una excepción de falla |
Si desea acceder a una prueba escrita en un archivo específico, usamos el siguiente comando.
|_+_|Accesorio Pytest: Pytest Fixture se utiliza para ejecutar código antes de ejecutar el método de prueba para evitar la repetición del código. Esto se usa básicamente para inicializar la conexión a la base de datos.
Puede definir el dispositivo PyTest como se muestra a continuación.
|_+_|Afirmación: La afirmación es la condición que devuelve verdadero o falso. La ejecución de la prueba se detiene cuando falla la aserción.
A continuación se muestra un ejemplo:
|_+_| Enlace a API: API de Pytest
Enlace de descarga: Pytest
# 3) Prueba unitaria
- Unittest es el primer programa basado en Python marco de prueba unitario automatizado que fue diseñado para funcionar con la biblioteca estándar de Python.
- Apoya la reutilización de trajes de prueba y organización de pruebas.
- Se inspiró en JUnit y admite la automatización de pruebas, incluidas las colecciones de pruebas, la independencia de las pruebas, el código de configuración para las pruebas, etc.
- También se le llama como PyUnit.
- Unittest2 es un backport de nuevas características adicionales agregadas a Unittest.
Flujo de trabajo estándar de Unittest:
- Importe el módulo Unittest en el código del programa.
- Puede definir su propia clase.
- Crea funciones dentro de la Clase que has definido.
- Coloque unittest.main () que es el método principal en la parte inferior del código para ejecutar el caso de prueba.
Ejemplo:
Captura de pantalla para referencia:
(imagen fuente )
Paquetes / Métodos:
Método | Trabajando |
---|---|
addTest () | Agregue el método de prueba en la suite de pruebas. |
configuración() | Se llama antes de la ejecución del método de prueba para preparar la instalación de prueba. |
demoler() | Se llama después de la ejecución del método de prueba incluso si la prueba arroja una excepción. |
setUpClass () | Llamado después de pruebas en una clase individual. |
tearDownClass () | Llamado después de pruebas en una clase individual. |
correr() | Ejecute la prueba con resultados. |
depurar() | Ejecute la prueba sin resultado. |
Descubrir() | Busca todos los módulos de prueba en subdirectorios del directorio específico. |
asertEqual (a, b) | Para probar la igualdad de dos objetos. |
asserTrue / assertFalse (condición) | Para probar la condición booleana. |
( Nota: unittest.mock () es una biblioteca para pruebas de Python que permite reemplazar partes del sistema con objetos simulados. El núcleo clase simulada ayuda a crear un conjunto de pruebas fácilmente).
Enlace a API: API Unittest
Enlace de descarga: Prueba de unidad
# 4) DocTest
- Doctest es un módulo que se incluye en la distribución estándar de Python y se utiliza para Pruebas unitarias de caja blanca.
- Busca sesiones interactivas de Python para comprobar si funcionan exactamente como se requiere.
- Hace uso de capacidades selectivas de Python, como cadenas de documentos, el shell interactivo de Python y la introspección de Python (que determina las propiedades de los objetos en tiempo de ejecución).
- Funciones esenciales:
- Actualizando docstring
- Realización de pruebas de regresión
- Las funciones testfile () y testmod () se utilizan para proporcionar una interfaz básica.
Ejemplo:
|_+_| Captura de pantalla para referencia:
(imagen fuente )
Paquetes / Funciones :
Función | Parámetros | |
---|---|---|
nariz.tools.intest | (func) | El método o la función pueden denominarse prueba. |
doctest.testfile () | nombre de archivo (mendatorio) (, module_relative) (, nombre) (, paquete) (, globs) (, detallado) (, informe) (, banderas de opciones) (, extraglobos) (, raise_on_error) (, analizador) (, codificación) | |
doctest.testmod () | m) (, nombre) (, globs) (, detallado) (, informe) (, optionflags) (, extraglobs) (, raise_on_error) (, exclude_empty) | |
doctest.DocFileSuite () | * rutas, (module_relative) (, package) (, setUp) (, tearDown) (, globs) (, optionflags) (, parser) (, encoding) | |
doctest.DocTestSuite () | (módulo) (, globs) (, extraglobs) (, test_finder) (, setUp) (, tearDown) (, verificador) |
Nota: Para verificar ejemplos interactivos en el archivo de texto, podemos usar la función testfile ();
|_+_|Puede ejecutar la prueba directamente desde la línea de comandos con;
|_+_| Enlace a API: API DocTest
Enlace de descarga: Doctest
# 5) Nariz2
- Nose2 es el sucesor de Nose y está basado en Python Marco de pruebas unitarias que puede ejecutar Doctests y UnitTests.
- Nose2 se basa en prueba de unidad por lo tanto, se conoce como extender unittest o unittest con el complemento que fue diseñado para hacer las pruebas simples y fáciles.
- Nose utiliza pruebas colectivas de unittest.testcase y admite múltiples funciones para escribir pruebas y excepciones.
- Nose admite accesorios de paquetes, clases, módulos e inicialización compleja para que se definan de una sola vez en lugar de escribir con frecuencia.
Ejemplo:
|_+_|Captura de pantalla para referencia:
Paquetes / Métodos:
Método | Parámetros | Trabajando |
---|---|---|
nose.tools.ok_ | (expr, msg = Ninguno) | Atajo para afirmar. |
nose.tools.ok_ | (a, b, msg = Ninguno) | Atajo para 'afirmar a == b, '% R! =% R'% (a, b) |
nose.tools.make_decorator | (func) | Para replicar metadatos para la función dada. |
nariz.tools.levanta | (*excepción) | Lanzar una de las excepciones esperadas para pasar. |
nose.tools.timed | (límite) | Para especificar el límite de tiempo dentro del cual la prueba debe aprobarse. |
nose.tools.with_setup | (configuración = Ninguno, desmontaje = Ninguno) | Para agregar un método de configuración a una función de prueba. |
nose.tools.nottest | (func) | El método o la función no se pueden denominar prueba. |
Enlace a API: Complementos para Nose2
Enlace de descarga: Nariz2
# 6) Testifica
- Testify fue diseñado para reemplazar unittest y nose. Testify tiene funciones más avanzadas que unittest.
- Testify es popular como una implementación Java de pruebas semánticas (fácil de aprender e implementar la especificación de pruebas de software).
- Ejecutando Prueba automatizada de unidades, integración y sistemas es más fácil de testificar.
Características
- Sintaxis simple para el método de fijación.
- Descubrimiento de prueba improvisado.
- Método de instalación y desmontaje a nivel de clase.
- Sistema de complementos extensible.
- Utilidades de prueba fáciles de manejar.
Ejemplo:
|_+_|Captura de pantalla para referencia:
(imagen fuente )
Paquetes / Métodos:
Nombre del paquete | Trabajando | Importación de paquetes |
---|---|---|
afirmar | Proporciona herramientas de prueba integrales para las pruebas del sistema. | importar 'github.com/stretchr/testify/assert' |
burlarse de | Útil para probar sus objetos y llamadas. | importar 'github.com/stretchr/testify/mock' |
exigir | Funciona igual que para afirmar pero detiene la ejecución de la prueba cuando fallan las pruebas. | importar 'github.com/stretchr/testify/require' |
después | Proporciona lógica para crear la estructura y los métodos de la suite de pruebas. | importar 'github.com/stretchr/testify/suite' |
Enlace a API: Archivos de paquete de Testify
Enlace de descarga: Testificar
Marco de prueba de Python adicional
Hasta ahora, hemos revisado el marco de pruebas de Python más popular. Hay unos pocos más nombres en esta lista que podrían volverse populares en el futuro.
# 7) compórtate
- Comportarse se conoce como BDD (desarrollo impulsado por el comportamiento) marco de prueba que también se utiliza para Prueba de caja negra . Behave usa el lenguaje natural para escribir pruebas y trabaja con cadenas Unicode.
- El directorio Behave contiene archivos de características que tienen un formato de texto sin formato parece lenguaje natural y Implementaciones de pasos de Python .
Enlace a API: Guía del usuario de Behave
Enlace de descarga: Comportarse
# 8) lechuga
- La lechuga es útil para Pruebas de desarrollo impulsadas por el comportamiento . Hace que el proceso de prueba sea fácil y escalable.
- La lechuga incluye pasos como:
- Describir el comportamiento
- Definición de pasos en Python.
- Ejecutando el código
- Modificando código para pasar la prueba.
- Ejecutando el código modificado.
- Estos pasos se siguen de 3 a 4 veces para que el software esté libre de errores y, por lo tanto, mejore su calidad.
Enlace a API: Documentación de lechuga
Enlace de descarga: Lechuga
Preguntas y respuestas frecuentes
Echemos un vistazo a algunas de las preguntas frecuentes más comunes sobre este tema:
P # 1) ¿Por qué se usa Python para la automatización?
Responder: Como 'Python viene con las herramientas y bibliotecas que admiten pruebas automatizadas para su sistema', existen otras razones por las que Python se utiliza para realizar pruebas.
- Python está orientado a objetos y es funcional, lo que permite a los programadores concluir si la función y las clases son adecuadas según los requisitos.
- Python ofrece una rica biblioteca de paquetes útiles para probar después de instalar 'Pip'.
- Las funciones sin estado y la sintaxis simple son útiles para crear pruebas legibles.
- Python juega el papel de puente entre el caso de prueba y el código de prueba.
- Python admite la escritura dinámica de pato.
- Ofrece un IDE bien configurado y un buen soporte para el marco BDD.
- El soporte completo de la línea de comandos es útil para realizar una verificación manual.
- La estructura simple y buena, la modularidad, el rico conjunto de herramientas y los paquetes pueden ser útiles para el desarrollo a escala.
P # 2) ¿Cómo estructurar una prueba de Python?
Responder: Cuando cree una prueba en Python, debe considerar dos cosas como se indica a continuación.
- ¿Qué módulo / parte del sistema desea probar?
- ¿Qué tipo de prueba está optando (ya sea prueba unitaria o prueba de integración)?
La estructura general de la prueba de Python es tan simple como otras en las que decidimos los componentes de las pruebas, tales como: entradas, código de prueba que se ejecutará, salida y comparación de la salida con los resultados esperados.
P # 3) ¿Qué herramienta de automatización está escrita en Python?
Responder: Construir es una herramienta de automatización que está escrita y ampliada con Python y se utiliza para automatizar el ensamblaje de software. Buildout puede aplicarse a todas las fases del software desde el desarrollo hasta la implementación.
Esta herramienta se basa en 3 principios básicos:
- Repetibilidad: Establece que la configuración del proyecto desarrollada en el mismo entorno debe producir el mismo resultado independientemente de su historial.
- Componentización: El servicio de software debe incluir herramientas de autocontrol y debe configurar el sistema de control durante la implementación del producto.
- Automatización: La implementación de software debe ser altamente automatizada y ahorrar tiempo.
P # 4) ¿Se puede usar Python con Selenium?
Responder: Si. El lenguaje Python se usa con Selenium para realizar pruebas. La API de Python es útil para conectarse con el navegador a través de Selenium. La combinación de Python Selenium se puede usar para escribir pruebas funcionales / de aceptación usando Selenium WebDriver.
P # 5) ¿Es bueno el selenio con Python?
Responder: Hay varias razones por las que Selenium y Python se consideran una buena combinación:
- Selenium tiene el conjunto de herramientas más potente para admitir la automatización de pruebas rápidas.
- Selenium ofrece funciones de prueba dedicadas para realizar pruebas de aplicaciones web que ayudan a examinar el comportamiento real de las aplicaciones.
- Mientras que Python es un lenguaje de scripting de alto nivel, basado en objetos y fácil de usar con una estructura de palabras clave simple.
Ahora, cuando se trata de usar Selenium con Python, tiene varios beneficios como se indica a continuación.
- Fácil de codificar y leer.
- La API de Python es extremadamente útil para conectarte al navegador a través de Selenium.
- Selenium envía comandos estándar de Python a varios navegadores independientemente de sus variaciones de diseño.
- Python es comparativamente simple y compacto que los otros lenguajes de programación.
- Python viene con una gran comunidad para apoyar a aquellos que son completamente nuevos en el uso de Selenium con Python para realizar pruebas de automatización.
- Es un lenguaje de programación libre y abierto todo el tiempo.
- Selenium WebDriver es otra razón importante para usar Selenium con Python. Selenium WebDriver tiene un fuerte soporte de enlace para la sencilla interfaz de usuario de Python.
P # 6) ¿Cuáles son las medidas para elegir el mejor marco de prueba de Python?
Responder: Para elegir el mejor marco de prueba de Python, se deben tener en cuenta los siguientes puntos:
- Si la calidad y estructura de los guiones, está cumpliendo con sus propósitos. El guión de programación debe ser fácil de entender / mantener y estar libre de defectos.
- La estructura de programación de Python juega un papel importante en la elección del marco de prueba que consta de: atributos, declaraciones, funciones, operadores, módulos y archivos de biblioteca estándar.
- ¿Con qué facilidad puede generar pruebas y en qué medida se pueden reutilizar?
- El método adoptado para la ejecución del módulo de prueba / prueba (técnicas de ejecución del módulo).
P # 7) ¿Cómo elegir el mejor marco de pruebas de Python?
Responder: Comprender las ventajas y limitaciones de cada marco es una mejor manera de elegir el mejor marco de pruebas de Python. Exploremos -
mejor aplicación de descarga de mp3 para Android
Marco de robot:
Ventajas:
- El enfoque de prueba basado en palabras clave ayuda a crear casos de prueba legibles de una manera más fácil.
- Varias API
- Sintaxis de datos de prueba sencilla
- Admite pruebas paralelas a través de Selenium Grid.
Limitaciones:
- Crear informes HTML personalizados es bastante complicado con Robot.
- Menos soporte para las pruebas en paralelo.
- Requiere Python 2.7.14 y superior.
Pytest:
Ventajas:
- Admite un conjunto de pruebas compacto.
- No es necesario el depurador ni ningún registro de prueba explícito.
- Múltiples accesorios
- Complementos extensibles
- Creación de pruebas fácil y sencilla.
- Es posible crear casos de prueba con menos errores.
Limitaciones:
- No compatible con otros frameworks.
Prueba de unidad:
Ventajas:
- No es necesario ningún módulo adicional.
- Fácil de aprender para probadores a nivel principiante.
- Ejecución de prueba simple y fácil.
- Generación rápida de informes de prueba.
Limitaciones
- El nombre snake_case de Python y el nombre camelCase de JUnit causan un poco de confusión.
- Intención poco clara del código de prueba.
- Requiere una gran cantidad de código repetitivo.
Doctest:
Ventajas:
- Una buena opción para realizar pequeñas pruebas.
- La documentación de prueba dentro del método también proporciona información adicional sobre cómo funciona el método.
Limitaciones
- Solo compara la salida impresa. Cualquier variación en la salida provocará una falla en la prueba.
Nariz 2:
Ventajas:
- Nose 2 admite más configuraciones de prueba que unittest.
- Incluye un conjunto sustancial de complementos activos.
- API diferente de unittest que proporciona más información sobre el error.
Limitaciones:
- Al instalar complementos de terceros, debe instalar la herramienta de configuración / distribuir el paquete, ya que Nose2 admite Python 3 pero no complementos de terceros.
Testificar:
Ventajas:
- Fácil de entender y usar.
- Las pruebas unitarias, de integración y del sistema se pueden crear fácilmente.
- Componentes de prueba manejables y reutilizables.
- Agregar nuevas funciones a Testify es fácil.
Limitaciones:
- Inicialmente, Testify se desarrolló para reemplazar unittest y Nose, pero el proceso de transición a pytest está activado, por lo que se recomienda a los usuarios que eviten usar Testify para algunos proyectos próximos.
Behave Framework:
Ventajas:
- Fácil ejecución de todo tipo de casos de prueba.
- Razonamiento y pensamiento detallados
- Claridad de los resultados de QA / Dev.
Limitaciones:
- Solo admite pruebas de caja negra.
Marco de lechuga:
Ventajas:
- Lenguaje simple para crear múltiples escenarios de prueba.
- Útil para casos de prueba basados en el comportamiento para pruebas de caja negra.
Limitaciones:
- Necesita una fuerte coordinación entre desarrolladores, probadores y partes interesadas.
Puede elegir el marco de prueba de Python más adecuado considerando las ventajas y limitaciones anteriores que ayudarán a desarrollar los criterios adecuados para sus necesidades comerciales.
P # 8) ¿Qué marco es mejor para Python Automation?
Responder: Al considerar las ventajas y limitaciones, podemos considerar el tipo de prueba como una de las medidas para elegir el mejor marco de prueba:
- Pruebas funcionales: Robot, PyTest, Unittest
- Pruebas basadas en el comportamiento: Comportarse, Lechuga
Robot es el mejor marco para aquellos que son nuevos en las pruebas de Python y desean tener un comienzo sólido.
Conclusión
Subunidad, Prueba, Recursos de prueba, Sancho, Testtools son algunos nombres más agregados a la lista de Python Testing Framework. Sin embargo, solo hay unas pocas herramientas que se han popularizado hasta ahora, ya que las pruebas de Python son un concepto comparativamente nuevo que se introduce en el mundo de las pruebas.
Las empresas están trabajando para mejorar estas herramientas para que sean fáciles de entender y realizar pruebas. Con los complementos, complementos y paquetes de clases ricos y precisos, estas herramientas pueden volverse bien versadas y preferibles para realizar pruebas de Python.
Mientras tanto, los marcos mencionados anteriormente, desde unittest hasta Testify, brindan el soporte y el servicio necesarios para lograr el rendimiento previsto del sistema.
=>> Contáctenos para sugerir una lista aquí.Lectura recomendada
- Proceso de introducción e instalación de Python
- Tutorial de Python para principiantes (entrenamiento práctico de Python GRATIS)
- Más de 30 mejores tutoriales de selenio: aprenda selenio con ejemplos reales
- ¿Qué son las pruebas de automatización? (Guía definitiva para iniciar la automatización de pruebas)
- Las diferencias entre pruebas unitarias, pruebas de integración y pruebas funcionales
- Las 10 herramientas RPA de automatización de procesos robóticos más populares en 2021
- Los 25 mejores marcos y herramientas de prueba de Java para pruebas de automatización (Parte 3)
- Las 8 mejores herramientas y marcos de prueba de desarrollo impulsado por el comportamiento (BDD)