【问题标题】:Asynchronous WCF Web Service Load Testing异步 WCF Web 服务负载测试
【发布时间】:2015-07-07 04:03:18
【问题描述】:
我看到了其他几个关于负载测试 Web 服务的问题。但据我所知,这些都是同步负载测试工具。 (这意味着他们发送大量请求,但一次只发送一个。)
我正在寻找一种工具,我可以说“我希望同时启动 100 个请求”。
现在,我是整个负载测试的新手,所以这些工具可能是异步的,我只是错过了它。
无论如何,简而言之,我的问题是:是否有一个好的工具可以异步负载测试 WCF Web 服务(即很多线程)。
【问题讨论】:
标签:
wcf
web-services
testing
load-testing
【解决方案1】:
一般来说,我建议您查看soapUI,以了解与测试 Web 服务有关的任何事情。他们在专业版中确实具有负载测试功能(我还没有使用这些功能)。
此外,他们刚刚使用loadUI 产品进入测试阶段。如果它与父产品一样好,那么它值得仔细研究。
【解决方案2】:
您可以使用 Visual Studio 负载测试代理组件在多台客户端计算机上运行,这样您就可以像要加载的计算机一样异步运行。
使用此功能需要许可证。
没有工具可以让您在完全相同的瞬间(即在几毫秒内)应用负载,但这不是正确负载测试应用程序所必需的。
对于大多数需求,运行 Visual Studio Ultimate 版本的单个负载测试服务器足以了解您的 Web 服务在负载下的执行情况。
Visual Studio 和我想象的大多数其他工具将以异步方式应用负载,但我认为在您看来,您希望一次性应用一组负载。
这实际上不是必需的,因为实际上负载不会以这种方式应用于服务。
对于期望高负载的服务的最佳选择是加载您的服务,直到达到给定数量的“每秒请求数”。确定您的应用程序应该期望的级别有点棘手,但需要大致确定您期望有多少用户以及他们在给定时间段内将使用它的数量。
要做的另一个测试是设置负载测试工具并运行负载,直到 Web 服务开始执行不良或测试工具用完“omph”并且无法创建更多负载。
【解决方案3】:
对于开发时间,您可以使用 NLoad (http://nload.github.io)
在您的开发机器或测试环境上运行负载测试。
例如
public class MyTest : ITest
{
public void Initialize()
{
// Initialize your test, e.g., create a WCF client, load files, etc.
}
public void Execute()
{
// Send http request, invoke a WCF service or whatever you want to load test.
}
}
然后创建、配置并运行负载测试:
var loadTest = NLoad.Test<MyTest>()
.WithNumberOfThreads(100)
.WithDurationOf(TimeSpan.FromMinutes(5))
.WithDeleyBetweenThreadStart(TimeSpan.Zero)
.OnHeartbeat((s, e) => Console.WriteLine(e.Throughput))
.Build();
var result = loadTest.Run();