wiremock-rs 用于 Rust:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

wiremock-rs:Rust 的 HTTP Mock 服务器

\n\n

在现代软件开发中,测试是流程中不可或缺的一部分。测试与外部 HTTP 服务交互的代码尤其困难。此时,wiremock-rs 库便派上了用场——它是 Rust 生态系统中用于创建 HTTP mock 服务器的强大工具。

\n\n

wiremock-rs 提供了模拟外部 HTTP 服务行为的能力,使开发者能够在隔离环境中测试代码。无需向外部 API 发送真实请求(这可能缓慢、不可靠或成本高昂),您可以创建一个本地 mock 服务器,它将完全按照您的设定进行响应。这在编写集成测试、测试错误处理以及开发客户端库时尤其有用。

\n\n

该库受流行的 Java 工具 WireMock 启发,但完全用 Rust 重写,并考虑了该语言的惯用用法和特性。wiremock-rs 支持所有主要功能:按 URL、标头、请求体进行匹配;返回不同的 HTTP 状态码;响应延迟;调用次数验证等等。

\n\n

安装

\n\n

要安装 wiremock-rs,请将依赖项添加到您的 Cargo.toml 文件中:

\n\n
[dev-dependencies]\nwiremock = "0.6"
\n\n

然后执行命令:

\n\n
cargo build
\n\n

同时确保您已安装 Rust 和 Cargo。如果尚未安装,请通过 rustup 进行安装。

\n\n

快速入门

\n\n

让我们创建一个最简单的 mock 服务器,用于响应 GET 请求:

\n\n
use wiremock::{MockServer, Mock, ResponseTemplate};\nuse wiremock::matchers::{method, path};\n\n#[tokio::main]\nasync fn main() {\n    // 在随机端口上启动 mock 服务器\n    let mock_server = MockServer::start().await;\n    \n    // 创建规则:对 GET /hello 响应状态码 200 和正文 "Hello, World!"\n    let mock = Mock::given(method("GET"))\n        .and(path("/hello"))\n        .respond_with(ResponseTemplate::new(200)\n            .set_body_string("Hello, World!"));\n    \n    // 在服务器上注册规则\n    mock_server.register(mock).await;\n    \n    // 现在可以向服务器发送请求了\n    let client = reqwest::Client::new();\n    let response = client.get(&format!("{}/hello", &mock_server.uri()))\n        .send()\n        .await\n        .unwrap();\n    \n    println!("状态码: {}", response.status());\n    println!("正文: {}", response.text().await.unwrap());\n    \n    // 停止服务器(main 函数结束时自动发生)\n}
\n\n

这个最小示例展示了核心思想:启动服务器,定义规则(匹配器)和响应(响应模板),然后注册它们。之后,您的客户端代码就可以向 mock 服务器发送请求了。

\n\n

主要方法和函数

\n\n

1. MockServer::start()

\n

签名: pub async fn start() -> MockServer

\n

描述: 在随机可用端口上启动一个新的 mock 服务器。服务器将一直运行,直到 MockServer 对象被销毁。

\n
let server = MockServer::start().await;\nprintln!("服务器已启动,地址为 {}", server.uri());
\n\n

2. MockServer::start_on_port(port: u16)

\n

签名: pub async fn start_on_port(port: u16) -> MockServer

\n

描述: 在指定端口上启动 mock 服务器。当需要固定端口进行配置时很有用。

\n
let server = MockServer::start_on_port(8080).await;\nassert_eq!(server.uri(), "http://127.0.0.1:8080");
\n\n

3. Mock::given(matcher: impl Matcher)

\n

推荐