C# 负载测试服务器登录

C# 负载测试服务器登录,c#,.net,multithreading,task-parallel-library,C#,.net,Multithreading,Task Parallel Library,我是一个没有测试经验的开发人员 我目前正在研究如何对处理移动应用程序登录的服务器进行负载测试。用户通常在轮班开始时登录。因此,当每个人都想登录时,早上的负载会很重。我们遇到了一些服务器在高负载下崩溃的问题,我想复制这种行为来分析它 我得到了一个以前开发的测试登录的应用程序的源代码,在那里我可以添加一个用户列表,让他们登录x次。它使用backgroundWorker,但据我所知,它仍然只使用一个线程,请求将同步发送,因此不能准确表示生产中的实际负载 private void backgroundW

我是一个没有测试经验的开发人员

我目前正在研究如何对处理移动应用程序登录的服务器进行负载测试。用户通常在轮班开始时登录。因此,当每个人都想登录时,早上的负载会很重。我们遇到了一些服务器在高负载下崩溃的问题,我想复制这种行为来分析它

我得到了一个以前开发的测试登录的应用程序的源代码,在那里我可以添加一个用户列表,让他们登录x次。它使用backgroundWorker,但据我所知,它仍然只使用一个线程,请求将同步发送,因此不能准确表示生产中的实际负载

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    foreach (IClient client in clientList)
    {
        RunTest(client);
    }     
}
我如何修改它以更好地反映实际使用情况?或者有没有更简单的方法来测试负载

我研究了如何使用任务和TPL。但我在这件事上有点困难

如果我这样做:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    foreach (IClient client in clientList)
    {
        Task.Factory.StartNew(() => RunTest(client));  
    }     
}

这会“自动”启动一个新线程并对其进行管理吗?

否,这是错误的
backgroundWorker1\u-DoWork
正在启动一个后台线程池线程,
Task.Factory.StartNew(()=>{…})呼叫。在我看来,这样做毫无意义

我会按顺序进行测试,为什么需要多线程呢?比如:

private void RunLoadTests()
{
    foreach (IClient client in clientList)
        RunIsolatedTest(client));    
}
RunIsolatedTest
方法中,您可以添加负载测试和任何您想要的内容。这将确保每个客户机的测试都在同一个线程上运行(这不会让您准确地知道该线程正在参与哪些其他操作,但这比拆分多个线程要好!)。然后,您可以根据需要查看CPU时钟或其他处理器统计数据


我希望这会有所帮助。

看看测试从单个节点到服务器的负载是很困难的,因为这不是一个真正的工作场景,而且可能会有更多的因素,而不仅仅是登录数量。如果您连接的是HTTP服务器,则可以使用类似于执行基准测试的工具。也许还值得向一部分beta版用户开放应用程序,让他们尝试一下。谢谢你的建议。虽然它不是一个http服务器,而且I beta测试也不是一个真正的选项。谢谢。我最初的想法是,在复制服务器崩溃时,串行测试是不准确的。现实世界的负载将在轮班开始时,数百名用户将尝试在几分钟内登录。多个线程将模拟同时获取请求。然后服务器将请求排队,并逐一处理。哦,我明白了。我没有意识到您正在复制服务器条件。好的,在这种情况下,只需删除
BackgroundWorker
,然后像在事件处理程序中一样使用TPL启动线程。请参阅一个很棒的教程…再次感谢。我试着循环使用它并开始一项新任务,如上所述。问题是,我认为如果我使用多个客户端,响应就会被切断。我试过使用一个客户机,结果很好。有什么建议吗?我也尝试过向它添加Wait(),它会否定整个并行性吗,因为它必须等待前一个完成后才能开始?