SlideShare una empresa de Scribd logo
Test Unitarios y E2e en Front y Back -End
Eric Zeidan
@ericjanzei
Que es PHP-UNIT?
• PHPUnit es un entorno para realizar pruebas unitarias en
el lenguaje de programación PHP.
• PHPUnit es un framework de la familia xUnit originada
con SUnit y ha sido creado por Sebastian Bergman.
Para que sirven los Test
Desarrollador al
Comenzar un
Proyecto
VS
Desarrollador
Finalizando el
Proyecto
Para que sirven los Test
• Cuando desarrollamos software pueden aparecer errores en
cualquiera de las etapas del ciclo de programación, algunos
de ellos incluso permanecen sin ser descubiertos, de ahí la
importancia de las pruebas.
• Hay una gran probabilidad de que el código final tenga
errores tanto de requerimientos, como de diseño o de
funcionalidad. Para identificar estos problemas antes de que
ocurran en un entorno crítico, es necesario realizar pruebas
de software, una parte muy importante del proceso pero
también muy costosa; sin embargo, debemos en tener en
cuenta que el coste debido a un fallo mientras está el
software en funcionamiento puede llegar a ser mucho mayor.
Y para el Front?
• Para el front tenemos los llamados E2e testing, o testing
funcional o automated Testing, es un testing que se hace
gráficamente, con un robot imitando a un usuario
• Existen muchas herramientas pero aquí usaremos
Nightwacht, porque? Porque es Extensible, puede usarse
con Selenium Web-Server o con un Header-less Chrome,
ademas le podéis utilizar para escribir Test Unitarios para
Node.js.
Comenzamos…
• Primer paso
Instalamos un
WordPress para
crearnos un
Plugin donde
haremos un test
de PHP-Unit y
un Test E2e.
• El ejemplo será
el de agregar
una entrada
para que el
usuario se
pueda inscribir a
nuestro
Newsletter de
Desarrollo de
ese Plugin
Creamos el Plugin
Nuestra Clase Principal
<?php
namespace ezdevTestingPlugin;
use ezdevTestingPluginServicesMailCheck as MailCheck;
class MainController {
public function __construct() {
add_action('wp_dashboard_setup', [$this, 'add_dashboard_widgets']);
add_action('admin_post_newsletter_form', [$this, 'form_submit_processing']);
}
public function dashboard_widget_function() {
include_once PLUGINS_PATH . '/Templates/newsletter-form.php';
}
public function add_dashboard_widgets() {
wp_add_dashboard_widget('dashboard_widget', 'Testing WordCamp Madrid 2019', [$this, 'dashboard_widget_function']);
}
public function form_submit_processing() {
$return = "El Correo no puede estar vacio";
if (isset($_POST['email'])) {
$em = new MailCheck(($_POST['email']));
if($em) {
// Hacemos algo con el correo como Guardarlo o enviarlo por API
$return = "Gracias por subscribirte";
} else {
$return = "EL correo tiene un formato no valido";
}
}
wp_redirect(admin_url('?message=' . urlencode($return)));
die;
}
}
Nuestro Servicio y nuestro Test
<?php
namespace ezdevTestingPluginServices;
class MailCheck {
private $email;
public function __construct(string $email)
{
$this->ensureIsValidEmail($email);
$this->email = $email;
}
public static function fromString(string $email): self
{
return new self($email);
}
public function __toString(): string
{
return $this->email;
}
private function ensureIsValidEmail(string $email)
{
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new InvalidArgumentException(
sprintf(
'"%s" is not a valid email address',
$email
)
);
}
}
}
<?php
use PHPUnitFrameworkTestCase;
use ezdevTestingPluginServicesMailCheck;
final class MailCheckTest extends TestCase
{
public function testCanBeCreatedFromValidEmailAddress()
{
$this->assertInstanceOf(
MailCheck::class,
MailCheck::fromString('user@example.com')
);
}
public function testCannotBeCreatedFromInvalidEmailAddress()
{
$this->expectException(InvalidArgumentException::class);
MailCheck::fromString('invalid');
}
public function testCanBeUsedAsString()
{
$this->assertEquals(
'user@example.com',
MailCheck::fromString('user@example.com')
);
}
}
Ejecutamos nuestro test
Esqueleto de Nuestro Plugin
Como utilizar nightwatch para
nuestro test de Front-End
• Primero: Instala Node.js.
• "Node.js es una plataforma basada en el tiempo de ejecución de JavaScript de Chrome para crear
fácilmente aplicaciones de red escalables y rápidas. Node.js utiliza un modelo de E / S sin bloqueo
controlado por eventos que lo hace ligero y eficiente, perfecto para datos intensivos. aplicaciones
de tiempo que se ejecutan en dispositivos distribuidos „.
• Hay paquetes de instalación e instrucciones para la mayoría de los principales sistemas operativos
en su sitio web nodejs.org. Recuerde instalar también la herramienta npm, que es el administrador
de paquetes del nodo y se distribuye con el instalador Node.js.
• Segundo: Instala Nightwatch global si se desea:
• Para instalar la última versión con la herramienta de línea de comandos npm, ejecute lo siguiente:
$ npm install nightwatch -g
• Tercero: creamos un archivo llamado package.json donde
incluiremos nightwatch, google chrome driver y
geckodriver y lo instalaremos usando npm
• Cuarto: una vez creado el package.json lo ejecutamos con
$ npm install
{
"devDependencies": {
"chromedriver": "^2.45.0",
"geckodriver": "^1.14.1",
"nightwatch": "^1.0.18"
}
}
Instalar requerimientos
del package.json
Seguimos…
• Quinto: Creamos nuestro nightwacht.json en la carpeta
root de nuestro plugin
{
"src_folders": [
"test"
],
"webdriver": {
"start_process": true,
"server_path": "node_modules/.bin/chromedriver",
"port": 9515
},
"test_settings": {
"default": {
"desiredCapabilities": {
"browserName": "chrome"
}
}
}
}
Creamos nuestro primer test de Front-End
• Para ello debemos crear un archivo .js con las
especificaciones y aserciones que queremos conseguir
• Editamos un archivo que llamaremos
dashboardnewsletter.js
module.exports = {
'Prueba de Formulario en Dashboard Admin' : function (client) {
const url = "http://127.0.0.1/wordpress";
client
.url(url + '/wp-admin')
.waitForElementVisible('#user_login', 1000)
.assert.title('Log In ‹ WordCamp Madrid 2019 — WordPress')
.setValue('#user_login', 'test')
.setValue('#user_pass', 'test')
.click('#wp-submit')
.waitForElementVisible('#welcome-panel', 1000)
.assert.containsText('div.welcome-panel h2', 'Welcome to WordPress!', 'Mensaje de Bienvenida Correcto')
.setValue('#email', 'test@dominio.com')
.click('#newsletter-add')
.waitForElementVisible('#welcome-panel', 2000)
.assert.containsText('#ezdv-message', 'Gracias por subscribirte', 'Suscripción correcta')
.end();
}
};
Ejecutamos nuestro script
Veamos todo nuevamente
Vamos al Código
https://github.com/k2klettern/wp-test
Gracias
@ericjanzei

