1 of 43

Testing Automation

Parte 2

Browser Tests - Dusk - Selenium

2 of 43

¿Qué es el testing?

“Las pruebas de software (en inglés software testing) son las investigaciones empíricas y técnicas cuyo objetivo es proporcionar información objetiva e independiente sobre la calidad del producto a la parte interesada o stakeholder.”

REPASO

3 of 43

Tipos de Testing (los más comunes)

Unit tests

Son usados para testear pequeñas partes del código, relativamente aisladas. En general una clase o un método.

Integration tests

Testean la forma en que diferentes partes del código trabajan juntas y se pasan mensajes.

Application tests

También llamados Acceptance Tests o Functional Tests. Prueban toda la aplicación. En general usan un driver que emula el uso del navegador.

REPASO

4 of 43

Qué es Testing Automation?

Consiste en el uso de software especial (casi siempre separado del software que se prueba) para controlar la ejecución de pruebas y la comparación entre los resultados obtenidos y los resultados esperados”

REPASO

5 of 43

Para qué sirve?

  • Asegurarnos que los cambios que hacemos en nuestra aplicación no impacten en cosas que ya hicimos
  • Asegurar la calidad de la aplicación
  • Enfocar el uso del tiempo del equipo de desarrollo en tareas no repetitivas

REPASO

6 of 43

Ventajas

  • Evitar tareas repetitivas y vicios por repetición
  • Permite enfocarse en el testing manual de nuevas funcionalidades que son menos estables
  • Fuerza a pensar en los casos de test y documentarlos
  • Permite correr los mismos tests en distintos entornos en tiempo mínimo
  • Se puede incorporar a un modelo de Integración Continua (coming soon)
  • Se pueden escalar y re-utilizar para hacer test de stress

REPASO

7 of 43

Desventajas

  • Período inicial de aprendizaje y adaptación del equipo de desarrollo
  • Hay que mantener la suite de tests
  • Los tests se ven impactados por los cambios en la UI (existen tácticas y patrones para tolerar esto)
  • El perfil de tester puede requerir habilidades técnicas avanzadas (desarrollo, diseño)

REPASO

8 of 43

Browser testing

9 of 43

Browser Testing

  • Permite realizar pruebas tanto funcionales como de integración y asegurarse de que los elementos de la página pueden utilizarse
  • Usar la UI como un usuario final

10 of 43

Cómo se imaginan que se hace esto?

11 of 43

12 of 43

Laravel Dusk

  • Provee una forma expresiva y fácil de usar automatización del Browser
  • Provee una API de testing
  • Por defecto usa Chrome
  • Podemos configurarlo para usar otro navegador

13 of 43

Dusk Install

  • Para instalarlo tenemos que agregar la dependencia usando Composer

composer require --dev laravel/dusk

  • Registrar el Provider en AppServiceProvider

public function register()

{

if ($this->app->environment('local', 'testing')) {

$this->app->register(DuskServiceProvider::class);

}

}

14 of 43

Dusk Install

  • Por último

php artisan dusk:install

  • Nos crea la carpeta tests/Browser
  • Ahí vamos a tener nuestra suite de tests de browser

15 of 43

Correr los tests

Para correr los tests ejecutamos

php artisan dusk

16 of 43

Container de Test

  • Agregamos un nuevo container a nuestro docker-compose.yml

selenium:

image: selenium/standalone-chrome

  • Esta imagen nos va a permitir correr dentro del container nuestros tests

17 of 43

Usando Selenium: Container del test

Laravel files

(volume)

:8000

web container (nginx)

:80

database container

:5432

app container (php)

:9000

app:9000

adminer container

:8001

:8001

selenium container

:4444

Dusk test

Test access

selenium:4444

web:80

18 of 43

Configuración

  • En el archivo DuskTestCase.php configuramos la URL del container

protected function driver()

{

return RemoteWebDriver::create(

'http://selenium:4444/wd/hub', DesiredCapabilities::chrome()

);

}

  • Editar .env.dusk.local

APP_URL=http://web

19 of 43

Miremos el test de ejemplo

  • ExampleTest.php

$this->browse(function (Browser $browser) {

$browser->visit('/')

->assertSee('Laravel');

});

  • Qué piensan que hace?

20 of 43

Hagamos que pase

  • TBC

21 of 43

Corren los Tests y los Asserts!

22 of 43

Nuestro Primer Test

  • Para crear nuestro primer test vamos a usar

