9个版本
0.2.0 | 2024年8月12日 |
---|---|
0.1.1 | 2024年4月14日 |
0.1.1-alpha.1 | 2024年3月26日 |
#83 in 可视化
每月478次下载
84KB
2K SLoC
rlt
一个支持实时TUI的Rust负载测试框架。
rlt提供了一种简单的方式来创建负载测试工具。它被设计成一个通用的负载测试框架,这意味着你可以使用rlt进行各种服务,如Http、gRPC、Thrift、数据库或其他自定义服务。
特性
- 灵活:使用自己的逻辑自定义工作负载。
- 易于使用:代码量少,只需关注测试。
- 丰富的统计信息:收集并显示丰富的统计信息。
- 高性能:针对性能和资源使用进行优化。
- 实时TUI:使用强大的实时TUI监控测试进度。
快速入门
运行 cargo add rlt
将 rlt
添加为 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-APACHE和LICENSE-MIT文件以了解许可详情。
依赖关系
~12–27MB
~334K SLoC