Más contenido relacionado

La actualidad más candente

Prueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriverPrueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
David Gómez García
 
Desplegando código con Phing, PHPunit, Coder y Jenkins
Desplegando código con Phing, PHPunit, Coder y JenkinsDesplegando código con Phing, PHPunit, Coder y Jenkins
Desplegando código con Phing, PHPunit, Coder y Jenkins
La Drupalera
 
Java desde cero maven
Java desde cero mavenJava desde cero maven
Java desde cero maven
www.mentoringit.com.mx
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
Rodrigo Pimentel
 
Cómo migrar de source safe a team foundation server 2010
Cómo migrar de source safe a team foundation server 2010Cómo migrar de source safe a team foundation server 2010
Cómo migrar de source safe a team foundation server 2010Diego Vazquez Arce
 
atSistemas - Presentación Integración Continua AUG Barcelona enero13
atSistemas - Presentación Integración Continua AUG Barcelona enero13atSistemas - Presentación Integración Continua AUG Barcelona enero13
atSistemas - Presentación Integración Continua AUG Barcelona enero13atSistemas
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
Luis Ruiz Pavón
 
Integrando sonar
Integrando sonarIntegrando sonar
Integrando sonar
Abimael Desales López
 
Evidencia aa1 taller
Evidencia aa1 tallerEvidencia aa1 taller
Evidencia aa1 taller
carloscoronel52
 
Catalyst: Framework para el desarrollo de aplicaciones Web
Catalyst: Framework para el desarrollo de aplicaciones WebCatalyst: Framework para el desarrollo de aplicaciones Web
Catalyst: Framework para el desarrollo de aplicaciones Web
Esteban Saavedra
 
