9个版本

0.2.0 2024年8月12日
0.1.1 2024年4月14日
0.1.1-alpha.12024年3月26日

#83 in 可视化

Download history 4/week @ 2024-05-16 3/week @ 2024-05-23 2/week @ 2024-05-30 4/week @ 2024-06-06 2/week @ 2024-06-13 2/week @ 2024-07-04 7/week @ 2024-07-11 8/week @ 2024-07-25 4/week @ 2024-08-01 260/week @ 2024-08-08 206/week @ 2024-08-15

每月478次下载

MIT/Apache

84KB
2K SLoC

rlt

一个支持实时TUI的Rust负载测试框架。

Crates.io Documentation Dependency status License

Screenshot

rlt提供了一种简单的方式来创建负载测试工具。它被设计成一个通用的负载测试框架,这意味着你可以使用rlt进行各种服务,如Http、gRPC、Thrift、数据库或其他自定义服务。

特性

  • 灵活:使用自己的逻辑自定义工作负载。
  • 易于使用:代码量少,只需关注测试。
  • 丰富的统计信息:收集并显示丰富的统计信息。
  • 高性能:针对性能和资源使用进行优化。
  • 实时TUI:使用强大的实时TUI监控测试进度。

快速入门

运行 cargo add rltrlt 添加为 Cargo.toml 中的依赖项

[dependencies]
rlt = "0.1.1"

然后通过实现 BenchSuite 特性来创建您的基准测试套件。flatten 属性可以用于将预定义的 BenchCli 嵌入到您的代码中。

#[derive(Parser, Clone)]
pub struct HttpBench {
    /// Target URL.
    pub url: Url,

    /// Embed BenchCli into this Opts.
    #[command(flatten)]
    pub bench_opts: BenchCli,
}

#[async_trait]
impl BenchSuite for HttpBench {
    type WorkerState = Client;

    async fn state(&self, _: u32) -> Result<Self::WorkerState> {
        Ok(Client::new())
    }

    async fn bench(&mut self, client: &mut Self::WorkerState, _: &IterInfo) -> Result<IterReport> {
        let t = Instant::now();
        let resp = client.get(self.url.clone()).send().await?;
        let status = resp.status().into();
        let bytes = resp.bytes().await?.len() as u64;
        let duration = t.elapsed();
        Ok(IterReport { duration, status, bytes, items: 1 })
    }
}

您还可以创建一个独立的结构体来保存CLI选项,以获得更大的灵活性。在 examples/http_hyper.rs 中有一个示例。

最后,创建主函数以运行负载测试

#[tokio::main]
async fn main() -> Result<()> {
    let bs = HttpBench::parse();
    rlt::cli::run(bs.bench_opts, bs).await
}

更多示例可以在 examples 目录中找到。

鸣谢

rlt中的TUI布局灵感来源于 oha

许可证

rlt 在MIT许可证和Apache许可证2.0的条款下分发。

请参阅LICENSE-APACHELICENSE-MIT文件以了解许可详情。

依赖关系

~12–27MB
~334K SLoC