7个版本
0.2.1 | 2024年3月5日 |
---|---|
0.2.0 | 2024年2月12日 |
0.1.5 | 2023年11月8日 |
0.1.4 | 2023年8月24日 |
0.1.1 | 2023年4月30日 |
#212 在 HTTP客户端
每月 1,039 次下载
用于 2 个 库
27KB
428 代码行
rvcr
reqwest http客户端的记录和回放测试中间件。
灵感来源于
基于
示例
要记录HTTP请求,初始化客户端如下
use std::path::PathBuf;
use reqwest::Client;
use reqwest_middleware::{ClientBuilder, ClientWithMiddleware};
use rvcr::{VCRMiddleware, VCRMode};
let mut bundle = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
bundle.push("tests/resources/replay.vcr.json");
let middleware: VCRMiddleware = VCRMiddleware::try_from(bundle.clone())
.unwrap()
.with_mode(VCRMode::Record);
let vcr_client: ClientWithMiddleware = ClientBuilder::new(reqwest::Client::new())
.with(middleware)
.build();
现在 ClientWithMiddleware
实例将记录项目内部 tests/resources/replay.vcr.json
文件中的请求。
要使用记录的VCR磁带文件,将 .with_mode(VCRMode::Record)
替换为 .with_mode(VCRMode::Replay)
,或者省略它,因为回放是默认使用的。
搜索模式
在回放时,rVCR可以跳过在搜索后续请求时已找到的请求(默认行为)。要禁用跳过请求,这在请求并行执行且响应可能以随机顺序到达时很有用,请使用 .with_search(VCRReplaySearch::SearchAll)
。
过滤敏感信息
您的请求和响应可能包含敏感信息,例如认证细节、用户信息等,这些信息您不希望提交到源代码控制中。
您可以使用 with_modify_request
和 with_modify_response
在存储和恢复之前修改请求和响应。
您可以在主体、URI、头等信息中更改任何内容,以隐藏任何您想要的信息。以下是一个过滤查询参数中敏感信息的示例
let middleware = VCRMiddleware::try_from(bundle.clone())
.unwrap()
.with_mode(VCR::Record)
.with_modify_request(|req| {
let sensitive_query_params = ["access_token", "appsecret_proof"];
// Replace sensitive data in query params
let filtered_query_params = req.uri.clone().query_pairs().map(|(k, v)| {
if sensitive_query_params.contains(&k.as_ref()) {
(k.clone(), Cow::from(k.to_uppercase()))
} else {
(k, v)
}
});
// Overwrite query params with filtered ones
req.uri
.query_pairs_mut()
.clear()
.extend_pairs(filtered_query_params)
.finish();
});
VCR磁带文件压缩
有时VCR文件可能太大,这在版本控制系统中难以维护。
为了节省空间并开启bzip2压缩对工件,请使用构建器中的.compression(true)
方法。
依赖项
~5–21MB
~288K SLoC