httpmock 0.8.3

HTTP mocking library for Rust
Documentation
use httpmock::prelude::*;
use regex::Regex;
use reqwest::blocking::Client;
use serde_json::json;

#[test]
fn showcase_test() {
    #[derive(serde::Serialize, serde::Deserialize)]
    struct TransferItem {
        number: usize,
    }

    let server = MockServer::start();

    let m = server.mock(|when, then| {
        when.method(POST)
            .path("/test")
            .path_includes("test")
            .query_param("myQueryParam", "überschall")
            .query_param_exists("myQueryParam")
            .path_matches(Regex::new(r#"test"#).unwrap())
            .header("content-type", "application/json")
            .header_exists("User-Agent")
            .body("{\"number\":5}")
            .body_includes("number")
            .body_matches(Regex::new(r#"(\d+)"#).unwrap())
            .json_body(json!({ "number": 5 }))
            .is_true(|req: &HttpMockRequest| req.uri().path().contains("es"));
        then.status(200);
    });

    let uri = format!(
        "http://{}/test?myQueryParam=%C3%BCberschall",
        server.address()
    );
    let client = Client::new();
    let response = client
        .post(&uri)
        .header("content-type", "application/json")
        .header("User-Agent", "rust-test")
        .body(serde_json::to_string(&TransferItem { number: 5 }).unwrap())
        .send()
        .unwrap();

    m.assert();
    assert_eq!(response.status(), 200);
}