Ningún software está libre de errores. Este es un axioma que se aplica a todos los lenguajes de programación y a todas las aplicaciones.
Cuando esos bugs se despliegan en tu sitio web en producción, puedes sufrir consecuencias adversas de diversa gravedad. Estos son algunos ejemplos, que van desde lo molesto hasta lo económicamente perjudicial:
- Leve: Un usuario que no puede hacer clic en un enlace roto.
- Grave: Que el botón «Enviar» de un formulario de contacto no funcione, y que el usuario lo descubra sólo después de haber redactado su mensaje.
- Grave: Una pasarela de pago mal configurada, que hace que los usuarios no puedan comprar productos en tu tienda de comercio electrónico, abandonando así el sitio.
Ninguna herramienta es suficiente para manejar todos los aspectos de las pruebas de una aplicación desde todos los ángulos posibles. De hecho, además de encontrar errores, es vital ejecutar pruebas adicionales para validar otras funciones de la aplicación, como:
En este artículo, revisaremos 10 herramientas creadas por la comunidad de código abierto que pueden ayudar a conformar una pila para probar el código PHP en los plugins de WordPress. Algunas de estas herramientas fueron diseñadas específicamente para probar el código PHP; otras están pensadas para probar el código de WordPress; y algunas otras herramientas fueron creadas para manejar alguna funcionalidad genérica que es útil para las pruebas.
1. DevKinsta
DevKinsta es una suite de desarrollo local para sitios de WordPress. Con sólo proporcionar algunos detalles básicos, se instala inmediatamente una instancia local de un sitio de WordPress, y viene con varias herramientas de desarrollo útiles, como un buzón de correo electrónico, un gestor de bases de datos y un registro para facilitar la resolución de problemas.
DevKinsta es utilizado normalmente por desarrolladores y diseñadores cuando crean sus temas y plugins de WordPress. Pero también puede utilizarse como servidor web local para ejecutar pruebas de integración y funcionalidad. Esto se consigue junto con una herramienta HTTP que te ayuda a verificar que el contenido y las cabeceras de tus respuestas son correctas.
Las principales características de DevKinsta son:
- Es fácil crear un nuevo entorno de WordPress y eliminarlo cuando ya no se necesite
- Permite realizar pruebas con cualquier versión compatible de PHP y WordPress, y con cualquier combinación de ellas
- Se integra perfectamente con MyKinsta, donde los usuarios pueden crear una copia de seguridad externa de sus sitios y datos
2. PHPUnit
PHPUnit es un marco de pruebas orientado al programador para PHP. Es el marco más popular para ejecutar pruebas unitarias en código PHP, con el objetivo de validar unidades individuales de código fuente.
Las pruebas de PHPUnit permiten a los desarrolladores encontrar los problemas lo antes posible dentro del ciclo de desarrollo, ayudando a garantizar que no se han introducido regresiones en el código (es decir, que los cambios en alguna parte del código no han causado problemas en otra parte).
Las principales características de PHPUnit son
- Nuevas pruebas de características
- Validación de código recién refactorizada
- Puede automatizarse completamente y ejecutarse dentro del proceso de integración continua que elijas
- Depuración
- Documentación automática sobre el uso previsto mediante la invocación de funcionalidades y restricciones
- Permite el enfoque de Desarrollo Dirigido por Pruebas (TDD) en el que los desarrolladores crean primero las pruebas y luego la funcionalidad
3. Brain Monkey
Brain Monkey es una utilidad de pruebas para PHP y WordPress. Proporciona herramientas agnósticas al marco de trabajo que te permiten redefinir métodos PHP y probar el comportamiento de cualquier aplicación PHP. También proporciona herramientas específicas para probar el código de WordPress.
Las principales características de Brain Monkey son
- Permite que las pruebas unitarias interactúen con librerías externas no cargadas
- Permite invocar funciones de WordPress sin necesidad de cargar el entorno de WordPress
- Puede afirmar que las funciones de WordPress (como
add_filter
odo_action
) invocan la funcionalidad como se espera
4. Brain Faker
BrainFaker utiliza Faker (una popular biblioteca de PHP para generar datos falsos) y Brain Monkey para proporcionar una fácil generación de objetos falsos de WordPress y funciones relacionadas para que los pruebes, incluyendo:
WP_Post
instancias, y simular funciones relacionadas comoget_post
yget_post_field
WP_User
instancias, y simular funciones relacionadas comoget_userdata
,get_user_by
,user_can
, y másWP_Term
instancias, y simulan funciones relacionadas comoget_term
yget_term_by
WP_Comment
instanciasWP_Site
instancias, y funciones relacionadas con el simulacro comoget_site
WP_Post_Type
instancias, y funciones simuladas relacionadas comoget_post_type_object
ypost_type_exists
WP_Taxonomy
instancias, y funciones relacionadas con el simulacro comoget_taxonomy
ytaxonomy_exists
WP_Error
instancias
Las principales características de Brain Faker son:
- Inyecta datos falsos pero realistas de WordPress en la prueba unitaria: el acceso a la fecha de modificación de una entrada falsa se comportará como una fecha (por ejemplo,
2022-04-17T13:06:58+00:00
), el nombre de un usuario se ajustará (por ejemplo,"John Smith"
), una instancia de una entrada falsa es autoría de una instancia de un usuario falso, etc - Los datos falsos pueden ser proporcionados previamente o generados aleatoriamente
- Extensible: los desarrolladores pueden imitar clases y funciones de sus propios plugins de WordPress
5. Mockery
Mockery es un sencillo pero flexible marco de trabajo de objetos simulados de PHP pensado para ser utilizado junto con PHPUnit, PHPSpec o cualquier otro marco de trabajo de pruebas unitarias. Ofrece un doble marco de pruebas capaz de definir todas las posibles operaciones e interacciones de los objetos utilizando un lenguaje específico de dominio (DSL) legible por humanos.
Las principales características de Mockery son
- Permite la generación flexible de objetos simulados y stubs (que proporcionan respuestas predefinidas a llamadas específicas realizadas durante las pruebas)
- Mejora las capacidades de aislamiento de pruebas de PHPUnit
- API flexible para expresar expectativas simuladas, imitando en lo posible una descripción en lenguaje natural (por ejemplo,
$mock->shouldReceive('myMethod')->once()->andReturn('Hello world!');
) - Pruebas unitarias que utilizan objetos burlados en memoria para evitar la necesidad de acceder a sistemas más lentos (como bases de datos, sistemas de archivos o servicios externos)
- Puedes simular un comportamiento tanto determinista como no determinista
6. Herramienta de exportación nativa de WordPress
La herramienta de exportación nativa de WordPress descarga los datos de WordPress del sitio en tu dispositivo como un archivo XML, incluyendo entradas, páginas, tipos de entradas personalizadas, comentarios, campos personalizados, categorías, etiquetas, taxonomías personalizadas, usuarios y medios. El archivo XML tiene un formato personalizado (llamado archivo WordPress eXtended RSS o WXR) que puede importarse a cualquier sitio de WordPress.
Esta herramienta no está diseñada específicamente para realizar pruebas. Sin embargo, su utilidad radica en la posibilidad de crear instantáneas de la base de datos de WordPress que contengan un conjunto de datos adecuado, que puede utilizarse para las pruebas. Esto significa que el sitio de WordPress en producción, que contiene datos reales, puede exportarse e importarse a una instancia de desarrollo o de ensayo para probar nuevas funcionalidades.
Las principales características de la herramienta de exportación de WordPress son
- Creación de datos de prueba utilizando un sitio real de WordPress
- Archivo de exportación compartible de toda la base de datos
- Útil tanto para las pruebas de integración como para las unitarias
7. Guzzle
Guzzle es un cliente PHP HTTP que facilita el envío de peticiones HTTP y la integración con servicios web.
Guzzle es una herramienta genérica, por lo que las pruebas son sólo uno de sus posibles casos de uso. Junto con un servidor web local como DevKinsta, Guzzle permite ejecutar pruebas de integración: Puedes utilizar Guzzle para enviar una petición HTTP contra el servidor web de desarrollo, y luego pasar la respuesta a una prueba unitaria en PHPUnit que verifique que el contenido y las cabeceras se ajustan a lo esperado.
Las principales características de Guzzle son
- Cumple con la Recomendación del Estándar PHP «PSR-7 » (para interfaces de mensajes HTTP), lo que evita la dependencia del proveedor
- Sencillo y rápido
- Las pruebas se ejecutan contra un sitio real de WordPress, lo que aumenta la fiabilidad
- Se pueden ejecutar desde PHPUnit para facilitar y agilizar su ejecución
- Las pruebas de integración pueden automatizarse y añadirse al proceso de integración continua
8. WP-CLI
WP-CLI es la interfaz de línea de comandos para WordPress. Con ella, puedes actualizar plugins, configurar instalaciones multisitio y mucho más, sin necesidad de utilizar un navegador web.
WP-CLI no es específicamente una herramienta de pruebas, pero las pruebas están entre sus muchos casos de uso. Por ejemplo, tras poner en marcha un nuevo servidor web de desarrollo, puedes ejecutar un script bash que contenga comandos de WP-CLI para importar los datos de prueba al sitio de WordPress, crear los usuarios con los roles y capacidades adecuados, instalar los plugins de terceros necesarios y otras tareas similares.
Como el script con los comandos WP-CLI puede almacenarse en tu repositorio Git, el proceso para ejecutar las pruebas de integración puede automatizarse e integrarse en tu proceso de Integración Continua:
- Utiliza la herramienta de exportación de WordPress para generar datos de pruebas reales y almacenarlos en el repositorio Git.
- Utiliza DevKinsta para lanzar un servidor web con una nueva instancia de WordPress.
- Utiliza WP-CLI para importar los datos de prueba en el sitio de WordPress (DevKinsta puede funcionar a través de WP-CLI).
- Crea una prueba unitaria en PHPUnit haciendo que Guzzle ejecute una petición HTTP contra el servidor web para verificar su contenido y cabeceras de respuesta.
Las principales características de WP-CLI son:
- Permite la ejecución remota de comandos contra la instancia de WordPress a través de una interfaz de línea de comandos
- Extensible con otras herramientas
- Mejora las capacidades de la pila de pruebas
- Permite la automatización completa del proceso
9. XDebug
XDebug es una extensión para PHP que proporciona una serie de características para mejorar la experiencia de desarrollo de PHP, incluyendo la depuración, mejoras en los informes de errores de PHP, el rastreo, la creación de perfiles y el análisis de cobertura de código.
XDebug no te ayudará a probar tu código, sino que te ayudará a descubrir dónde está el error. Combinar XDebug con PHPUnit es especialmente eficaz: Si una prueba falla y no puedes encontrar el origen del problema, puedes utilizar XDebug para añadir puntos de interrupción en el código de la prueba unitaria. Cuando vuelvas a ejecutar la prueba unitaria, el script PHP se detendrá en cada uno de esos puntos de interrupción, lo que te permitirá inspeccionar el estado actual de la ejecución (pila de llamadas, valores de propiedades y objetos, etc.) e intentar descubrir qué es lo que falla.
Las principales características de XDebug son
- Presenta integraciones para editores de PHP populares, como VS Code, PHPStorm y Sublime
- Perfila cuánto tiempo se emplea en cada llamada a una función y cuánta memoria consume
- Mucho más potente que el simple uso de
var_dump
para depurar el código - Permite modificar los valores de las variables sobre la marcha al hacer una pausa en los puntos de interrupción
10. PHPStan
PHPStan es una herramienta de análisis estático para PHP, diseñada para encontrar errores en el código incluso antes de escribir las pruebas.
El objetivo de PHPStan es reducir el número de pruebas que los desarrolladores tienen que escribir. Esta herramienta es la primera que se ejecuta en la pila de pruebas, atrapando de forma preventiva el mayor número de fallos posible. Sólo los fallos que no se pueden deducir del análisis estático (por ejemplo, los que tienen una lógica defectuosa) deben validarse mediante pruebas unitarias.
PHPStan funciona escaneando todo el código base y buscando desajustes. Por ejemplo, el valor de respuesta de una función que devuelve un flotador no puede asignarse a un parámetro de la función de tipo entero. Siempre que el código contenga una ocurrencia de este tipo, se trata de un error potencial, y PHPStan te alertará de ello durante la etapa de desarrollo, justo mientras escribes el código de la aplicación.
Las principales características de PHPStan son
- Automatización e integración dentro de tu proceso de Integración Continua existente
- Localiza muchos errores complicados, como los desajustes de tipo
- Analiza toda la base de código, encontrando errores en partes del código raramente ejecutadas
- Organizado en niveles de complejidad creciente para permitir una integración gradual
- Presenta extensiones para los frameworks PHP y CMS más populares, como Symfony, Laravel, Doctrine, Nette y WordPress
Resumen
El coste de que los errores se cuelen sin ser detectados en tu aplicación en producción puede ser perjudicial para tu reputación e ingresos, por lo que debes intentar erradicarlos antes de que afecten a tus usuarios.
En las aplicaciones complejas, es casi imposible tener un 100% de confianza en que no contendrá errores. Por ello, debes establecer un proceso para encontrar y eliminar todos los errores posibles durante el ciclo de desarrollo inicial.
Con un conjunto de herramientas de prueba bien diseñado, puedes minimizar en gran medida las posibilidades de que tu aplicación se comporte de forma inesperada. La comunidad de código abierto ha creado y puesto a disposición un montón de herramientas para probar los diferentes aspectos de una aplicación, que puedes -¡y debes! – utilizar para crear una pila de pruebas completa.
En este artículo, hemos revisado 10 herramientas que te ayudarán a cumplir tus objetivos para probar el código PHP en un plugin de WordPress.
¿Cuál de estas herramientas has utilizado en tu último proyecto? Cuéntanos qué has construido con ellas en la sección de comentarios más abajo
Deja una respuesta