1 个不稳定版本
0.0.1 | 2023 年 1 月 16 日 |
---|
#18 在 #pact
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
用法
- 对于 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()
指令,则测试将不会完成,因为它仍然有一个服务器正在等待请求。
- 对于非 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