#负载测试 #非阻塞 #性能测试 #异步 #IO #HTTP API #负载测试

rumeter-component

使用 Rust 编写负载测试脚本的负载测试平台。类似于 JMeter,但更倾向于使用 SDK,而不是 GUI 工具。

3 个版本

0.1.3 2022 年 6 月 3 日
0.1.2 2022 年 5 月 29 日
0.1.0 2022 年 5 月 28 日

23#负载测试

MIT 许可证

25KB
549 代码行

RuMeter

使用 Rust 编写负载测试脚本的负载测试平台。类似于 JMeter,但更倾向于使用 SDK,而不是 GUI 工具。

  • 快速 RuMeter 的零成本抽象为您提供了裸机性能。
  • 可扩展 RuMeter 易于使用和开发自己的组件。
  • 脚本 RuMeter 只是一个 SDK,最佳使用方法是将其用于脚本中。

示例

使用 RuMeter 进行基本的 HTTP API 负载测试。

请确保在 Cargo.toml 中添加依赖项

[dependencies]
rumeter-component = "0.1.3"

然后,您应该首先定义自己的控制器。您的控制器必须实现 Controller 特质

#[derive(Default, Clone)]
pub struct SimpleController;

#[async_trait]
impl Controller for SimpleController {
    async fn run(&self) -> Vec<RecordData> {
        let mut headers = HeaderMap::new();
        headers.append("Access-Token", HeaderValue::from_static("123456"));
        let samp = HttpSampler::new(
            "test hello",
            "http://127.0.0.1:8088/hello", 
            Method::GET, 
            headers,
            None,
        );
        let re = samp.run().await;
        vec![re]
    }
}

然后,在 main.rs 中

#[tokio::main]
async fn main() ->  Result<(), Box<dyn std::error::Error>> {

    tracing_subscriber::fmt()
        .with_max_level(tracing::Level::INFO)
        .with_span_events(FmtSpan::CLOSE)
        .init();

    let group = ThreadGroup::new(10, Duration::from_secs(1), -1, Some(Duration::from_secs(300)));
    // let group = ThreadGroup::new(10, Duration::from_secs(1), 10, None);

    let out = FileOutput::new(File::create("http.rtl").unwrap());
    group.start(SimpleController::default(), Arc::new(Mutex::new(out))).await;
    info!("test finished");
    Ok(())
}

更多示例可以在 这里 找到。

生成负载测试报告

rtl(RuMeter 测试日志)文件是一种 csv 类型的文件。您可以使用 JMeter 生成类似这样的 html 风格报告

$ jmeter -g [your.rtl] -o [report_path]

待办事项

现在只实现了少数几个采样器。在未来的版本中,将实现更多常用采样器。

许可证

本项目采用 MIT 许可证

贡献

除非您明确声明,否则您提交给 RuMeter 的任何有意贡献都应按 MIT 许可,不附加任何额外条款或条件。

依赖项

~7–23MB
~312K SLoC