For any system you integrate with via HTTP or HTTPS MockServer can be used as:
a mock configured to return specific responses for different requests
a proxy recording and optionally modifying requests and responses
both a proxy for some requests and a mock for other requests at the same time
When MockServer receives a request it matches the request against active expectations that have been configured. Then, if no matches are found, it proxies the request if appropriate; otherwise a 404 is returned.
For each request received the following steps happen:
find matching expectation and perform action
if no matching expectation proxy request
if not a proxy request return 404
An expectation defines the action that is taken, for example, a response could be returned.
to simplify configuration all protocols (i.e. HTTP, HTTPS / TLS, SOCKS, etc) are supported on the same port
the protocol is dynamically detected by both MockServer
Simultaneous Proxying & Mocking
if MockServer is being used as a proxy expectations can also be created
when a request is received it is first matched against active expectations that have been configured
if an expectations is matched its action will be performed instead of proxying the request
Why use MockServer
MockServer allows you to mock any server or service via HTTP or HTTPS, such as a REST or RPC service.
This is useful in the following scenarios:
testing
easily recreate all types of responses for HTTP dependencies such as REST or RPC services to test applications easily and affectively
isolate the system-under-test to ensure tests run reliably and only fail when there is a genuine bug. It is important only the system-under-test is tested and not its dependencies to avoid tests failing due to irrelevant external changes such as network failure or a server being rebooted / redeployed.
easily set up mock responses independently for each test to ensure test data is encapsulated with each test. Avoid sharing data between tests that is difficult to manage and maintain and risks tests infecting each other
create test assertions that verify the requests the system-under-test has sent
de-coupling development
start working against a service API before the service is available. If an API or service is not yet fully developed MockServer can mock the API allowing any team who is using the service to start work without being delayed
isolate development teams during the initial development phases when the APIs / services may be extremely unstable and volatile. Using MockServer allows development work to continue even when an external service fails
isolate single service
during deployment and debugging it is helpful to run a single application or service or handle a sub-set of requests on on a local machine in debug mode. Using MockServer it is easy to selectively forward requests to a local process running in debug mode, all other request can be forwarded to the real services for example running in a QA or UAT environment
Mocking Dependencies & Verifying Request
Given a system with service dependencies, as follows:
MockServer could be used to mock the service dependencies, as follows:
Isolating Single Service / Application
A single page application may load static resources such as HTML, CSS and JavaScript from a web server and also make AJAX calls to one or more separate services, as follows:
To isolate a single AJAX service, for development or debugging, the MockServer can selectively forward specific requests to local instance of the service:
Using MockServer as a content routing load balancer is described in more detail in the section called Isolate Single Service.
Why use MockServer as a proxy
MockServer allows you to record request from the system-under-test or two analysis an existing system by recording outbound requests.
This is useful in the following scenarios:
testing
create test assertions that verify the requests the system-under-test has been sent, without needing to mock any requests
analyse existing system
record all outbound requests so it is possible to analise and under stand what outbound requests an existing system is making
debug HTTP interactions
log all outbound requests so it is possible to visualise all interactions (for example from a browser) to external services. This is particularly important as network analysis tools in browsers such as Chrome do not accurately show all network interactions, such as, favicon.ico requests. In addition, many proxies do not handle encrypted HTTPS traffic, however, MockServer auto-generates certificates using a single MockServer root CA certificate enabling the root certificate to be easily imported
record & replay
all recorded requests can be converted into Java code or JSON expectations to simplify the creation of mocks for complex test scenarios
Recording Requests & Analysing Behaviour
MockServer can record all proxied requests, as follows:
Verifying Request
MockServer can verify proxied service requests, as follows: