85 个版本 (15 个稳定版)
2.0.0 | 2024年7月18日 |
---|---|
2.0.0-beta.4 | 2024年6月25日 |
1.2.9 | 2024年7月17日 |
1.2.5 | 2024年3月15日 |
0.2.0 | 2016年7月13日 |
39 在测试 中排名
8,942 每月下载量
用于 7 个包(6 个直接使用)
140KB
3K SLoC
Pact Mock Server 库
该库实现了进程内模拟服务器,用于匹配 HTTP 请求并从 pact 文件生成响应。它实现了 V3 Pact 规范 和 V4 Pact 规范。
创建模拟服务器
可以通过使用 builder
包中的模拟服务器构建器来创建模拟服务器。构建器可以创建标准 HTTP 和 HTTPS 服务器。
以下示例加载了 Pact 文件,启动了模拟服务器,并在稍后关闭了它。
tokio_test::block_on(async {
use pact_models::prelude::{Pact, RequestResponsePact};
use pact_mock_server::builder::MockServerBuilder;
// Setup a Pact file for the mock server
let pact_json = r#"
{
"provider": {
"name": "Example Provider"
},
"consumer": {
"name": "Example Consumer"
},
"interactions": [
{
"description": "a GET request",
"request": {
"method": "GET",
"path": "/path"
},
"response": {
"status": 200,
"headers": {
"Content-Type": "text/plain"
},
"body": "Hello from the mock server"
}
}
]
}
"#;
let pact = RequestResponsePact::from_json(&"JSON sample".to_string(), &serde_json::from_str(pact_json)?)?;
// Create the mock server. Note that the async version requires a Tokio runtime.
let mut mock_server = MockServerBuilder::new()
.bind_to("127.0.0.1:0")
.with_pact(pact.boxed())
.start()
.await?;
// We can now make any requests to the mock server
let http_client = reqwest::Client::new();
let response = http_client.get(format!("http://127.0.0.1:{}/path", mock_server.port()).as_str())
.send()
.await?;
assert_eq!(response.text().await?, "Hello from the mock server");
// Shut the mock server down. This will dispose of the running background tasks.
mock_server.shutdown()?;
// Finally we can now check the status of the mock server.
assert_eq!(mock_server.all_matched(), true);
Ok::<(), anyhow::Error>(())
});
旧版函数
以下从 1.x 版本中废弃的函数存在于 legacy
模块中。
create_mock_server
创建模拟服务器。需要 pact JSON 字符串以及模拟服务器运行的端口号。端口号为 0 将导致操作系统分配端口。返回模拟服务器的端口号。
mock_server_matched
一个简单函数,根据模拟服务的端口号返回一个布尔值。如果模拟服务器创建时 pact 的所有预期都得到满足,则该值将为 true。如果任何请求没有匹配,收到未识别的请求或未收到预期请求,则返回 false。
mock_server_mismatches
根据模拟服务器的端口号,以 JSON 格式返回所有不匹配、未预期的请求和缺失的请求。
shutdown_mock_server
使用提供的端口号关闭模拟服务器。返回一个布尔值以指示模拟服务器是否成功关闭。
write_pact_file
触发模拟服务器将其 pact 文件写入。如果所有消费者测试都已通过,则应调用此函数。写入文件的目录作为第二个参数传入。如果没有传入任何内容,则使用当前工作目录。如果 overwrite 为 true,则文件将被当前 pact 的内容覆盖。否则,它将与任何现有的 pact 文件合并。
如果 pact 文件成功写入,则返回 Ok。如果无法写入文件或该端口上没有运行模拟服务器,则返回 Err。
crate 功能
所有功能默认启用
datetime
:启用对日期和时间表达式的支持以及生成器。xml
:启用对解析 XML 文档的支持。plugins
:启用对使用插件的支持。multipart
:启用对 MIME 多部分主体的支持。tls
:启用使用 TLS 的模拟服务器支持。这将添加以下依赖项:hyper-rustls、rustls、rustls-pemfile、tokio-rustls。
依赖项
~22–59MB
~1M SLoC