Wiremock is a great tool for many things and especially black box testing. I’m here going to show a small and simple way to setup a Wiremock implementation in Kubernetes
First we need a Deployment of the Wiremock application:
# Deploy wiremock to Kubernetes apiVersion: apps/v1 kind: Deployment metadata: name: wiremock labels: app: wiremock spec: replicas: 1 selector: matchLabels: app: wiremock template: metadata: labels: app: wiremock spec: containers: - name: wiremock image: rodolpheche/wiremock ports: - containerPort: 8080 volumeMounts: - name: mappings mountPath: /home/wiremock/mappings - name: files mountPath: /home/wiremock/__files volumes: - name: mappings configMap: name: wiremock-mappings - name: files configMap: name: wiremock-files
Then we need a Service to expose Wiremock to the cluster
apiVersion: v1 kind: Service metadata: name: wiremock spec: selector: app: wiremock ports: - protocol: TCP port: 8080 targetPort: 8080
Two ConfigMaps for configuration and files:
apiVersion: v1 kind: ConfigMap metadata: name: wiremock-mappings data: mappings.json: | { "request": { "method": "GET", "url": "/api/v1/hello" }, "response": { "status": 200, "bodyFileName": "hello.json", "headers": { "Content-Type": "application/json" } } } --- apiVersion: v1 kind: ConfigMap metadata: name: wiremock-files data: hello.json: | { "Hello": "World" }
And finally a call to the mock to see that everything works as expected:
apiVersion: apps/v1 kind: Deployment metadata: name: check-wiremock labels: app: check-wiremock spec: replicas: 1 selector: matchLabels: app: check-wiremock template: metadata: labels: app: check-wiremock spec: containers: - name: check-wiremock image: cosmintitei/bash-curl imagePullPolicy: Always command: ["/bin/sh", "-c", "while true; do date; curl -sS wiremock:8080/api/v1/hello; sleep 10; done"]
You should now see the payload from the Wiremock application every ten second in the check-wiremock applications log
Tested in Minikube v1.29.0