#proxy-server #proxy #pact #http-request #网络编程-proxy-HTTP-代理

nightly bin+lib pact-proxy-rs

记录并服务 PACT 文件结果的代理服务器

1 个不稳定版本

0.0.1 2023 年 1 月 16 日

#18#pact

Apache-2.0

42KB
911 代码行

运行监听 HTTP 请求的代理服务器,将请求和响应以 PACT 格式记录,并将响应发送回发送者。

在单元测试中很有用。第一次测试从网络上获取数据并运行较慢,但之后它会运行得很快,因为它使用了记录的数据。

发送给它的请求必须是以下格式的 GET 请求

https://127.0.0.1:<port>/<scheme>/<host>/<path>?<query>

例如

https://127.0.0.1:8080/http/data.binance.com/api/v3/klines?symbol=ZECUSDT&interval=1w&limit=1

用法

  1. 对于 Rust 应用程序。作为 pact 模拟服务器的 rust 封装

添加到 cargo 构建

[dependencies]
pact-proxy-rs = { git = "https://github.com/NikZak/pact-proxy-rs.git"}

并在你的测试中

    use pact_proxy_rs::server::PactServer;
    
    let mut pact_server = PactServer::with_http_server(&PathBuf::from("tests/pacts"), None, None).unwrap();
    let port = pact_server.port().unwrap();
    pact_server.start_non_blocking().await.unwrap();
    ...
    let client = MyClient::new_with_url("https://127.0.0.1:".to_owned() + port.as_str() + "/https/yoururl.com"));
    let data = client.get_data();
    ...
    pact_server.stop();

如果你在最后没有发出 pact_serfer.stop() 指令,则测试将不会完成,因为它仍然有一个服务器正在等待请求。

  1. 对于非 Rust 应用程序。作为独立服务器。
cargo run -- [OPTIONS] --pact_files_folder <FILE> -p <PORT>

cargo build
target/debug/pact-proxy-rs [OPTIONS] --pact_files_folder <FILE> -p <PORT>

选项

  -f, --pact_files_folder <FILE>  The folder where pacts files will be recorded
  -p, --port <PORT>               (Optional) The port to run the mock service on, if not set then random port is chose

并在你的测试中

    ...
    let client = MyClient::new_with_url("https://127.0.0.1:".to_owned() + <PORT>.as_str() + "/https/yoururl.com"));
    let data = client.get_data();
    ...

在此模式下,它作为在指定端口上运行的独立服务器在本地主机上运行。服务器捕获发送给它的请求并将它们传输到目标-url。每个接收到的响应都记录到 PACT 文件中,与请求一起。

贡献

寻找贡献者。欢迎贡献。

完成

  • 将 Http GET 请求和响应转换为 PACT 格式
  • 记录 PACT 文件
  • 服务 PACT 文件
  • 匹配 PACT 交互
  • 从 PACT 格式转换为 Http 响应
  • 作为独立服务器运行

未完成

  • 将 Http POST 请求和响应转换为 PACT 格式(需要更改交互键/描述为哈希值)
  • 接受 WebSocket 请求
  • 文档
  • 更多的测试覆盖率

除非你明确声明,否则你提交给此存储库以包含在内的任何贡献,根据 Apache-2.0 许可证定义,应按上述 Apache-2.0 许可证许可,没有任何额外的条款或条件。

依赖项

~35–50MB
~1M SLoC