Overview

Get started today
Replay past traffic, gain confidence in optimizations, and elevate performance.

API mocking is a functional testing tool that allows developers and testers to simulate API responses, bypassing the need for actual external services. A mock server is important in modern software development, where rapid changes and increasing complexity demand robust and flexible testing solutions. Mocking is also crucial for unit testing and integration testing. By using a mock API, teams can efficiently test the performance and reliability of their applications around a live API, even in the fast-paced and ever-evolving tech landscape.

 

Why is service mocking important?

Service mocking is crucial in software testing, particularly in areas like functional testing or performance testing, as it allows developers to simulate the behavior of various software components, thereby ensuring that each part functions as expected in isolation. By using service mocking as part of developer tools in API design, it enables the testing of individual components without the need for the entire system to be operational like unit testing, thus facilitating more efficient software testing.

 

What are WireMock and Speedscale?

WireMock and Speedscale stand out as notable options for available API simulation tools. WireMock has built a solid following with its comprehensive and flexible approach to mocking HTTP-based services, despite requiring manual setup for service virtualization. Speedscale, on the other hand, stands out with its feature-rich platform that focuses on simplifying and automating the API mocking process.

WireMock

WireMock is an open source Java lib designed to simulate HTTP-based services for testing purposes. WireMock is historically popular with API design for Java applications like Spring Boot. The responsibility of creating mocks falls on developers to write themselves. Although this is very configurable, it can also be cumbersome and brittle.

The open source Java lib is runnable as a standalone process on any remote server with JAR file and Docker container distributions available. WireMock also offers WireMock Cloud, a paid service for hosting WireMock. WireMock Cloud has free and enterprise plans. If you need features like enterprise SSO or their chaos module, the WireMock Cloud enterprise plan is for you. 

Speedscale

Speedscale is a hosted service that runs tests and mocks for your infrastructure based on your own production data. Based on traffic replay, a procedure to store production traffic to later replay in a different environment, mocks are automatically generated from real responses from the actual API server. 

As a WireMock alternative, Speedscale is more suited for teams looking for an out-of-the-box solution with minimal configuration requirements. Its automation tools make it accessible to developers who may not have extensive experience in API testing. Furthermore, Speedscale’s ability to continuously record production traffic for generating mocks means your mocks never become outdated against real production.

 

Comparison

This article provides a detailed comparison between WireMock and Speedscale, focusing on the following:

  • Realistic mock APIs
  • Learning curve and user experience
  • Ease of use
  • Monitoring and alerts
  • Scalability
  • Flexibility
  • Customization

By evaluating these two prominent tools, this article will help you select the best API mocking solution to meet your development and test cases.

Case Study: Nylas

Using 3rd party mocks, Nylas improved performance by 20x with Speedscale.

Realistic mock APIs

Realism in API mocking is about creating a simulated environment that accurately reflects the conditions, data, and scenarios an application would encounter in production.

Speedscale provides realism by generating mocks based on actual traffic. This method ensures that the mock responses adhere to the expected format and reflect diverse real-world scenarios. Speedscale creates dynamic and realistic test environments by capturing and replaying real API traffic. This approach helps identify issues that might only emerge under specific or unpredictable conditions, making the testing process more thorough and reflective of fundamental user interactions. There is also no need to do manual request matching.

The following screenshot shows the Speedscale dashboard with a real-time graph of API traffic, tracking latency, throughput, and error rate metrics:

Speedscale dashboard showing a real-time graph of API traffic with latency, throughput, and error rate metrics

WireMock allows developers to define specific request-response pairs, giving them control over the exact output they expect from the mock API for given inputs. This level of request matching precision is excellent for testing particular incoming requests and ensures that every aspect of the API response, from headers to the body content, can be accurately replicated. However, the manual effort required to define these responses can be significant, especially when dealing with complex APIs or a large variety of potential responses.

 

Learning Curve and User Experience

Speedscale takes a user-friendly and intuitive approach to API mocking that greatly simplifies the learning curve. The automated mock generation feature lets you quickly set up realistic testing environments. This design caters to efficient navigation through key metrics of API performance testing and outcomes and clearly displays success rates and error summaries. Speedscale’s user interface also guides users through capturing real API traffic and turning it into comprehensive mock scenarios.

The following screenshot shows the user interface of Speedscale displaying the automated mock generation feature for streamlined API testing:

Though WireMock offers a powerful platform for API mocking, it does come with a steeper learning curve to get a WireMock server running. It requires a detailed understanding of its configuration and the structure of the mocks. Users need to manually define request-response pairs in JSON or XML, which can be difficult for beginners and time-consuming even for experienced users. This complexity is particularly evident when dealing with many API endpoints or intricate response scenarios, such as dynamically changing data formats or handling a large number of simultaneous user interactions. For instance, here’s how a basic mock response is set up in WireMock:

