Carlos Cruz
Javier Infante
Gorka Gorrotxategi
14 años
40 personas
Cientos de proyectos producidos con éxito
Miles de líneas de código escritas
Varios productos importantes liberados
Unos cuantos premios y reconocimientos
Gorka Gorrotxategi
VoIP Team
Carlos Cruz
VoIP Team
Javier Infante
DEV Web Team
Una historia dónde los personajes son los clientes, los developers, los jefes y el señor wolf ;)
La feature "standard" entrando en escena
En el low PBX Planet:
En órbitas superiores:
Múltiples Personas
Complejidad de entornos
Fight!
Ni siquiera el señor Lobo tiene todas las claves:
Hola, soy el señor Lobo, soluciono problemas.
(Pulp Fiction - 1995)
Todos en este viaje habitual concluimos que:
Automated testing is cool!
¿Ejército probando a ritmo de tt-monkeys?
¿Replicantes probando en loop?
Aplicaciones orientadas hacia el testing (more or less):
http://sipp.sourceforge.net
http://mojolingo.github.io/sippy_cup/
http://mitester.mobax.net
OK, pero que sea fácil ;)
http://www.pjsip.org/python/pjsua.htm
http://sipsimpleclient.org
Tests de caja negra definidos en YAML
https://github.com/irontec/bss
PJSUA (pjlib)
CLI tool escrita en python
¡Nadie garantiza que lo que pasa dentro de la caja sea lo esperado!*
* pero en función de la complejidad se puede concluir que sí ;)
Todos los comandos definidos en todas sus sesiones se ejecutan antes del tiempo máximo
Requiere registrarse Register
Esperar llamada con WaitFor (INCOMING)
Generar respuestas provisionales:
Ringing (envía 180 y espera)
Rechazar llamada:
Redirect (envía 302)
O contestar:
Verificar presentaciones:
CallID / Diversion OK?
Answer
y lo que cada vez es más importante... ¿webRTC?
... podemos probar las lógicas de nuestra plataforma (desvíos, IVRs, presentaciones...)
in 2017???
En los últimos años, todo tiende a pasar por una navegador web:
- Correo electrónico (gmail vs thunderbird)
- Contenidos multimedia (mplayer vs netflix/spotify)
- Chats ( irc vs slack)
- Aplicaciones (PWA vs store apps)
- Ofimática (Google docs vs Office)
- Transparencias (slides.com vs OImpress)
- Softphone (JsSIP vs Bria)
(Y todos ellos son los mejores según sus usuarios)
Grandes comunidades
Grandes empresas
Unit-testing: Pruebas simples de unidades de código; se trata de pasar (y testear) todos los casos posibles ejecutables por tu código.
Tests end2end: Pruebas (lo más) reales posibles, que ejecuten la aplicación como lo haría un usuario; (y que compruebe automáticamente que el comportamiento es el esperado)
¡Ya podemos desarrollar un softphone
para todos los navegadores!
- Testing oriented
- JsSIP based
-Self-awared
https://github.com/irontec/telebot3000
Versión pre-alpha funcional.
- angular (v5)
(sinceramente, el mejor framework del mundo)
- JsSIP (v3)
- angular-material
Telebot3000 es una aplicación web normal... ¡es testeable!
- Introducir credenciales de acceso
- Pulsar el botón conectar
- Comprobar que la cara está feliz
EXTRA BALL: Llamar a la centralita de irontec, marcar la extensión 666 y esperar que la centralita cuelgue la llamada 😈.
// Go to config page
await browser.get('/config');
element(by.css('input[formControlName=wsuri]')).sendKeys('wss://oasis-dev.irontec.com:10081');
element(by.css('input[formControlName=sipuri]')).sendKeys('webphone@oasis-dev.irontec.com');
element(by.css('input[formControlName=password]')).sendKeys('farsa');
element(by.css('.mat-expansion-panel-header')).click();
await browser.sleep(1000);
element(by.css('textarea[formControlName=stuns]')).sendKeys('stun:stun.l.google.com:19302');
element(by.css('button.connect')).click();
await browser.sleep(2000);
expect(
await element(by.css('mat-icon.ok')).isDisplayed()
).toBeTruthy();
// we press 3 times '6' DTMF button
element(by.css('.dtmfMenu button[value="6"]')).click();
browser.sleep(400);
element(by.css('.dtmfMenu button[value="6"]')).click();
browser.sleep(400);
element(by.css('.dtmfMenu button[value="6"]')).click();
browser.sleep(1000);
expect(await element(by.css('.statusIcon')).getText()).toEqual(ICON_ENDED);
⌨️ DEMO TIME ⌨️
Desde que apareció HTML5, tenemos un montón de APIs disponibles en el navegador, que nos permiten hacer uso de multitud de recursos distintos desde nuestra aplicació de front-end.
- WebSocket
- WebRTC
- Localización, Bluetooth, MIDI, WebGL, WebAssembly, File...
- Web Audio
Telebot3000 utiliza la API WebAudio para dotar de funcionalidad extra a la interfaz de usuario (del usuario automático, se entiende).
Hacemos uso de Bing Speech API de los Servicios Cognitivos de Microsoft.
* El reconocimiento de voz tiene todavía margen de mejora.
* es posible que Alice escuchen algo distinto.. o muy similar...
Protractor nos permite hacer un test con 2 instancias de navegador al mismo tiempo:
Haremos que la primera instancia llame a la segunda:
Y que la segunda simplemente responda la llamada:
browser2 = await browser.forkNewDriverInstance(true);
// 1. dial number
await element(by.css('div.target input')).sendKeys(WEBPHONE2_DDI);
// 2. Do the call
await element(by.css('button.caller')).click();
browser2.$('button.answer').click();
La primera instancia deberá decir "congrio rojo" (gracias al TTS de Bing):
Y la segunda (deberá esperar), y leer lo que está oyendo
element(by.css('input.sentence')).sendKeys('congrio rojo. congrio rojo. congrio rojo');
element(by.css('button.speakIt')).click();
Text
const listenedText = (await browser2.$$('div.words p').getText()).join(' ');
expect(
listenedText.indexOf('congrio') !== -1 && listenedText.indexOf('rojo') !== -1
).toBeTruthy();
⌨️ DEMO TIME ⌨️
BBS
(*) Cada nueva funcionalidad, incluye escenarios yaml BBS y actualización JSON postman con nuevos objetos