
¿Alguna vez has tenido la alegría de realizar pruebas de aceptación? Para nuestro equipo de deliciosos cerebros, probar nuestras versiones, en el pasado, fue una de las tareas más temidas en la lista de tareas. Mantenemos complementos a un estándar de alta calidad, por lo que es una necesidad, pero las pruebas manuales son extremadamente agotador y pueden tomar un tiempo costoso para los desarrolladores. Recientemente, decidimos que era hora de resolver esto. Ingrese, i + mis comienzos de automatización del proceso de prueba de aceptación. ¿Funcionará? ¿Nos ahorrará durante horas seguidas de pruebas manuales que adormecen el cerebro? ¿Seremos mejores? ¿Será todo un esfuerzo inútil?
Lea más para obtener más información sobre cómo se describe la automatización de nuestros complementos antes de lanzar, incluida la forma en que hemos probado manualmente en el pasado y una mirada a algunas de las pruebas de aceptación automática que ya hemos implementado. ¡Ten cuidado, este no es un tutorial! Las pruebas de aceptación pueden ser algo bastante complejo, por lo que, aunque mostraré algún código, está lejos de ser completo y primero aquí para darle una idea de cómo configuré las cosas. ¿Qué son las pruebas de aceptación? Entonces, ¿qué demonios es la prueba de aceptación y por qué lo hacemos?
Para los deliciosos cerebros, la prueba de aceptación es el proceso de probar la versión final de un futuro lanzamiento de complementos para garantizar que esté listo para nuestros clientes. En otras compañías (más grandes), es cuando el “cliente” o su representante prueba al candidato de lanzamiento y esperamos firmarlo, “aceptando” el lanzamiento. Una vez aceptado, se lanza en producción (o, en nuestro caso, se carga en nuestro servidor y se libera a nuestros clientes). Las pruebas de aceptación son muy diferentes de las pruebas unitarias al probar el software desde el punto de vista del cliente, probando todas las acciones y escenarios que un cliente debería y no debería poder lograr. Al probar la unidad, pruebe las clases y funciones individuales que componen la API de software. Al probar, haga clic en botones, enlaces, ingrese el texto, lea las solicitudes y, en general, interactúe con el software como usuario. Expectativas cuando un usuario final lo usa. Es la mejor manera de asegurarse de que tenga un producto de calidad adecuado para sus clientes. El método manual en los últimos 3 años, hemos participado en muchas versiones de WP Migra DB Pro y WP Descarga S3. Cada uno incluye un período de tormento de pruebas de lanzamiento. A nadie en el equipo le gusta probar una versión, porque es un negocio manual y dolorosamente lento, que pasa por un grupo creciente de guiones que detallan cada paso de las pruebas.
La captura de pantalla anterior muestra una pequeña parte del script de prueba de lanzamiento que normalmente usamos para la descarga de WP S3.El script tiene 116 pasos manuales que a menudo requieren comprobaciones manuales adicionales de datos u objetos en S3.Si una prueba falla, coloque una “X” en la columna “Resultado”, que se convierte en la celda en rojo, o una “P” si pasa, que se convierte en la celda verde.¿Ves esas células “PPP” en la captura de pantalla?¡A continuación en el script hay dos líneas que le indican que regrese y tome todos estos pasos nuevamente para múltiples sitios basados en campos y subdirectores!Destructor del alma.

También tenemos scripts para nuestros servicios web de Amazon, los activos de descarga de WP S3 Lite y WP S3, así como descargas digitales fáciles, WooCommerce, habilitar Media Reemplazo, Meta Slider, formularios personalizados avanzados e integraciones WPML. Y estos son solo scripts S3 de descarga de WP. WP MIGRA DB Pro también tiene un conjunto de scripts para probar WP migrando DB, WP migra DB Pro y suplementos multimedia de suplementos, CLI y herramientas multisitio. Al probar una versión, 2-3 desarrolladores están empatados durante aproximadamente una semana entera, pasando por todas las pruebas para todos los componentes del producto. A menudo, utilizamos un formato de “seguimiento” en el que un desarrollador comienza a probar, generalmente comenzando con la versión “Lite”. Una vez que los problemas se han resuelto para el complemento Lite, van a la versión “Pro” con un segundo desarrollador que comienza las pruebas “Lite”. Si se requiere un tercer desarrollador, se llama a un voluntario de uno de los otros equipos de arados, de modo que alguien que no esté tan familiarizado con el lanzamiento de la función puede “tomar los neumáticos” y comenzar a probar la versión Lite después del segundo desarrollador fue a profesional. A veces, a una versión más pequeña de remediación de errores, haremos un formato “cruzado”, el primer desarrollador de un extremo de las Escrituras y el segundo comienzo desde el otro extremo, pasando en el medio para ahorrar tiempo.