“`json

{

  “request”: {

    “method”: “GET”,

    “url”: “/api/myendpoint”

  },

  “response”: {

    “status”: 200,

    “body”: “Hello, this is a mock response”,

    “headers”: {

      “Content-Type”: “text/plain”

    }

  }

}

“`

This configuration defines a mock for a GET request to `/api/myendpoint`, returning a 200 status code with a simple text message. While this example is straightforward, the manual creation of such JSON configurations for more complex scenarios – involving conditional logic, varied response bodies, and multiple endpoints – significantly adds to the learning curve and setup time.

How to Determine Throughput in Performance Testing

A step-by-step guide for determining max TPS with production traffic replication.

Ease of Use

Speedscale transforms the approach to mock creation by automating the process. By automating the capture of real network traffic, Speedscale simplifies mock creation by effortlessly generating mocks that closely mirror real-world scenarios. This process streamlines what traditionally has been a manual and complex task, making Speedscale both user-friendly and efficient.

The images below show how easy it is to generate mocks from the Speedscale dashboard.

Speedscale’s Replay Traffic feature integrates seamlessly into this workflow. It activates a generator in your Kubernetes cluster that is designed to make requests to your service based on the created mocks. This feature enables you to test how your application responds in a more realistic scenario, simulating actual user behavior and traffic conditions:

Speedscale also allows you to choose whether to select or exclude requests from outside your service during the replay:

You can select the requests made from your service to external APIs during the replay:

Configuration settings in Speedscale for selecting requests made from the service to external APIs during replay

Completing these steps will successfully create a snapshot:

Confirmation screen in Speedscale showing successful creation of a snapshot for API mocking

After creating a snapshot, you can replay mocks in your preferred environment. By leveraging actual traffic data, Speedscale ensures that the mocks are easy to create and highly representative of the live environment.

WireMock, on the other hand, offers a high degree of customization for mock responses. However, this flexibility requires manual setup for proper service virtualization. Users must explicitly define stubs and mappings and craft each mock response individually. While this offers precise control over the mock behavior, this process demands more time and effort, especially when dealing with complex or numerous endpoints.

For example, consider a scenario where you need a mock response for a user information request. Here’s how you would set it up in WireMock:

“`json

{

  “request”: {

    “method”: “GET”,

    “urlPath”: “/api/user/12345”,

    “headers”: {

      “Authorization”: {

        “equalTo”: “Bearer someAuthToken”

      }

    }

  },

  “response”: {

    “status”: 200,

    “jsonBody”: {

      “id”: “12345”,

      “name”: “John Doe”,

      “email”: “john.doe@example.com”

    },

    “headers”: {

      “Content-Type”: “application/json”

    }

  }

}

“`

In this configuration, WireMock is set to respond to a GET request at `/api/user/12345` with a specific authorization token. The response includes user details in JSON format with a 200 status code. Such a setup allows for detailed response modeling but requires careful crafting of the JSON configuration, particularly for APIs with numerous endpoints and diverse response requirements.

 

Monitoring and Alerts

Speedscale offers comprehensive monitoring and alerting features that can preemptively identify and address issues in API traffic. These tools detect anomalies and irregularities, such as unexpected spikes in response time, unusual patterns in API usage (like sudden increases in error rates), and deviations from typical traffic patterns that could indicate potential problems. Users can observe critical metrics in real time, such as latency distributions across various percentiles. By alerting developers to these issues in real time, Speedscale ensures that teams can quickly respond to performance degradation, service outages, or security vulnerabilities.

Speedscale dashboard providing options for replaying mocks in various testing environments

WireMock, in contrast, is primarily designed for mocking and stubbing HTTP requests and does not include native monitoring and alerting capabilities. While it does an excellent job of simulating API responses, monitoring these interactions would require integration with external tools or additional custom development. This means that WireMock might not offer the comprehensive insight into API performance and health that a more integrated solution would provide.

The Key to Scalable Kubernetes Clusters: Load Test by Simulating Traffic

See how simulating heavy user traffic can accelerate and improve your load tests, and cut through complexity in your Kubernetes apps.

Scalability

Scalability in API testing is not just a feature—it’s a necessity. As applications grow, the ability to run test cases at scale becomes critical to ensuring performance does not degrade over time.

Speedscale is designed to meet these scaling demands with precision. It effortlessly adapts to varying loads, making it an ideal solution for high-traffic applications. For instance, Speedscale can efficiently handle scenarios ranging from everyday usage to peak traffic events like Black Friday sales. It’s capable of executing extensive load tests, such as simulating 500 requests over 300 seconds, and accurately measuring the application’s performance under such stress. This scalability is not only crucial for load testing and capacity planning but also ensures that your infrastructure is prepared for real-world demands.

