En estos días me lancé al testing de una aplicación web desarrollada en PHP. Esta aplicación se conecta a una Api Rest, y la Api consulta una base de datos MongoDB.
Investigando sobre herramientas de testing, dí con Codeception. Como reza su página:
Y promete facilitar la codificación de pruebas unitarias, funcionales, de aceptación. Además se puede testear Apis (REST y SOAP), Base de Datos (incluyendo MongoDB!!!), y más.
era todo lo que necesitaba en una sola herramienta !! toda una promesa Codeception.
La instalación es realmente muy sencilla, en pocos minutos ya estamos escribiendo código.
Con la instalación se crea una carpeta llamada tests, y dentro de esta carpeta se crea una estructura básica para codificar pruebas unitarias, funcionales y de aceptación. Con esto ya podemos arrancar.
La clave de Codeception son sus actores, Codeception entiende los test como acciones que ejecuta una persona. Entonces, un UnitTester ejecuta acciones y testea código, un FunctionalTester, es un tester calificado que prueba la aplicación en su conjunto, y un AcceptanceTester interactúa con la interfaz.
Como podemos ver estos actores tienen diferentes capacidades. Estas capacidades también se pueden extender, es decir podemos agregar más acciones a las que tienen por defecto.
Veamos el caso de un test de aceptación. Vamos a testear el clásico Login, para crear el test se ejecuta el comando:
php codecept.phar generate:cept acceptance login
Esto generará el test llamado loginCept.php, ya que todos los test tienen la extensión Cept, y esta se agrega automáticamente.
Luego podríamos escribir algo así:
<?php
include ‘_bootstrap.php’;
$I = new AcceptanceTester($scenario);
$I->wantTo(‘Ingresar al sitio’);
$I->amOnPage(‘/Login’);
$I->fillField(‘Usuario[usuario]’, admin);
$I->fillField(‘Usuario[clave]’, 123456);
$I->click(‘login’);
?>
Con este ejemplo podemos ver algunas cosas:
– Primero que la sintaxis es muy sencilla ya que Codeception piensa que cualquier usuario debería poder escribir un test de aceptación.
– Segundo, algo que dije al principio, Codeception entiende los test como acciones de un usuario.
– Tercero, que codeception entiende php y está orientado a objetos
Las opciones para correr los tests son bastante amplias, se pueden guardar (opcional) en archivos xml o html, se puede correr una suite, o un test específico, etc. El resultado sería algo más o menos así:
Si necesitáramos extender las acciones de un usuario, algo que seguramente vamos a necesitar, por ejemplo para testear una api, o una bd, etc. Esto se hace extendiendo el módulo deseado (rest, mongodb, webdriver, etc)
Por ejemplo, para añadir el módulo REST:
class_name: FunctionalTester
modules:
enabled: [Filesystem, FunctionalHelper, REST]
config:
REST:
url: https://api.mercadolibre.com/
Esto se hace en el archivo de configuración de cada suite, en este caso en functional.suite.yml. Codeception automáticamente hace un build y agrega los método de REST al actor FunctionalTester.php), con esto ya estamos en condiciones de invocar a los método que provee el módulo REST
He dado un pantallazo de esta herramienta que me ha sido de gran utilidad, hay mucho más para ver, pero excede el objetivo de este post. Espero les sirva.
Mariela Vargas
https://ar.linkedin.com/pub/mariela-vargas/11/17b/785/en
___