Hacker News new | past | comments | ask | show | jobs | submit login
WireMock (wiremock.org)
163 points by 0x4542 on Sept 7, 2018 | hide | past | favorite | 57 comments



I used WireMock extensively in a recent project that had a dependency on flaky REST API. Using the proxy/recording feature to quickly get some canned responses from the dependency allowed us to perform integration testing even though the dependency was frequently down...we basically mocked it away so we could have a reliable CI environment. Later on we were able to stabilize the dependency but we kept the mock service in several cases because it provided significant flexibility.


For anyone interested, mountebank[1] is an also-good OSS alternative in the same space

[1]http://www.mbtest.org


+1 for mb.

I tried using wiremock for mocking HTTP requests to our microservices' downstream dependencies. Rather than using a standalone wiremock server, we used the java lib. Periodically the connection would drop and our tests would fail. Switched to a standalone mock and haven't experienced this issue since.


We tried both Mountebank and Wiremock and opted for Wiremock as it had more features we needed. We run thousands of tests every time a developer commits and we see no problems using the Java API.

We did run into an issue a small when we parallelized our tests. After a certain parallel factor we saw what looked like Wiremock not being able to keep up. However this might be FUD and we were running these tests all on one machine including a docker-composed test harness so there were a lot of moving parts

Overall Wiremock is excellent. I really rate the functionality to attach state to scenarios. You can model quite complex behaviour with this


There's also a paid hosted version by the creator of Wiremock at https://mocklab.io

It has a great UI, team collaboration and other awesome add ons on top of vanilla Wiremock.


This is fantastic. I created something like this for internal development [0], but this looks like an actual product! Great work.

[0]https://jonasjschreiber.wordpress.com/2018/06/18/creating-an...


It's an obvious design choice, but when I see the logo I can only think of https://en.wikipedia.org/wiki/Waste_Management_(corporation).


I was just about to come and post the same thing. It's hard to imagine it's not intentional, even the contrasting colors are similar and on the same sides. I'd think the authors may want to reconsider the logo as they have some commercialization of the tool (pro support.)


WireMock was born in London, UK, so I doubt the author was aware of the connection. Or maybe he was, and it's tongue in cheek humor :).


My concern was more that the logo was outsourced to someone who copied the Waste Management design.


I can confirm it was neither intentional, nor copied!


Which - by the way - is considered a good investment by some people currently

(Cf Seeking Alpha)


Apologies for the shameless promotion.

If anybody is looking for something similar, but with a user friendly GUI on top, and running as a cross platform desktop app, please checkout https://mocktastic.com

In addition to allowing you to mock multiple response codes for each endpoint and proxying and recording proxied requests, it also has a complete log of all requests and responses it handles that would be helpful for your debugging.

It also has team sync features so one person on your team can mock a complete REST API server and others can seamlessly use it.

EDIT: Currently it only supports mocking HTTP REST APIs. Support is planned for websocket messages and graphQL.


The creator has a hosted version at https://mocklab.io/, and he's extremely responsive to support and feature request implementation.


> extremely responsive to support

And yet https://github.com/tomakehurst/wiremock/issues/97


Interesting. All my experience is with the hosted version, and my comment about support was related to that as well.


There's also a .net implementation here - https://github.com/WireMock-Net/WireMock.Net


Very similar to https://getsandbox.com/.


Looking at this, I can't seem to find any examples of Wiremock being used to test async callbacks, which is one of the more challenging things to get right. Can anyone point to some documentation or code samples showing how to do this in Wiremock?


If by async callbacks you mean something akin to webhooks, then there's an extension for that: https://github.com/wiremock/wiremock-webhooks-extension



I've been using json-server for quite a while,

https://github.com/typicode/json-server


I highly recommend it. I use it at a client extensively and have grown to rely on it heavily for its ability to provide a hermetic testing environment with mobile apps (android).


I wanted to use WireMock for a project, but iirc you can't mock streaming connections. Does anyone know a similar product that supports this?


What benefits does mocking a HTTP service provide when compared to mocking the adapter code that makes the call?

App -> Adapter -> Service

App -> Adapter -> MockService

App -> MockAdapter


It can also test (de)serialization, parsing of HTTP headers, fallbacks, etc. When you're testing business logic then using a mock adapter would be fine, of course.


+1


Wiremock is how you test the adapter.


I found Hoverfly to be a good alternative: https://hoverfly.io/