Gestión del software con Maven y Jenkins
Gestión del software con Maven y JenkinsGestión del software con Maven y Jenkins
Gestión del software con Maven y Jenkins
BEEVA_es
 
Instalacion de java y sus herramientas
Instalacion de java y sus herramientasInstalacion de java y sus herramientas
Instalacion de java y sus herramientasJuan Diaz Calixtro
 
Laravel 4.2 pdf
Laravel 4.2 pdfLaravel 4.2 pdf
Laravel 4.2 pdf
ALDEN_HERRE
 
Framework Catalyst
Framework CatalystFramework Catalyst
Framework Catalyst
Eduardo Rafael Petla
 
lección 02- creación de Virtual Host laravel 5 + Xampp + Windows
lección 02- creación de Virtual Host laravel 5 + Xampp + Windowslección 02- creación de Virtual Host laravel 5 + Xampp + Windows
lección 02- creación de Virtual Host laravel 5 + Xampp + Windows
Jairo Hoyos
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open source
scrumecuador
 
Laboratorio de netbeans sql server15-04-2013
Laboratorio de netbeans  sql server15-04-2013Laboratorio de netbeans  sql server15-04-2013
Laboratorio de netbeans sql server15-04-2013
saul1905
 
Presentación Spring Boot en Autentia
Presentación Spring Boot en AutentiaPresentación Spring Boot en Autentia
Presentación Spring Boot en Autentia
Jorge Pacheco Mengual
 
Testing & debugging lightning web components
Testing & debugging lightning web componentsTesting & debugging lightning web components
Testing & debugging lightning web components
Federico Giust
 

La actualidad más candente (20)

Prueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriverPrueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
 
Desplegando código con Phing, PHPunit, Coder y Jenkins
Desplegando código con Phing, PHPunit, Coder y JenkinsDesplegando código con Phing, PHPunit, Coder y Jenkins
Desplegando código con Phing, PHPunit, Coder y Jenkins
 
Java desde cero maven
Java desde cero mavenJava desde cero maven
Java desde cero maven
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
Cómo migrar de source safe a team foundation server 2010
Cómo migrar de source safe a team foundation server 2010Cómo migrar de source safe a team foundation server 2010
Cómo migrar de source safe a team foundation server 2010
 
atSistemas - Presentación Integración Continua AUG Barcelona enero13
atSistemas - Presentación Integración Continua AUG Barcelona enero13atSistemas - Presentación Integración Continua AUG Barcelona enero13
atSistemas - Presentación Integración Continua AUG Barcelona enero13
 
Selenium
SeleniumSelenium
Selenium
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
 
Integrando sonar
Integrando sonarIntegrando sonar
Integrando sonar
 
Evidencia aa1 taller
Evidencia aa1 tallerEvidencia aa1 taller
Evidencia aa1 taller
 
Catalyst: Framework para el desarrollo de aplicaciones Web
Catalyst: Framework para el desarrollo de aplicaciones WebCatalyst: Framework para el desarrollo de aplicaciones Web
Catalyst: Framework para el desarrollo de aplicaciones Web
 
Gestión del software con Maven y Jenkins
Gestión del software con Maven y JenkinsGestión del software con Maven y Jenkins
Gestión del software con Maven y Jenkins
 
Instalacion de java y sus herramientas
Instalacion de java y sus herramientasInstalacion de java y sus herramientas
Instalacion de java y sus herramientas
 
Laravel 4.2 pdf
Laravel 4.2 pdfLaravel 4.2 pdf
Laravel 4.2 pdf
 
Framework Catalyst
Framework CatalystFramework Catalyst
Framework Catalyst
 
lección 02- creación de Virtual Host laravel 5 + Xampp + Windows
lección 02- creación de Virtual Host laravel 5 + Xampp + Windowslección 02- creación de Virtual Host laravel 5 + Xampp + Windows
lección 02- creación de Virtual Host laravel 5 + Xampp + Windows
 
Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open source
 
Laboratorio de netbeans sql server15-04-2013
Laboratorio de netbeans  sql server15-04-2013Laboratorio de netbeans  sql server15-04-2013
Laboratorio de netbeans sql server15-04-2013
 
Presentación Spring Boot en Autentia
Presentación Spring Boot en AutentiaPresentación Spring Boot en Autentia
Presentación Spring Boot en Autentia
 
