85 个版本 (15 个稳定版)

2.0.0 2024年7月18日
2.0.0-beta.42024年6月25日
1.2.9 2024年7月17日
1.2.5 2024年3月15日
0.2.0 2016年7月13日

39 在测试 中排名

Download history 1063/week @ 2024-04-22 757/week @ 2024-04-29 1544/week @ 2024-05-06 1389/week @ 2024-05-13 1481/week @ 2024-05-20 2289/week @ 2024-05-27 2264/week @ 2024-06-03 2485/week @ 2024-06-10 2414/week @ 2024-06-17 2576/week @ 2024-06-24 1987/week @ 2024-07-01 2208/week @ 2024-07-08 3089/week @ 2024-07-15 1424/week @ 2024-07-22 2612/week @ 2024-07-29 1776/week @ 2024-08-05

8,942 每月下载量
用于 7 个包(6 个直接使用)

MIT 许可证

140KB
3K SLoC

Pact Mock Server 库

该库实现了进程内模拟服务器,用于匹配 HTTP 请求并从 pact 文件生成响应。它实现了 V3 Pact 规范V4 Pact 规范

在线 Rust 文档

创建模拟服务器

可以通过使用 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