Now if this had code generation capabilities for .net core, spring boot or rails-api it would have piqued some interest.


https://cloud.spring.io/spring-cloud-contract/ generates a Wiremock mock server for you.


Why, yes it does! Thanks.


Does anyone know of a similar open source tool for mocking ISO 8583 based APIs?


Can anyone comment on how useful this is for testing iOS and Android apps?


Hi, WireMock creator here.

Lots of folks use WireMock for Android testing. Definitely worth checking out Sam Edwards' blog and conference presentations on this, e.g. https://handstandsam.com/2016/01/30/running-wiremock-on-andr...


I've no idea why, but all of your comments were dead. I've vouched for them, so hopefully people will be able to see them now. Seems a bit silly to have the author in the thread, but all of his comments hidden!


Strange. I could see them OK. Thanks for vouching (assuming you can see this one)!


You can always see your own comments. I have "show dead" enabled, but that comment was fine anyway.


More generally, it's useful for mobile development in the following scenarios:

* The back-end API you depend on isn't ready yet

* The back-end test server is slow, flakey etc.

* You want to test scenarios you can't easily make happen on demand like slow responses, 503 errors, dropped connections etc.

Worth mentioning that even if you're not driving WireMock from Java (or another language binding), you can run it on your laptop or a server from a bunch of JSON files. This makes it usable with e.g. iOS apps.

Alternatively you can use https://www.mocklab.io, which is 100% compatible, but hosted, has a UI etc.


While I can easily see how this can be part of frontend development workflow, enabling "frontend-first" app development, TBH, I fail to see how this tool can be helpful for testing purposes. Something like http://www.apilope.com/ or https://uptimerobot.com/ do test the real thing, rather than a simple collection of mock templates.


Two totally different tools/purposes. Wiremock is not used to test your web service, it's mocking the web service so you can quickly code up your client work.

In particular, this is useful if you will eventually be consuming web services which do not yet exist. You can quickly mock up some JSON/XML responses and hit them using real HTTP request and response.


Indeed, you rephrased what I was saying. I fail to see how wiremock can help you "testing" your infrastructure (frontend in this case), as opposed to be saving you time during development of interfaces (use case that I can see it useful for).


I'm afraid I may not clearly understand what you mean by "testing" then.

I worked on one project where we used Wiremock extensively. Development and QA was done against the mocks because the real target system did not exist yet. Everything from business logic to error handling and even load testing was done against wiremock. Even when the other system got up and running, some conditions were impossible to test without wiremock. For example, what if the web service we hit returns a 500 error? Well, the real system never did that in practice. But with wiremock we could do that whenever we wanted.

Of course, we still had to do integration testing before going live, but wiremock saved us a TON of time for development and QA.


"Development and QA was done against the mocks because the real target system did not exist yet."

Wouldn't this be frontend discovery/development, rather than frontend testing? In this case, I recognize the tool can be useful.

"For example, what if the web service we hit returns a 500 error?"

Isn't this what development and staging environments are for? Not trying to be polemic/destructive, I just see building and maintaining mock api templates as a further overhead, when specific backend behavior can be simulated in an alternative deployment environment once a backend is in fact there. But maybe I don't fully understand the constraints posed by workflows other than mine! :-)


You may not have any control whatsoever over the backend. You may not even have the ability to create data scenarios you want to test. Creating large/complex data scenarios is almost always more time intense than creating a mock. Honestly, creating simple data scenarios is almost always more time intense than creating a mock.


Can be very useful when your testing is troubled by permanently changing backend data or when some cases are hard to get examples of.

Imagine writing a front-end to a third party weather API: recording gets you repeatable examples and slightly edited copies of those recordings allow you to check unobserved extremes without manually mocking out the whole thing.


Here's a really good video talk of some real-world mobile testing: https://www.youtube.com/watch?v=8hK_BQVqvZ0



Totally (mostly) off topic:

I'd love to see an index of who uses what. I see the who's using us section, and some of those names look familiar from other sections. So it'd be fun to flip things and show what any given company is using.

I dunno, maybe scrap prodcuts from product hunt?


If I understand well what you mean, you might like https://stackshare.io/ :)


Well, I feel extremely foolish, having seen that site before.



so is it similar to Polly.js by Netflix but written in Java?


Except that Polly.js was released this year and WireMock a couple of years ago.


WireMock was originally released in 2011


Postman?


No affiliation, just a happy user.

https://www.getpostman.com




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: