#hyper #stub #proxy #testing #in-memory

hyper-stub

不接触网络的 hyper 客户端

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2018 年 6 月 16 日

#45#stub

MPL-2.0 许可证

14KB
222

hyper-stub

hyper-stub 是一个 Rust 库,提供创建 hyper 客户端的函数,这些客户端使用预定义的函数将请求转换为响应,而不进行任何实际的网络操作。这意味着整个请求/响应生命周期都在单个进程中发生,并且应该比例如绑定到端口等有性能和稳定性改进。这种用例的一个潜在用途是在测试中模拟 HTTP 交互,以避免缓慢/不可靠/不存在的互联网连接。

有关 API 参考和使用示例,请参阅 文档


lib.rs:

hyper-stub 提供创建 hyper 客户端的函数,这些客户端使用预定义的函数将请求转换为响应,而不进行任何实际的网络操作。这意味着整个请求/响应生命周期都在单个进程中发生,并且应该比例如绑定到端口等有性能和稳定性改进。这种用例的一个潜在用途是在测试中模拟 HTTP 交互,以避免缓慢/不可靠/不存在的互联网连接。

最简单的情况是使用 proxy_client_fn_ok 创建一个绑定到简单函数的客户,该函数直接将请求映射到响应

#
use futures::{Future, Stream};
use hyper::{Request, Response, Uri};
use hyper_stub::proxy_client_fn_ok;
use tokio::runtime::current_thread::Runtime;

let echo_client = proxy_client_fn_ok(|request| {
    let body = request.into_body();
    Response::new(body)
});

let url: Uri = "http://example.com".parse().unwrap();
let mut builder = Request::post(url);
let request = builder.body("hello world".into()).unwrap();
let future = echo_client.request(request)
    .and_then(|res| res.into_body().concat2())
    .map(|bytes| {
        let body = String::from_utf8(bytes.to_vec()).unwrap();
        println!("{}", body);
    })
    .map_err(|error| panic!("ERROR: {:?}", error));

Runtime::new().unwrap().block_on(future).unwrap();

如果函数需要返回错误,或异步响应用户请求,可以使用 proxy_client_fn

最后,一个高级用例是使用 hyper services 而不是简单函数。这可以通过 proxy_client 函数完成。

依赖项

~8MB
~129K SLoC