Testing & debugging lightning web components
Testing & debugging lightning web componentsTesting & debugging lightning web components
Testing & debugging lightning web components
 

Similar a Test Unitarios y E2E front y Back

Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniter
andrewzg
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Fco Javier Núñez Berrocoso
 
Proyect Evenge. Event manager
Proyect Evenge. Event managerProyect Evenge. Event manager
Proyect Evenge. Event manager
Ivan Ortega
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephpbetabeers
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
Andy Dawson
 
PHP Unit y TDD
PHP Unit y TDDPHP Unit y TDD
PHP Unit y TDD
Emergya
 
Python Gae django
Python Gae djangoPython Gae django
Python Gae django
Manuel Pérez
 
instalacion e intregracion de OcsInventory-NG y GLPI
instalacion e intregracion de OcsInventory-NG y GLPIinstalacion e intregracion de OcsInventory-NG y GLPI
instalacion e intregracion de OcsInventory-NG y GLPI
miltonvf
 
PASOS PARA LA SOLUCION DE PROBLEMAS - HTML
PASOS PARA LA SOLUCION DE PROBLEMAS - HTMLPASOS PARA LA SOLUCION DE PROBLEMAS - HTML
PASOS PARA LA SOLUCION DE PROBLEMAS - HTMLfelipeforero72
 
SecondNug Febrero 2012 - Automatización de despliegues
SecondNug Febrero 2012 - Automatización de desplieguesSecondNug Febrero 2012 - Automatización de despliegues
SecondNug Febrero 2012 - Automatización de despliegues
Jose Luis Soria
 
Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7
Juan Fede
 
Formato 001 guia_de_actividades_de_aprendizaje
Formato 001 guia_de_actividades_de_aprendizajeFormato 001 guia_de_actividades_de_aprendizaje
Formato 001 guia_de_actividades_de_aprendizaje
ewinmauricio
 
Tutorial windows azure con visual studio 2010
Tutorial windows azure con visual studio 2010Tutorial windows azure con visual studio 2010
Tutorial windows azure con visual studio 2010
Naim Jhon Cruzado Paredes
 
Pylot : Herramienta para pruebas de rendimiento de Aplicaciones Web
Pylot : Herramienta para pruebas  de rendimiento de Aplicaciones WebPylot : Herramienta para pruebas  de rendimiento de Aplicaciones Web
Pylot : Herramienta para pruebas de rendimiento de Aplicaciones Web
Deisy Sapaico
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsDavid Calavera
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
Uniminuto - San Francisco
 
Metodología para la solución de problemas utilizando la computadora 2°Am Prog...
Metodología para la solución de problemas utilizando la computadora 2°Am Prog...Metodología para la solución de problemas utilizando la computadora 2°Am Prog...
Metodología para la solución de problemas utilizando la computadora 2°Am Prog...Dulcevelazquez6
 
Continuous Integration
Continuous Integration Continuous Integration
Continuous Integration
jose diaz
 
Dynamics saturday madrid 2019 jose antonio estevan share
Dynamics saturday madrid 2019   jose antonio estevan shareDynamics saturday madrid 2019   jose antonio estevan share
Dynamics saturday madrid 2019 jose antonio estevan share
Demian Raschkovan
 

Similar a Test Unitarios y E2E front y Back (20)

Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniter
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
 
Proyect Evenge. Event manager
Proyect Evenge. Event managerProyect Evenge. Event manager
Proyect Evenge. Event manager
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
PHP Unit y TDD
PHP Unit y TDDPHP Unit y TDD
PHP Unit y TDD
 
Python Gae django
Python Gae djangoPython Gae django
Python Gae django
 
instalacion e intregracion de OcsInventory-NG y GLPI
instalacion e intregracion de OcsInventory-NG y GLPIinstalacion e intregracion de OcsInventory-NG y GLPI
instalacion e intregracion de OcsInventory-NG y GLPI
 
PASOS PARA LA SOLUCION DE PROBLEMAS - HTML
PASOS PARA LA SOLUCION DE PROBLEMAS - HTMLPASOS PARA LA SOLUCION DE PROBLEMAS - HTML
PASOS PARA LA SOLUCION DE PROBLEMAS - HTML
 
Informatica
InformaticaInformatica
Informatica
 