Como probablemente pueda darse cuenta, esta no es una parte popular del ciclo de lanzamiento para nuestros complementos. El período de desarrollo puede llevar un poco más de lo que probablemente debería, porque sentimos un poco de ansiedad que tenemos que pasar por las pruebas de liberación y, en contraste, encontrar cosas muy importantes (tos) que deben hacerse antes de que se realice la prueba de liberación. capaz de comenzar. Esto puede costar mucho tiempo para los desarrolladores, pero la calidad es increíblemente importante para nosotros como empresa, por lo que este nivel de prueba es necesario. En el pasado, hemos luchado por contratar evaluadores profesionales que puedan manejar nuestros productos muy técnicos. ¡Si tuviera éxito, nos gustaría saberlo en los comentarios! Al retirar nuestra empresa de Viena, el año pasado, Brad hizo una presentación sobre las pruebas que ha visto recientemente, lo que condujo a una gran discusión sobre el problema. Decidimos dar una prueba de aceptación automática para aliviar parte de la carga. Me ofrecí como voluntario para comenzar las cosas para la descarga de WP S3, ¡con gran alegría! A medida que automatizamos la selección de tecnología, utilizamos Codeception para impulsar nuestras pruebas de aceptación. Parte de nuestro equipo ya tenía algo de experiencia con la codecepción y, sinceramente, no hay otras opciones si desea escribir sus pruebas en el PHP, por lo que fue una opción obvia, si no la única.
El mayor problema que cualquiera de nosotros con codecepción en el pasado ha sido en la configuración de los servidores Selenium o PhantomJS necesarios para ejecutar las pruebas. Selenium y PhantomJs ofrecen navegadores web principales que pueden ser impulsados por una API para conectarse a su sitio de prueba y responder a pedidos como “hacer clic” para interactuar con los enlaces y el texto de los botones o informar el contenido de los campos o DOM, para ejecutar JavaScript y pronto. Estos servidores pueden ser un poco difícil de configurar. Además, Java u otras dependencias pueden requerir que no desee instalar e, idealmente, debe ejecutarse en segundo plano todo el tiempo que pueda ejecutar las pruebas. Otro problema con la ejecución de las pruebas de aceptación es asegurarse de tener un sitio web de prueba o dos que se encuentran en un estado de limpieza conocido. De lo contrario, no puede estar seguro de que un problema con sus pruebas no se deba a un sitio web de prueba. Para resolver los posibles problemas anteriores, opté por ejecutar todo el proceso de prueba en contenedores Docker, de modo que cada rodamiento tenga un entorno consistente que se pueda girar automáticamente en unos segundos. Docker compuso para mantener cosas relativamente flexibles, ejecutamos algunos contenedores que funcionan al unísono, para esto usamos Docker-Compose para mantener las cosas en orden.
La esencia anterior contiene el archivo de corriente Docker-Compose.yml actual para las pruebas de aceptación de descarga S3 de WP. No entraré en detalles aquí, pero como puede ver, hay una combinación de contenedores de datos que ofrecen puntos de montaje consistentes para el otro servidor web, servidor de bases de datos, servidores Selenium/PhantomJS, corredores de prueba y complementos de servicios de compilación. Algunos servicios dependen de otros para operar, por lo tanto, por ejemplo, el servicio predeterminado de aceptación del servicio que ejecuta las pruebas de codecepción se conecta con servicios de servidor web y servidor de selenio, ya que no puede hacer nada sin estar en funcionamiento. Arriba puede ver la estructura de la carpeta Docker desde el almacén de descarga S3 de WP. Tenemos imágenes de Docker personalizadas que construimos para los servicios de datos, PHP-CLI y PHP-Server, que son necesarias para cumplir con los requisitos para ejecutar WordPress o Codeception o para la construcción de nuestros complementos. Nuestras pruebas de aceptación se basan en archivos zip para complementos disponibles por dos razones: para que podamos probar la instalación de complementos y, por lo tanto, realmente probamos el producto que recibirán nuestros clientes. Entonces, como una pequeña ventaja, creamos un script Docker/Build-Plugins. Nos prepara para ejecutar las pruebas de aceptación en un servidor de construcción dedicado, o tal vez a través de Travis, pero, como hacemos nuestras pruebas unitarias. Hay algunos otros scripts cómodos en la carpeta Docker, pero el script más importante es ejecutar pruebas.
Ejecutar Docker/Run-Tests.sh en la línea de comando es todo lo que se necesita para ejecutar todo el conjunto de pruebas de aceptación.Sin embargo, puede darles argumentos para moverse de Selenium/Chrome predeterminado a algo como Selenium/Firefox o PhantomJS.Por ejemplo, para ejecutar las pruebas con Firefox, utilizamos: Docker/Run Tests.Sh -E Firefox En la siguiente sección, descubrirá sobre el argumento más importante que usamos muy a menudo al ejecutar las pruebas de aceptación, -t.Codeception Al usar Codeception para ejecutar las pruebas de aceptación, puede estructurar sus scripts en una hermosa jerarquía de carpetas y viajarlas en orden alfabético encontrando lo que termine con “-cop.php”.
Hemos dividido nuestras pruebas de aceptación en carpetas específicas para el complemento, prefijando las carpetas con un número de 2 dígitos para obtener el orden que queremos. Es similar dentro de las carpetas: cada prueba tiene un prefijo de 3 dígitos para garantizar que se esté ejecutando en el orden deseado. Los prefijos de 3 dígitos de los prefijos de la prueba de grupo vagamente en campos como instalación/configuración, configuración, carga de medios, edición de medios, etc. Podemos ejecutar las pruebas de un complemento completo: Docker/Run Tests.Sh -T 01-AMazon-S3-and Cloudfront o podemos ejecutar un solo script de prueba: Docker/Run-Tests.sh -T 01- La mayoría de los scripts de Amazon -3- y ChloudFront/01-002-Deactivate-Cepts dependen de otros scripts para los requisitos de configuración básicos preliminares. Por ejemplo, la aceptación scriptA/01-amazon-s3-and-ncloudfront/01-002-deactivateParent-cept.php muestra lo siguiente: < Incluye Common_Tests_Dir. 'DeactivateParentstd.php'; Use el script anterior 01-001-activePlogin-cept.php para la configuración básica, y para la reutilización entre los diferentes complementos hay un script desactivateParentStd.php en la carpeta común. Script 01-001-activePlogin-cept.php también es muy simple: <? Php incluye '_bootstrap.php'; Incluye Common_Tests_Dir. 'Activateplin.php'; El archivo _bootstrap.php que tiene cada carpeta de complemento hace, creando muchas variables utilizadas durante las pruebas. Aquí está la aceptación/01-Amazon-S3-y CloudFront/_Bootstrap.php: slug = ‘amazon-web-servicees’; $ parent-> basename = ‘Amazon-Web-Service’; $ parent-> name = ‘Amazon Web Services’; $ option_name = ‘tantan_wordpress_s3’; $ option_version = ‘5’; $ option_version_name = ‘posta_meta_version’; $ default_bucket = ‘wpos3.acceptance.testing’; $ default_region = ”; $ default_cloudfront = ‘xxxxxxxxx.cloudfront.net’; $ I = nuevo aceptado ($ escenario); La variable más importante es la que al final, donde la codecepción instala toda su magia. En aceptación/común/desactivateParentstd.php, puede ver dónde se usa $ ampliamente para llamar a las funciones de codecepción: < afirmarnotempty ($ plugin_slg, ‘plugin_slug no vacía’); $ I-> afirmarnotempty ($ nombre, ‘nombre no vacío’); $ I-> afirmarnotempty ($ padre, padre no vacío ‘); $ I-> loginasadmin (); $ I-> amonpluginspage (); // Happy ruta para el complemento de los padres … $ i-> seepluginivated ($ parent-> slug); // … y complemento de destino. if (! $ i-> can (‘seeepluginivated’, $ slog) &&! } // complemento principal no instalado aviso. global $ wp_plin_dir; Renombrar ($ wp_plugin_dir. ‘/Wp-content/plugins/’.

