1 个不稳定版本

0.1.2 2022 年 5 月 28 日

#757测试

每月 21 次下载

MIT 许可证

41KB
966 代码行

Hailstorm

Test Status

Hailstorm 是一个受 Locust 启发的分布式负载测试框架。

示例设置

以下示例展示了如何使用提供的示例二进制文件配置和启动模拟。为了更好地控制 hailstorm 及其功能,我建议将 hailstorm 作为依赖项使用,并创建自己的代理和控制器组件。

控制器

环境变量定义

# .env.controller

hs_address="0.0.0.0:50051"
hs_clients_distribution.hailstone="ln(1 + t/1000) * (sin(t/10) + 1) * 1000"
hs_script_path="simulation-script.rn"

然后可以使用 rune 脚本定义客户端行为。

// simulation-script.rn

struct hailstone {
    id
}
      
impl hailstone {
    pub fn new() {
        Self { id: 10 }
    }

    pub fn register_user(user) {
        user.register_action(10.0, Self::do_http_req)
    }

    pub async fn do_http_req(self) {
        let res = http::get("http://someserver:80").await;
    }
}

然后可以使用以下命令启动控制器:

zenv -f .env.controller -- ./target/release/examples/controller

代理

环境变量定义

# .env.agent

hs_upstream.lvl1=https://127.0.0.1:50051

然后可以使用以下命令启动一个或多个代理:

hs_address=0.0.0.0:50151 zenv -f .env.agent -- ./target/release/examples/agent
hs_address=0.0.0.0:50152 zenv -f .env.agent -- ./target/release/examples/agent
hs_address=0.0.0.0:50153 zenv -f .env.agent -- ./target/release/examples/agent

多级代理

代理也可以附加到其他代理,以实现更分布式的拓扑。每个代理也可以有多个父代理,以减少数据丢失的可能性。

环境变量定义

# .env.agent.lvl2

hs_upstream.lvl1_0=https://127.0.0.1:50151
hs_upstream.lvl1_1=https://127.0.0.1:50152
hs_upstream.lvl1_2=https://127.0.0.1:50153

如前所述,可以启动代理:

hs_address=0.0.0.0:50251 zenv -f .env.agent.lvl2 -- ./target/release/examples/agent
hs_address=0.0.0.0:50252 zenv -f .env.agent.lvl2 -- ./target/release/examples/agent
hs_address=0.0.0.0:50253 zenv -f .env.agent.lvl2 -- ./target/release/examples/agent

依赖项

~15–27MB
~454K SLoC