SecondNug Febrero 2012 - Automatización de despliegues
SecondNug Febrero 2012 - Automatización de desplieguesSecondNug Febrero 2012 - Automatización de despliegues
SecondNug Febrero 2012 - Automatización de despliegues
 
Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7
 
Formato 001 guia_de_actividades_de_aprendizaje
Formato 001 guia_de_actividades_de_aprendizajeFormato 001 guia_de_actividades_de_aprendizaje
Formato 001 guia_de_actividades_de_aprendizaje
 
Tutorial windows azure con visual studio 2010
Tutorial windows azure con visual studio 2010Tutorial windows azure con visual studio 2010
Tutorial windows azure con visual studio 2010
 
Pylot : Herramienta para pruebas de rendimiento de Aplicaciones Web
Pylot : Herramienta para pruebas  de rendimiento de Aplicaciones WebPylot : Herramienta para pruebas  de rendimiento de Aplicaciones Web
Pylot : Herramienta para pruebas de rendimiento de Aplicaciones Web
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y Rails
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
Metodología para la solución de problemas utilizando la computadora 2°Am Prog...
Metodología para la solución de problemas utilizando la computadora 2°Am Prog...Metodología para la solución de problemas utilizando la computadora 2°Am Prog...
Metodología para la solución de problemas utilizando la computadora 2°Am Prog...
 
Continuous Integration
Continuous Integration Continuous Integration
Continuous Integration
 
Dynamics saturday madrid 2019 jose antonio estevan share
Dynamics saturday madrid 2019   jose antonio estevan shareDynamics saturday madrid 2019   jose antonio estevan share
Dynamics saturday madrid 2019 jose antonio estevan share
 

Último

