SIMULANDO PARA INTEGRAR
Un paso más hacia la Entrega Continua (CD)
Quito-Ecuador
Luisa Emme Consultoría y Desarrollo de Software
Thoughtworks Ecuador
@emmeblm
¡Siempre estamos contratando!
Nuestra agenda
Nuestra agenda
Algunos conceptos … ★ ¿Por qué probamos la integración
entre servicios? ★ Integración continua y entrega
Nuestra agenda
Érase una vez … ★ Una historia sobre un pipeline en
rojo y un despliegue bloqueado
Algunos conceptos … ★ ¿Por qué probamos la integración
entre servicios? ★ Integración continua y entrega
Nuestra agenda
Érase una vez … ★ Una historia sobre un pipeline en
rojo y un despliegue bloqueado
Algunos conceptos … ★ ¿Por qué probamos la integración
entre servicios? ★ Integración continua y entrega
… luego, patrones … ★ Para probar la colaboración entre
servicios
Nuestra agenda
Érase una vez … ★ Una historia sobre un pipeline en
rojo y un despliegue bloqueado
Algunos conceptos … ★ ¿Por qué probamos la integración
entre servicios? ★ Integración continua y entrega
… luego, patrones … ★ Para probar la colaboración entre
servicios
… y vivieron felices por siempre … ★ Imitadores guiados por el consumidor ★ Pruebas de contrato automatizadas
Nuestra agenda
Érase una vez … ★ Una historia sobre un pipeline en
rojo y un despliegue bloqueado
Algunos conceptos … ★ ¿Por qué probamos la integración
entre servicios? ★ Integración continua y entrega
… y para cerrar, algunas herramientas … ★ Herramientas para simular Servicios Web ★ Stubby, ¿qué es? y ¿cómo funciona?
… luego, patrones … ★ Para probar la colaboración entre
servicios
… y vivieron felices por siempre … ★ Imitadores guiados por el consumidor ★ Pruebas de contrato automatizadas
ALGUNOS CONCEPTOSPruebas de integración, integración continua y entrega continua
¿Por qué probamos la integración entre
servicios?
Recursos
Dominio
Clie
ntes
HTT
P Servicio Web
Servicio Web
Mapeadores de datos (ORM)
Base de datos
Pruebas deintegración
Recursos
Dominio
Clie
ntes
HTT
P Servicio Web
Servicio Web
Mapeadores de datos (ORM)
Base de datos
Pruebas deintegración
Recursos
Dominio
Clie
ntes
HTT
P Servicio Web
Servicio Web
Pruebas deintegración anivel decomponentes
Serv
icio
s Si
mul
ados
Mapeadores de datos (ORM)
Base de datos
Integración continua
SISTEMA DE GESTIÓN DE CÓDIGO
FUENTE
BUILD SERVER
PRUEBAS DE ACEPTACIÓN
Registran el código
Desarrollan el código
SISTEMA DE GESTIÓN DE CÓDIGO
FUENTE
BUILD SERVER
PRUEBAS DE ACEPTACIÓN
Registran el código
Construye código. Ejecuta pruebas
Desarrollan el código
SISTEMA DE GESTIÓN DE CÓDIGO
FUENTE
BUILD SERVER
PRUEBAS DE ACEPTACIÓN
Registran el código
Construye código. Ejecuta pruebas
Detecta cambios en el código
Desarrollan el código
SISTEMA DE GESTIÓN DE CÓDIGO
FUENTE
BUILD SERVER
PRUEBAS DE ACEPTACIÓN
Registran el código
Construye código. Ejecuta pruebas
Detecta cambios en el código
Desarrollan el código
Las pruebas fallan
SISTEMA DE GESTIÓN DE CÓDIGO
FUENTE
BUILD SERVER
PRUEBAS DE ACEPTACIÓN
Registran el código
Construye código. Ejecuta pruebas
Detecta cambios en el código
Desarrollan el código
Las pruebas pasan. Despliegue a UAT.
Las pruebas fallan
SISTEMA DE GESTIÓN DE CÓDIGO
FUENTE
BUILD SERVER
PRUEBAS DE ACEPTACIÓN
Registran el código
Construye código. Ejecuta pruebas
Detecta cambios en el código
Desarrollan el código
Las pruebas pasan. Despliegue a UAT.
Las pruebas fallan
SISTEMA DE GESTIÓN DE CÓDIGO
FUENTE
BUILD SERVER
PRUEBAS DE ACEPTACIÓN
Cliente puede ver cambios en tiempo real
Entrega continua
Ambiente 2Ambiente 1 Ambiente N
Ambiente 2Ambiente 1 Ambiente N
Software Desplegable > Nuevas
características
Ambiente 2Ambiente 1 Ambiente N
Software Desplegable > Nuevas
características
Ambiente 2Ambiente 1 Ambiente N
Software Desplegable > Nuevas
características
Ambiente 2Ambiente 1 Ambiente N
Software Desplegable > Nuevas
características
Ambiente 2Ambiente 1 Ambiente N
Software Desplegable > Nuevas
características
Ambiente 2Ambiente 1 Ambiente N
Registro de código
Pruebas unitarias y de integración
Despliegue a ambiente de
pruebas
Pruebas de aceptación
automatizadas
Despliegue a producción
Integración continua
Entrega continua
Registro de código
Pruebas unitarias y de integración
Despliegue a ambiente de
pruebas
Pruebas de aceptación
automatizadas
Despliegue a producción
Integración continua
Entrega continua
Una historia sobre un pipeline en rojo y un despliegue bloqueado
ÉRASE UNA VEZ …
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Pipeline
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Pipeline
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Pruebas unitarias
Pipeline
Pruebas unitarias
Pipeline
Pruebas unitarias
Qa Pre-producción Producción
Pruebas de integración
Pipeline
Pruebas unitarias
Qa Pre-producción Producción
Pruebas de integración
Pipeline
Pruebas unitarias
Qa Pre-producción Producción
Pruebas de integración
Despliegue a QA
Pipeline
Pre-producción ProducciónQa
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pipeline
Pre-producción ProducciónQa
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Pipeline
Qa Pre-producción Producción
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Pipeline
Qa Pre-producción Producción
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pipeline
Qa ProducciónPre-producción
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pipeline
Qa ProducciónPre-producción
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
Pipeline
Qa ProducciónPre-producción
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
Pipeline
Qa ProducciónPre-producción
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
Despliegue a
producción
Pipeline
Qa Pre-producción Producción
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
Despliegue a
producción
Pipeline
Qa Pre-producción Producción
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
Despliegue a
producción
Pruebas de humo
Pipeline
Qa Pre-producción Producción
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
Despliegue a
producción
Pruebas de humo
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Clie
nte
HTT
P
Servicio Web
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Clie
ntes
HTT
P
Servicio Web
SOAP
Servicio Web
SOAP
Servicio Web REST
Servicio Web REST
Servicios externos
Ambientes de prueba
Contención de datos entre equipos
Contención de datos entre equipos
Contención de datos entre equipos
Contención de datos entre equipos
Contención de datos entre equipos
Indisponibilidad del ambiente
Indisponibilidad del ambiente
Indisponibilidad del ambiente
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Clie
ntes
HTT
P
Servicio Web
SOAP
Servicio Web
SOAP
Servicio Web REST
Servicio Web REST
Pipeline
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Clie
ntes
HTT
P
Servicio Web
SOAP
Servicio Web
SOAP
Servicio Web REST
Servicio Web REST
Pipeline
Pruebas unitarias
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Clie
ntes
HTT
P
Servicio Web
SOAP
Servicio Web
SOAP
Servicio Web REST
Servicio Web REST
Pipeline
Pruebas unitarias
Pipeline
Pruebas unitarias
Qa Pre-producción Producción
Pipeline
Pruebas unitarias
Qa Pre-producción Producción
Pipeline
Pruebas unitarias
Qa Pre-producción Producción
Pruebas de integración
Pipeline
Pruebas unitarias
Qa Pre-producción Producción
Pruebas de integración
Pipeline
Pruebas unitarias
Qa Pre-producción Producción
Pruebas de integración
Algunos patrones para probar tu aplicación cuando depende de servicios externos sobre los que no tienes control
PATRONES
Llevar a cabo pruebas completas de extremo a extremo en un entorno previo a producción.
Despliegues secuenciales
Llevar a cabo pruebas completas de extremo a extremo en un entorno previo a producción.
Despliegues secuenciales
Llevar a cabo pruebas completas de extremo a extremo en un entorno previo a producción.
Despliegues secuenciales
El proveedor proporciona despliegue automatizado permitiéndote desplegar su servicio en tu ambiente.
Ambientes aislados
El proveedor proporciona despliegue automatizado permitiéndote desplegar su servicio en tu ambiente.
Ambientes aislados
El proveedor proporciona despliegue automatizado permitiéndote desplegar su servicio en tu ambiente.
Ambientes aisladosLocalhost
Utilizar una instancia de pruebas del servicio externo desplegado en un ambiente compartido para cada
despliegue o para cada compilación exitosa.
Modelo SaaS
Utilizar una instancia de pruebas del servicio externo desplegado en un ambiente compartido para cada
despliegue o para cada compilación exitosa.
Modelo SaaS
Utilizar una instancia de pruebas del servicio externo desplegado en un ambiente compartido para cada
despliegue o para cada compilación exitosa.
Modelo SaaS
Pruebas de contrato guiadas por el consumidor
Establecer un contrato entre el productor y el consumidor. Hacer cumplir estos contratos con pruebas
automatizadas.
Establecer un contrato entre el productor y el consumidor. Hacer cumplir estos contratos con pruebas
automatizadas.
Pruebas de contrato guiadas por el consumidor
Establecer un contrato entre el productor y el consumidor. Hacer cumplir estos contratos con pruebas
automatizadas.
Pruebas de contrato guiadas por el consumidor
Crea imitadores de tus servicios externos. Si quieres mayor seguridad, agrega pruebas de contrato.
Imitadores guiados por el consumidor
Crea imitadores de tus servicios externos. Si quieres mayor seguridad, agrega pruebas de contrato.
Imitadores guiados por el consumidor
Crea imitadores de tus servicios externos. Si quieres mayor seguridad, agrega pruebas de contrato.
Imitadores guiados por el consumidor
Localhost
Imitador
Imitador
Y VIVIERON FELICES POR SIEMPRESimulando servicios externos y agregando pruebas de contrato
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Clie
ntes
HTT
P
Servicio Web
SOAP
Servicio Web
SOAP
Servicio Web REST
Servicio Web REST
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Clie
ntes
HTT
P
Sim
ulad
or d
e se
rvic
ios
Web
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Clie
ntes
HTT
P
Sim
ulad
or d
e se
rvic
ios
Web
Pipeline
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Clie
ntes
HTT
P
Sim
ulad
or d
e se
rvic
ios
Web
Pipeline
Pruebas unitarias
Recursos
Dominio
Mapeadores de datos (ORM)
Base de datos
Clie
ntes
HTT
P
Sim
ulad
or d
e se
rvic
ios
Web
Pipeline Pipeline
Pruebas unitarias
Pipeline Pipeline
Pruebas unitarias
Pruebas de integración
ProducciónQa Pre-producción
Pipeline
Pruebas unitarias
Pruebas de integración
ProducciónQa Pre-producción
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
ProducciónQa Pre-producción
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
ProducciónQa Pre-producción
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
ProducciónQa Pre-producción
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
ProducciónQa Pre-producción
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
ProducciónQa Pre-producción
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
ProducciónQa Pre-producción
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
ProducciónQa Pre-producción
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
ProducciónQa Pre-producción
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
Despliegue a
producción
ProducciónQa Pre-producción
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
Despliegue a
producción
ProducciónQa Pre-producción
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
Despliegue a
producción
Pruebas de humo
ProducciónQa Pre-producción
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
Despliegue a
producción
Pruebas de humo
ProducciónQa Pre-producción
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
Despliegue a
producción
Pruebas de humo
Ambientes Beta
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
Despliegue a
producción
Pruebas de humo
Ambientes Beta
Pruebas de integración de
contrato
Pipeline
Pruebas unitarias
Pruebas de integración
Despliegue a QA
Pruebas funcionales
en QA
Despliegue a pre-
producción
Pruebas funcionales
en pre-producción
Despliegue a
producción
Pruebas de humo
Ambientes Beta
Pruebas de integración de
contrato
HERRAMIENTASAlgunas herramientas para la creación de imitadores de Servicios Web, entre ellas: Stubby4J
MOUNTEBANK http://www.mbtest.org/
MOUNTEBANK http://www.mbtest.org/
WIREMOCK http://wiremock.org/
MOUNTEBANK http://www.mbtest.org/
WIREMOCK http://wiremock.org/
NODE-SOAP https://github.com/vpulim/node-soap
MOUNTEBANK http://www.mbtest.org/
WIREMOCK http://wiremock.org/
NODE-SOAP https://github.com/vpulim/node-soap
https://github.com/azagniotov/stubby4j
STUBBY4J
Stubby4J
Stubby4J
{ REST }
Stubby4J
{ REST }
Stubby4J
{ REST }
< SOAP />
Stubby4J
{ REST }
< SOAP />
Stubby4J
{ REST }
< SOAP />
< XML /> RPC
Stubby4J
{ REST }
< SOAP />
< XML /> RPC
Stubby4J
{ REST }
< SOAP />
< XML /> RPC
Localhost
Aplicación SOA
Localhost
Aplicación SOA
Localhost
8882: Stubby4J
file.yamlAplicación SOA
Localhost
GET: http://localhost:8882/hello-world8882: Stubby4J
file.yamlAplicación SOA
Localhost
GET: http://localhost:8882/hello-world
RESPONSE Status: 200 Headers:
content-type: application/json Body:
{ Hello World! }
8882: Stubby4J
file.yamlAplicación SOA
8882: Stubby4J
file.yaml
¿Cómo levantar Stubby4J?
8882: Stubby4J
file.yaml
¿Cómo levantar Stubby4J?
java -jar stubby4j-x.x.xx.jar -d <DIRECTORIO_AL_ARCHIVO_YAML_LOCAL>
Ejecutando el .jar
8882: Stubby4J
file.yaml
¿Cómo levantar Stubby4J?
java -jar stubby4j-x.x.xx.jar -d
<DIRECTORIO_AL_ARCHIVO_YAML_LOCAL>
Ejecutando el .jar
8882: Stubby4J
file.yaml
¿Cómo levantar Stubby4J?
java -jar stubby4j-x.x.xx.jar -d
<DIRECTORIO_AL_ARCHIVO_YAML_LOCAL>
Ejecutando el .jar Con la API programática
StubbyClient stubbyClient = new StubbyClient();
stubbyClient.startJetty("/resources/file.yaml");
8882: Stubby4J
file.yaml
¿Cómo levantar Stubby4J?
java -jar stubby4j-x.x.xx.jar -d
<DIRECTORIO_AL_ARCHIVO_YAML_LOCAL>
Ejecutando el .jar Con la API programática
StubbyClient stubbyClient = new StubbyClient();
stubbyClient.startJetty("/resources/file.yaml");
Veamos un ejemplo
¡GRACIAS! ¿Preguntas o sugerencias?
Luisa Emme @emmeblm
https://www.thoughtworks.com/careers