This is the second post in our series where we compare Specmatic with tools that have some overlap in terms of capabilities. In our previous post we compared Specmatic and Pact. In this post we will be looking at WireMock.
We often need to mock APIs (both internal and external) to isolate the system under test or development so that we can make progress independent of dependencies. WireMock is a great tool if your goal is to just mock APIs. However API mocking is only effective if the mocks are truly representative of the provider / services they are emulating. Deviations between mocks and providers can lead to integration issues much later in the development cycle. In order to avoid such issues it is important to keep in mind that selecting an API mocking tool is not an isolated decision. It has to be in line with your overall microservices development, testing and deployment goals.
WireMock is an API Mocking tool and Specmatic is a Contract Driven Development tool that leverages API mocking (Smart Mocks) to identify contract compatibility issues in Consumers of an API. So this is not an apples to apples comparison. We are only going to look at a subset of capabilities where there are overlaps between Specmatic and WireMock. However if you believe we have missed any aspects in this comparison, please do leave us a comment.
Specmatic vs Wiremock
Capability | Specmatic.in | Wiremock |
---|---|---|
Smart Mock | YES – Continuously validates expectation data / canned responses against OpenAPI Specifications | NO – Wiremock mappings can go out of sync with the API Specification. Any changes to mapping json is not validated against the OpenAPI Specification. |
Provider Verification | YES – Specmatic runs the OpenAPI Specification as Contract Tests against provider to verify that Provider is in line with the OpenAPI Specification and thereby inline with the Mock | NO – Need to integrate with other tools for this. Example: Export the stubbed endpoints as OpenAPI Specification and then test it with Dredd OR PactFlow bring your own mocks |
Static Subbing | YES – OpenAPI based API Mocking Unlimited Expectations / Canned Responses / Response Mappings with request matching | YES – Wiremock Studio supports OpenAPI import and Faker based generated responses. We can add / modify these response mappings also. However wiremock does not verify if these mappings are as per OpenAPI Spec, this means there may be no feedback if we setup these response mappings incorrectly |
Dynamic Subbing | YES – Expecation JSON can be sent through a http API | YES – Admin API mappings endpoint allow us to post mapping data. |
Delay Simulation | YES – Specmatic allows you to simulate delays for each endpoint based on request matching | YES – Delays can be setup at a global or per stub level, also supports randomisation |
Record and Replay | YES – Specmatic proxy records your request and response to generate both OpenAPI Specifications and the stub data files Also constantly validates the recorded response against API Specification. You can modify recorded json stubs and these changes will will also be verified against the captured API Specifications. | YES – Records stub data which can later be exported as OpenAPI Specifications |
Language and platform agnostic | YES – Specmatic is primarily a standalone executable | YES – Wiremock is able to work as a standalone executable also |
Open Source | YES License – MIT | YES |
Proxying Requests | YES – Specmatic can be configured to handle only requests that are part of the OpenAPI Specifications that have been passsed to it and proxy other requests to another host | YES – WireMock can selectively proxy requests through to other hosts |
SSL Support – Handling https requests | YES – Specmatic can generate self signed certs or you can configure it to leverage your keystore | YES You can configure it to leverage your keystore |
Loading OpenAPI Specifications from Git Repo | YES – Specmatic can pull the latest OpenAPI Specifications directly from your Git Repo | NO – May be possible to achieve this by writing an external utility like a shell script to pull the OpenAPI Specifications from Git Repo and then send it to WireMock server through Admin API mappings endpoint |