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日

#212HTTP客户端

Download history 63/week @ 2024-03-13 42/week @ 2024-03-20 187/week @ 2024-03-27 191/week @ 2024-04-03 161/week @ 2024-04-10 135/week @ 2024-04-17 147/week @ 2024-04-24 203/week @ 2024-05-01 240/week @ 2024-05-08 258/week @ 2024-05-15 254/week @ 2024-05-22 283/week @ 2024-05-29 281/week @ 2024-06-05 277/week @ 2024-06-12 207/week @ 2024-06-19 183/week @ 2024-06-26

每月 1,039 次下载
用于 2 个

Apache-2.0

27KB
428 代码行

rvcr

crates.io

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_requestwith_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