清真! 使用 C# 和 Blazor 开发的分布式压力测试框架

分布式压力测试框架

DFrame 是一个适用于 .NET 和 Unity 的分布式压力测试框架。

这个库允许您用纯 C# 代码编写分布式负载测试场景,不需要奇怪的 gui、dsl、xml、json、yaml。除了 HTTP/1 之外,您还可以通过用 C# 编写代码,来测试 HTTP/2、gRPC 等网络传输。

70ec70db5da3cc6f559d3b354bb59784.gif

怎么用?

DFrame 和 Locust 类似,由两部分组成, DFrame.Controller (由 Blazor Server 构建)作为 Web UI, DFrame.Worker 作为 C# 测试场景脚本。DFrame 作为 Nuget 库提供,如果您熟悉 C#,就可以轻松上手。

// Install-Package DFrame
using DFrame;

// WebUI:7312, WorkerListen:7313
DFrameApp.Run(7312, 7313); 

public class SampleWorkload : Workload
{
    public override async Task ExecuteAsync(WorkloadContext context)
    {
        Console.WriteLine($"Hello {context.WorkloadId}");
    }
}

现在您可以打开浏览器,访问 localhost:7312, 简单设置并进行测试。

ee12ea14a23e371aa21c94cb09eb93e7.png

您还可以设置参数,比如可以传入动态的 URL,可以在构造函数中接收参数。

using DFrame;
using Microsoft.Extensions.DependencyInjection;

var builder = DFrameApp.CreateBuilder(7312, 7313);
builder.ConfigureServices(services =>
{
    services.AddSingleton<HttpClient>();
});
await builder.RunAsync();

public class HttpGetString : Workload
{
    readonly HttpClient httpClient;
    readonly string url;

    // HttpClient 从 DI 获取
    // URL 从 Web UI 传入
    public HttpGetString(HttpClient httpClient, string url)
    {
        this.httpClient = httpClient;
        this.url = url;
    }

    public override async Task ExecuteAsync(WorkloadContext context)
    {
        await httpClient.GetStringAsync(url, context.CancellationToken);
    }
}
b65f8fec41b75862c030f7a1f86fc1a7.png

如果您只想简单的测试 HTTP GET/POST/PUT/DELETE,可以启用 IncludeDefaultHttpWorkload ,这样就可以传入 url 和 body 参数。

using DFrame;

var builder = DFrameApp.CreateBuilder(7312, 7313);
builder.ConfigureWorker(x =>
{
    x.IncludesDefaultHttpWorkload = true;
});
builder.Run();

DFrame 还支持在分布式场景中使用,对于每个 Worker,可以使用下面的代码,连接到统一的 Controller.

using DFrame;
using Microsoft.Extensions.Hosting;

await Host.CreateDefaultBuilder(args)
    .RunDFrameWorkerAsync("http://localhost:7313");

测试模式

DFrame 有四种测试模式,可以根据需要自由配置。

Request 模式,可以设置总的执行次数,每个负载的并发数。

8f1292aef9b85144ad22144785fd2564.png

Repeat 重复模式,和 Ramp-Up 类似,并发数和请求数是逐步上升的。

72246028e03348b218f61422ebe7c5da.png

Duration 可以对测试设置固定的时间。

390154ee3afd28c02bb09c37e247bbb0.png

Infinite 无穷的,持续执行,直到点击 STOP。

37be4a861f6bc3fd7d50797db8ca088d.png

往期推荐:

功能强大,基于 .NET 实现的分布式锁

一行代码,监控 C# 方法执行耗时

Sejil - 开箱即用的 .NET 日志管理组件

CsGo - C#并发流程控制框架,单线程调度每秒100万次以上

C# 开发的高速 .NET 模板引擎

项目地址

https://github.com/Cysharp/DFrame

公众号内回复 上海找工作 

获取 2023 上海 .NET 公司列表。

befb2e8cc6dc9470031a1c6a6d0a2607.png

cbfb89723c24234d1ecd6593c5746582.png

分享

bed0e74ef90d568b70bf87bfdd5ac474.png

点收藏 

3f5317af66b41f5b3a703f79a52ce7e4.png

点点赞

96b0a68b7776b9e96d3ff3a37305a1d5.png

点在看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值