(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
JulyMuoz18
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
AlejandraCasallas7
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
cristianrb0324
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
PABLOCESARGARZONBENI
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
raquelariza02
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
Fernando Villares
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
Leidyfuentes19
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Telefónica
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
DiegoCampos433849
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
jjfch3110
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
DanielErazoMedina
 
Robótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptxRobótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptx
44652726
 

Último (20)

(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 
Robótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptxRobótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptx
 

Test Unitarios y E2E front y Back

  • 1. Test Unitarios y E2e en Front y Back -End Eric Zeidan @ericjanzei
  • 2. Que es PHP-UNIT? • PHPUnit es un entorno para realizar pruebas unitarias en el lenguaje de programación PHP. • PHPUnit es un framework de la familia xUnit originada con SUnit y ha sido creado por Sebastian Bergman.
  • 3. Para que sirven los Test Desarrollador al Comenzar un Proyecto VS Desarrollador Finalizando el Proyecto
  • 4. Para que sirven los Test • Cuando desarrollamos software pueden aparecer errores en cualquiera de las etapas del ciclo de programación, algunos de ellos incluso permanecen sin ser descubiertos, de ahí la importancia de las pruebas. • Hay una gran probabilidad de que el código final tenga errores tanto de requerimientos, como de diseño o de funcionalidad. Para identificar estos problemas antes de que ocurran en un entorno crítico, es necesario realizar pruebas de software, una parte muy importante del proceso pero también muy costosa; sin embargo, debemos en tener en cuenta que el coste debido a un fallo mientras está el software en funcionamiento puede llegar a ser mucho mayor.
  • 5. Y para el Front? • Para el front tenemos los llamados E2e testing, o testing funcional o automated Testing, es un testing que se hace gráficamente, con un robot imitando a un usuario • Existen muchas herramientas pero aquí usaremos Nightwacht, porque? Porque es Extensible, puede usarse con Selenium Web-Server o con un Header-less Chrome, ademas le podéis utilizar para escribir Test Unitarios para Node.js.
  • 6.
  • 7. Comenzamos… • Primer paso Instalamos un WordPress para crearnos un Plugin donde haremos un test de PHP-Unit y un Test E2e. • El ejemplo será el de agregar una entrada para que el usuario se pueda inscribir a nuestro Newsletter de Desarrollo de ese Plugin
  • 9.
  • 10.
  • 11. Nuestra Clase Principal <?php namespace ezdevTestingPlugin; use ezdevTestingPluginServicesMailCheck as MailCheck; class MainController { public function __construct() { add_action('wp_dashboard_setup', [$this, 'add_dashboard_widgets']); add_action('admin_post_newsletter_form', [$this, 'form_submit_processing']); } public function dashboard_widget_function() { include_once PLUGINS_PATH . '/Templates/newsletter-form.php'; } public function add_dashboard_widgets() { wp_add_dashboard_widget('dashboard_widget', 'Testing WordCamp Madrid 2019', [$this, 'dashboard_widget_function']); } public function form_submit_processing() { $return = "El Correo no puede estar vacio"; if (isset($_POST['email'])) { $em = new MailCheck(($_POST['email'])); if($em) { // Hacemos algo con el correo como Guardarlo o enviarlo por API $return = "Gracias por subscribirte"; } else { $return = "EL correo tiene un formato no valido"; } } wp_redirect(admin_url('?message=' . urlencode($return))); die; } }
  • 12. Nuestro Servicio y nuestro Test <?php namespace ezdevTestingPluginServices; class MailCheck { private $email; public function __construct(string $email) { $this->ensureIsValidEmail($email); $this->email = $email; } public static function fromString(string $email): self { return new self($email); } public function __toString(): string { return $this->email; } private function ensureIsValidEmail(string $email) { if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { throw new InvalidArgumentException( sprintf( '"%s" is not a valid email address', $email ) ); } } } <?php use PHPUnitFrameworkTestCase; use ezdevTestingPluginServicesMailCheck; final class MailCheckTest extends TestCase { public function testCanBeCreatedFromValidEmailAddress() { $this->assertInstanceOf( MailCheck::class, MailCheck::fromString('user@example.com') ); } public function testCannotBeCreatedFromInvalidEmailAddress() { $this->expectException(InvalidArgumentException::class); MailCheck::fromString('invalid'); } public function testCanBeUsedAsString() { $this->assertEquals( 'user@example.com', MailCheck::fromString('user@example.com') ); } }
  • 15. Como utilizar nightwatch para nuestro test de Front-End • Primero: Instala Node.js. • "Node.js es una plataforma basada en el tiempo de ejecución de JavaScript de Chrome para crear fácilmente aplicaciones de red escalables y rápidas. Node.js utiliza un modelo de E / S sin bloqueo controlado por eventos que lo hace ligero y eficiente, perfecto para datos intensivos. aplicaciones de tiempo que se ejecutan en dispositivos distribuidos „. • Hay paquetes de instalación e instrucciones para la mayoría de los principales sistemas operativos en su sitio web nodejs.org. Recuerde instalar también la herramienta npm, que es el administrador de paquetes del nodo y se distribuye con el instalador Node.js. • Segundo: Instala Nightwatch global si se desea: • Para instalar la última versión con la herramienta de línea de comandos npm, ejecute lo siguiente: $ npm install nightwatch -g
  • 16. • Tercero: creamos un archivo llamado package.json donde incluiremos nightwatch, google chrome driver y geckodriver y lo instalaremos usando npm • Cuarto: una vez creado el package.json lo ejecutamos con $ npm install { "devDependencies": { "chromedriver": "^2.45.0", "geckodriver": "^1.14.1", "nightwatch": "^1.0.18" } }
  • 18. Seguimos… • Quinto: Creamos nuestro nightwacht.json en la carpeta root de nuestro plugin { "src_folders": [ "test" ], "webdriver": { "start_process": true, "server_path": "node_modules/.bin/chromedriver", "port": 9515 }, "test_settings": { "default": { "desiredCapabilities": { "browserName": "chrome" } } } }
  • 19. Creamos nuestro primer test de Front-End • Para ello debemos crear un archivo .js con las especificaciones y aserciones que queremos conseguir • Editamos un archivo que llamaremos dashboardnewsletter.js module.exports = { 'Prueba de Formulario en Dashboard Admin' : function (client) { const url = "http://127.0.0.1/wordpress"; client .url(url + '/wp-admin') .waitForElementVisible('#user_login', 1000) .assert.title('Log In ‹ WordCamp Madrid 2019 — WordPress') .setValue('#user_login', 'test') .setValue('#user_pass', 'test') .click('#wp-submit') .waitForElementVisible('#welcome-panel', 1000) .assert.containsText('div.welcome-panel h2', 'Welcome to WordPress!', 'Mensaje de Bienvenida Correcto') .setValue('#email', 'test@dominio.com') .click('#newsletter-add') .waitForElementVisible('#welcome-panel', 2000) .assert.containsText('#ezdv-message', 'Gracias por subscribirte', 'Suscripción correcta') .end(); } };
  • 21. Veamos todo nuevamente Vamos al Código https://github.com/k2klettern/wp-test