• Stars
    star
    476
  • Rank 92,280 (Top 2 %)
  • Language
    Rust
  • License
    MIT License
  • Created about 5 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

HTTP mocking library for Rust

httpmock

HTTP mocking library for Rust.

Build codecov crates.io Mentioned in Awesome Rust

DocumentationCrateReport BugRequest FeatureChangelogSupport this Project

Features

  • Simple, expressive, fluent API.
  • Many built-in helpers for easy request matching (Regex, JSON, serde, cookies, and more).
  • Parallel test execution.
  • Extensible request matching.
  • Fully asynchronous core with synchronous and asynchronous APIs.
  • Advanced verification and debugging support (including diff generation between actual and expected HTTP request values)
  • Fault and network delay simulation.
  • Support for Regex matching, JSON, serde, cookies, and more.
  • Standalone mode with an accompanying Docker image.
  • Support for mock configuration using YAML files.

Getting Started

Add httpmock to Cargo.toml:

[dev-dependencies]
httpmock = "0.7.0"

You can then use httpmock as follows:

use httpmock::prelude::*;

// Start a lightweight mock server.
let server = MockServer::start();

// Create a mock on the server.
let mock = server.mock(|when, then| {
    when.method(GET)
        .path("/translate")
        .query_param("word", "hello");
    then.status(200)
        .header("content-type", "text/html; charset=UTF-8")
        .body("袩褉懈胁械褌");
});

// Send an HTTP request to the mock server. This simulates your code.
let response = isahc::get(server.url("/translate?word=hello")).unwrap();

// Ensure the specified mock was called exactly one time (or fail with a
// detailed error description).
mock.assert();

// Ensure the mock server did respond as specified.
assert_eq!(response.status(), 200);

The above example will spin up a lightweight HTTP mock server and configure it to respond to all GET requests to path /translate with query parameter word=hello. The corresponding HTTP response will contain the text body 袩褉懈胁械褌.

In case the request fails, httpmock would show you a detailed error description including a diff between the expected and the actual HTTP request:

colored-diff.png

Usage

See the reference docs for detailed API documentation.

Examples

You can find examples in the httpmock test directory. The reference docs also contain a lot of examples. There is an online tutorial as well.

Standalone Mock Server

You can use httpmock to run a standalone mock server that is executed in a separate process. There is a Docker image available at Dockerhub to get started quickly.

The standalone mode allows you to mock HTTP based APIs for many API clients, not only the ones inside your Rust tests, but also completely different programs running on remote hosts. This is especially useful if you want to use httpmock in system or end-to-end tests that require mocked services (such as REST APIs, data stores, authentication providers, etc.).

Please refer to the docs for more information

License

httpmock is free software: you can redistribute it and/or modify it under the terms of the MIT Public License.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MIT Public License for more details.