The image below demonstrates a custom load test configuration in Speedscale, designed to execute a substantial number of requests in a controlled timeframe:

Custom load test configuration in Speedscale, demonstrating how to set up a test for 500 requests over 300 seconds

Following this configuration, the graph below illustrates how the system handles these requests, providing valuable insights into the application’s scalability and resilience:

Graphical representation of a load test in Speedscale, showing request execution over time

WireMock’s capability to support a wide range of test scenarios is notable, from simple unit tests to complex integrations. However, scaling WireMock for high-traffic scenarios often involves additional steps, such as configuring multiple server instances for load balancing or fine-tuning its performance settings to handle increased request volumes effectively. For instance, to handle higher traffic loads, you may need to run multiple instances of WireMock and load balance between them or tweak its configuration for optimal performance. While it is possible to scale WireMock for larger applications, it often requires a deeper dive into its documentation and a careful setup.

 

Flexibility

Flexibility in API mocking refers to a tool’s ability to adapt to various test cases, such as custom data shaping, conditional logic, and dynamic responses. Noticeably, both tools support various API designs in addition to a rest API like gRPC or SOAP.

Speedscale demonstrates its flexibility by optimizing the capture of real traffic to generate mocks that are as realistic as possible. It can automatically create scenarios that reflect actual behavior and data patterns. Speedscale’s ability to replay this traffic in a test environment allows for a flexible and thorough testing process.

WireMock, on the other hand, offers flexibility through the extensive customizability of responses and conditions. It allows developers to craft detailed mock responses and create complex request-matching rules. This level of customization is particularly beneficial when specific scenarios need to be tested or when dynamic responses are needed. WireMock’s flexibility shines in scenarios where every aspect of the request and response needs to be meticulously controlled.

 

Customization

Customization in API mocking determines how closely the mock can replicate real-world scenarios or specific testing requirements.

While Speedscale excels at automatically generating realistic mocks from recorded traffic, it’s important to note that its customization options are not as extensive as a fully manual setup. Speedscale does allow modifications like altering HTTP status codes or tweaking response headers and body content. However, for intricate, edge-case testing scenarios that require highly specific configurations, this might be a limitation.

WireMock offers a playground of customization options. It allows users to define and manipulate every aspect of their mock responses, including headers, body content, and status codes, with detailed conditionality. This makes WireMock an ideal choice for situations where precise control over the mock behavior is essential.

For example, the following JSON configuration shows how WireMock facilitates complex, dynamic mocking:

“`json

{

  “id”: “f5a5d582-57a1-4f77-8f0d-2bee6e1f25e2”,

  “request”: {

    “method”: “GET”,

    “urlPattern”: “/api/users/(.*)”,

    “headers”: {

      “Accept”: {

        “equalTo”: “application/json”

      }

    }

  },

  “response”: {

    “status”: 200,

    “bodyFileName”: “user-response-template.json”,

    “headers”: {

      “Content-Type”: “application/json”

    },

    “transformers”: [“response-template”],

    “transformerParameters”: {

      “name”: “{{request.path.[1]}}”

    }

  }

}

“`

It’s set up to respond to GET requests for specific user IDs with a custom JSON response. The response content dynamically changes based on the requested user ID, showcasing WireMock’s powerful ability to create dynamic and conditional responses.

 

Conclusion

This article compared two robust tools for API mocking: WireMock and Speedscale. Both mock servers are great testing tools for unit testing and integration testing. WireMock’s detailed, manual setup offers fine-grained control, while Speedscale’s automated mock generation excels in efficiency and realism for high-traffic applications.

Speedscale, as an altnernative, emerges as a particularly strong choice for those operating in Kubernetes environments, bringing the sophistication of production-like testing into your CI/CD pipeline. If you’re seeking to streamline your testing process and enhance the quality of your software, Speedscale’s automated, traffic-based approach offers a clear advantage.

Transform your API testing from a routine task into a strategic asset. Take the first step towards smarter testing today. To see how Speedscale’s traffic replication and automated mocking can streamline your testing workflows, start your free 30 day trial now or schedule a personalized demo.

Learn more about API Mocking

TUTORIAL

How to Mock HTTP APIs with MockServer

TUTORIAL

How to Mock gRPC APIs

Ensure performance of your Kubernetes apps at scale

Auto generate load tests, environments, and data with sanitized user traffic—and reduce manual effort by 80%
Start your free 30-day trial today

Learn more about this topic