Wiremock es una herramienta para convertir servicios HTTP en mock y así poder testear tu código aislándolo de servicios HTTP (como servicios Rest).
Slides de apoyo a la charla sobre la herramienta en el Open South Code de 2016 en Málaga (España)
4. Qué es wiremock
Hace los tests por mí.
Mockea los objetos que uso.
Mockea los servicios http que uso.
Open source.
Licencia: Apache Version 2.0
5. Qué es wiremock - fuentes
creador: Tom Akehurst (@tomakehurst)
http://www.tomakehurst.com/
https://github.com/tomakehurst
Wiremock
http://wiremock.org/ (mailing list)
https://github.com/tomakehurst/wiremock
6. Qué es wiremock - Para qué sirve
Uso rápido y fácil
Accesible para devs y QAs
Asegura una respuesta real
(jetty)
Aísla de la implementación a
testear
Tests unitarios
Tests de integración
Tests funcionales
...
7. Qué es wiremock - características
Escrito en Java
Corre como servlet, rule
de JUnit or standalone
fluent Java API
HTTP Json API
Proxy
Record req/response
Verify requests
Stateful behaviour
Simula fallos
Extensible
8. Qué es wiremock - Primer paso
Standalone: descargar jar
Maven:
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock</artifactId>
<version>2.0.10-beta</version>
<scope>test</scope>
</dependency>
12. Wiremock - fluent Java API
Fácil de lectura
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BYTry this code here
13. Wiremock - Http Json API
Útil para usarlo en standalone.
Para cualquier lenguaje.
● Listar mappings GET: /__admin
● Crear nuevo POST: /__admin/mappings/new
● Reset mappings POST: /__admin/mappings/reset
● Eliminar todos los mappings POST: /__admin/reset
● Shutdown wiremock POST: /__admin/shutdownIcons made by Freepik from www.flaticon.com is licensed by CC 3.0 BYSource code here
14. Wiremock - proxy
Proxy como un navegador (proxyBaseUrl)
Proxy-all: todas req se redirigen
Usar proxy opaco para salir a internet
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY
15. Wiremock - record requests
Graba peticiones-respuestas http reales.
Standalone mode con los parámetros:
--record-mappings --proxy-all="https://github.com/"
Los archivos estarán en mappings y __files.
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BYSource code here
16. Wiremock - stateful behaviour
Mock cuando se hayan ejecutado
ciertas peticiones
"scenarioName": "Example",
"requiredScenarioState": "Started",
"newScenarioState": "Step1",
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BYSource code here
17. Wiremock - faults
Podemos simular fallos:
● Retrasos en la respuesta.
● Timeout.
● EMPTY_RESPONSE
● MALFORMED_RESPONSE_CHUNK
● RANDOM_DATA_THEN_CLOSE
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BYSource code here
18. Modificar response dinámicamente.
Clase Java que extiende `ResponseTransformer`
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY
Wiremock - extensible
19. Wiremock - limitaciones
Cuelgues en standalone (evitable con -no-request-journal)
https ← proxy → https (man-in-the-middle)
Eliminar un mapping individualmente
Puertos dinámicos evitan colisiones
Logs mejorables (v2 son mejores)
Business vector designed by Alekksall
Freepik.com
20. Wiremock - Logs
Añadir implementación slf4j. Ejemplo con log4j2
● Añadir classpath con jar de log4j2
● Comando java no permite -jar y -cp
● Ejemplo de comando:
https://github.com/jose-oc/learning-
wiremock/blob/master/standalone/start_wiremock_with_logs.sh
21. Wiremock - recursos
Los ejemplos mostrados los tienes disponibles en:
https://github.com/jose-oc/learning-wiremock
@_jose_oc
www.joseoc.es
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY
Icons made by Google from www.flaticon.com is licensed by CC 3.0 BY
jose.ortiz@piksel.com
linkedin.com/in/joseoc
Presentación de esta herramienta y cómo la estamos usando actualmente.
Cambio en la arquitectura de sistemas: incremento en el número de microservicios http (propios y de terceros)
Por el auge de microservicios
Q: ¿quién hace tests?
Stub: it makes the input deteministic.
Mock: it makes the output deterministic.
ESto significa que puedo aislar el sistema que quiero testear de servicios http externos al mismo y de los que hago uso.
Es una herramienta para mockear una respuesta. Podemos usarla para el tipo de test que nos interese.
Verify
También funciona con el modo proxy as browser
No se puede eliminar un mapping individualmente
Usándolo en modo standalone durante un tiempo prolongado requiere reinicio (evitable con -no-request-journal)
No puede actuar como proxy entre sitios https (man-in-the-middle)
Usa puertos dinámicos si tus tests pueden correr a la vez en la misma máquina.
Logs mejorables (v2 son mejores)