.bak ‘); $ I-> amonpluginspage (); $ I-> SEEPLUGINDEATACTATE ($ parent-> slug); $ I-> ver (“{$ name} se ha deshabilitado ya que requerirá el complemento {parent-> name}. Instalarlo y activado.”); Rename ($ wp_plugin_dir. “/Wp-content/plugins/{$ parent-> basenamea”, $ wp_plugin_dir. “/Wp-account/plugins/{parent-> basename}”); // complemento principal activado a través del aviso. $ I-> amonpluginspage (); $ I-> SEEPLUGINDEATACTATE ($ parent-> slug); $ I-> ver (“{$ name} se ha deshabilitado ya que requerirá el complemento {parent-> name}. $ I-> clic (‘#’. $ Plugin_slug. $ I-> seepluginivated ($ parent-> slug); Codeception le gusta que los nombres de sus funciones sean legibles ya que las acciones que está tomando y espera que ocurran según se define. Entonces, en el código anterior, puede ver cosas como “I Connect como administrador”, “Estoy en la página de arado” o “Veo el complemento activado”. Bueno, digo Codeception, pero hay un uso extenso del excelente conjunto de extensiones específicas de WordPress WP-Browser. Así es como podemos decir $ i-> amonpluginspage (); para navegar a la lista de complementos instalados en el tablero de WordPress sin tener que conocer la URL o $ I-> SEEPLUGINIVET ($ parent-> Slug);
Para probar si un complemento está activo.WP-Browser incluye muchas otras funciones cómodas que nos ahorran muchos códigos, ¡gracias Luca!El código anterior proviene de algunas de nuestras pruebas más simples.También hemos configurado algunas pruebas bastante complejas, que se ejecutan de clases que estamos instantando con diferentes parámetros para diferentes escenarios, para cubrir todas las formas en que la funcionalidad puede ser utilizada por los diferentes complementos con diferentes variables ambientales, etc.La suite de prueba se vuelve bastante compleja y ahora prueba algunas áreas de nuestros complementos mucho más minuciosos de lo que hemos hecho manualmente y en mucho menos tiempo.Así es como la ejecución de 25 minutos de los 11 scripts que componen pruebas de aceptación para los activos S3 de descarga de WP, tabletas a 15 segundos.


El fracaso tenía la intención de darle un poco de color y darle una idea de lo que se ve un error y ciertamente no debido a una actualización de nuestro sitio que se ejecutó al mismo tiempo cuando se probó la URL del documento.😉 ¡Una ejecución completa de la suite de prueba tiene 50 scripts y dura aproximadamente 5 horas!Navegación de línea, ¿verdad?La configuración de la prueba de aceptación automática no estuvo exenta de obstáculos.El mayor problema para mí cuando desarrolle estas pruebas de aceptación para la descarga de WP S3, y Jeff (que ahora escribe las pruebas para WP Migra DB Pro) es el ciclo de retroalimentación increíblemente lento.Nuestros guiones más cortos tardan unos minutos en ejecutarse, pero parte de la interacción más larga con Amazon S3 puede tardar 30 minutos en completar todos sus escenarios.Probablemente mejoraremos esto al interrumpir las pruebas en el futuro;
Pero cuando la razón para escribir pruebas es tener algo que se ejecute una vez al final de un ciclo de lanzamiento y, ocasionalmente, en el fondo durante ese ciclo, no hay un gran impulso para romper demasiado los guiones. Además, durante el desarrollo de pruebas, tuve suficiente tiempo para responder a algunas solicitudes de asistencia, examinar algunas solicitudes de extracción del resto del equipo o, en general, causar problemas en problemas de Github o Slack. Debido a que estaba a cargo de escribir las pruebas básicas, mientras que los otros dos miembros de la descarga de WP S3 continuaron con nuevos lanzamientos, hubo ocasiones en que el desarrollo rompería legítimamente las pruebas de aceptación, porque el complemento había cambiado. Esto fue bastante doloroso para mí, pero ahora que estamos en el punto en que todo el equipo es responsable de mantener las felices pruebas de aceptación, cada desarrollador tiene que actualizar las pruebas al hacer cambios que podrían romperlas.
Cada desarrollador ahora debe agregar scripts de prueba para nuevas funciones. Un problema que encontré recientemente con la configuración actual de Docker es que lo hice demasiado seguro y confié en Docker para MacOS (y sospecho que Windows) tiene la capacidad de traducir sus escritos en los montajes de volumen dentro del contenedor en la propiedad y permisos de la Ejecutando el usuario. Cuando intentamos ejecutar nuestras pruebas en Linux, no pudo configurar el sitio web o instalar los requisitos de NPM o compositor, ya que no podía escribir en el punto de montaje como un usuario de “www -ata”. Espero usar el mismo método que el Devilbox basado en Docker para superar esto y usar un archivo .env para permitir el UID y GID del usuario. De hecho, en algún momento puede valer la pena extraer y expandir Devilbox con nuestros contenedores, para que cada desarrollador pueda ejecutar fácilmente las pruebas de aceptación con una combinación diferente de servidor web y la versión PHP especificada en el archivo .env, no se necesita mucho . esfuerzo. ¿Es útil? Sí, la automatización de las pruebas de aceptación ciertamente ayuda a reducir el dolor para probar una versión. Actualmente, el 75% de las pruebas que hemos ejecutado manualmente para los servicios web de Amazon y la descarga de WP S3 Lite están cubiertas por pruebas de aceptación automática. 🎉 Es una gran victoria para nosotros. Eliminar la necesidad de pasar manualmente a través de todas estas pruebas no solo ahorra tiempo para la descarga de WP S3 Lite, sino debido a que la mayoría de las pruebas deben reanudarse para la descarga de WP S3 y los activos de descarga de WP S3, ahorramos tiempo para ellos. además.

Detrás de escena: cómo automatizamos la prueba de aceptación
Tags Detrás de escena: cómo automatizamos la prueba de aceptación
homefinance blog