php artisan dusk:make LoginTest

  • Vamos a hacer los siguientes tests dentro de ese archivo:
    • Poder loguearnos a la app
    • Fallar la password y ver que aparezca un error
    • Fallar la password muchas veces y ver que aparezca un error

23 of 43

Test - Loguearnos a la App

TBC

24 of 43

Test - Fallar la password y ver el error

TBC

25 of 43

Test - Fallar la password varias veces y ver el error

TBC

26 of 43

Manos a la obra

27 of 43

TDD

Test Driven Development

28 of 43

¿Qué es Test Driven Development?

TDD es una práctica de programación, dividida en 3 partes:

  • Escribir las pruebas (tests)
  • Escribir el código fuente
  • Refactorizar el código escrito

Fue creado por

(Kent Beck)

29 of 43

Ventajas

  • Código más robusto
    • Nos aseguramos que todo el código que escribimos esta probado y lo podemos seguir probando cuantas veces necesitemos
  • Más seguro
    • Si ejecutamos los tests, estamos seguros que nada dejó de funcionar con cualquier cambio que hagamos
  • Más mantenible
    • Teniendo una suit de tests, podemos refactorizar el código, sabiendo que no tenemos que probar todo a mano, sino que ya tenemos codigo que prueba lo que cambiamos

30 of 43

Mantra - Red, Green, Refactor

  • Escribo un test que falle, porque aun no tengo el código hecho
  • Escribo el mínimo código para que el test pase
  • Mejoro la solución, refactorizando el código

31 of 43

Nuevo Requerimiento

El cliente quiere que se realicen los siguientes renombres:

  • Renombrar las vistas donde se trabaja con "Variables" a "Puntaje por calificación"
  • En el listado de variables renombrar la columna asistencia a orden interno
  • Estadistica (de servicios) -- se llama recopiladora

Decidimos entonces hacer los cambios requeridos con TDD

32 of 43

Escribo el Test

TBC

33 of 43

Escribo el Código

TBC

34 of 43

Refactor

TBC

35 of 43

Conclusiones

  • El testing nos ayuda a ganar velocidad y asegurarnos que ciertas cosas funcionan
  • Es muy difícil tener una cobertura total de la app
  • Hacer testing no asegura calidad de código
  • Teniendo tests de browsers, nos aseguramos que la funcionalidad testeada, en ese caso, funciona
  • El usuario siempre puede probar una combinación que no cubri con los tests y romper mi app

36 of 43

Referencias

37 of 43

F.A.Q.

38 of 43

Falló la ejecución

Este error surge cuando no se ha configurado Selenium

Ir a slide configuración

39 of 43

Code coverage

  • Los test hacen que se ejecute una parte del código de la aplicación
  • Cada línea fue (o no) ejecutada
  • Las líneas que no se ejecutan no fueron testeadas
  • Se llama “code coverage” al % de líneas que nuestros test hacen ejecutar

40 of 43

Extras (Revisar)

41 of 43

Dusk + Laradock: Workspace Setup

+

# Instalador de Laravel para configurar proyecto Demo�WORKSPACE_INSTALL_LARAVEL_INSTALLER=true�...�# Dependencias necesarias para correr tests de Dusk�WORKSPACE_INSTALL_DUSK_DEPS=true

docker-compose build workspace

42 of 43

Dusk + Laradock: Application Setup

  1. Iniciar un contenedor Workspace vía Bash e instalar Laravel
  2. Agregar la dependencia laravel/dusk
  3. Iniciar la instalación de Dusk
  4. Crear archivo de ambiente .env.dusk.local para Dusk
  5. Actualizar APP_URL=http://localhost:8000 en .env.dusk.local

docker-compose run workspace bash

/var/www> laravel new dusk-test�/var/www> cd dusk-test�/var/www/dusk-test> composer require --dev laravel/dusk�/var/www/dusk-test> php artisan dusk:install

/var/www/dusk-test> cp .env .env.dusk.local

43 of 43

Dusk + Laradock: Ejecución de Tests

Iniciar server local en container workspace y ejecutar tests de Dusk

# Iniciar Server en Background (php artisan serve --quiet &)�/var/www/dusk-test> serve�# alias to run Dusk tests (php artisan dusk)�/var/www/dusk-test> dusk��PHPUnit 6.4.0 by Sebastian Bergmann and contributors.��. 1 / 1 (100%)��Time: 837 ms, Memory: 6.00MB