Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对客户机-服务器应用程序进行压力测试/负载测试?_Python_Database_Client Server_Load Testing_Stress Testing - Fatal编程技术网

Python 如何对客户机-服务器应用程序进行压力测试/负载测试?

Python 如何对客户机-服务器应用程序进行压力测试/负载测试?,python,database,client-server,load-testing,stress-testing,Python,Database,Client Server,Load Testing,Stress Testing,我开发了一个客户机-服务器风格的、基于数据库的系统,我需要设计一种方法来对系统进行压力/负载测试。客户不可避免地希望了解以下内容: •一台服务器可以支持多少个客户端? •一台服务器可以支持多少并发搜索? •我们可以在数据库中存储多少数据? •等等 所有这些问题的关键是响应时间。我们需要能够测量响应时间和性能如何随着新负载的引入而降低,以便我们可以生成一些漂亮的图形,我们可以向客户机抛出,让他们知道给定硬件配置下期望的性能 现在,我们只是在空中伸出手指,根据我们已经从经验中了解的系统,做出有根据的

我开发了一个客户机-服务器风格的、基于数据库的系统,我需要设计一种方法来对系统进行压力/负载测试。客户不可避免地希望了解以下内容:

•一台服务器可以支持多少个客户端?
•一台服务器可以支持多少并发搜索?
•我们可以在数据库中存储多少数据?
•等等

所有这些问题的关键是响应时间。我们需要能够测量响应时间和性能如何随着新负载的引入而降低,以便我们可以生成一些漂亮的图形,我们可以向客户机抛出,让他们知道给定硬件配置下期望的性能

现在,我们只是在空中伸出手指,根据我们已经从经验中了解的系统,做出有根据的猜测。由于产品被置于更苛刻的条件下,这被证明不足以满足我们未来的需求

我的任务是设计一种方法,以有意义的方式得到这样的答案。我意识到这不是一个任何人都能明确回答的问题,但我正在寻找关于人们如何在自己的系统上进行此类工作的建议

注意的是,我们通过Python语言(SIFG的礼貌)完全访问了我们的客户端API,这比C++工作起来容易得多。


好了,我把这个扔到地板上:真的很想看看你们能想出什么主意

测试1:疯狂地连接和断开客户端,以查看您如何处理会话的初始和结束,以及您的服务器在峰值情况下的存活率,同时还测量有多少客户端无法连接。这是非常重要的

测试2:连接客户端并让它们登录一周,执行随机操作。计算每个动作的往返时间。还要记录操作的顺序,因为这样你的“客户”会发现你用例中的漏洞(非常重要,而且很难进行合理的测试)

测试3和4:确定系统的主要用例,并编写完成这些任务的脚本。然后运行多个执行相同任务的客户端(测试3),以及多个执行不同任务的客户端(测试4)

系列: 现在,您需要的另一个维度是客户数量。 一个不错的系列应该是: 5,10,501005001000500010000

通过这种方式,您可以获得具有不同工作负载的每个测试系列的数据

也祝贺您将客户端api转换为Python!这是把事情准备好的好方法


注意:,这与您的案例无关,但将帮助您为您的系统设计一个好的模糊测试

如果您对用Python编写测试感到满意,我发现它非常有能力。您不会说您的服务器是基于http的,所以您可能必须根据您自己的客户机/服务器风格调整它们的测试设施


一旦您有了Python测试,funkload就可以在多个线程上运行它,监视响应时间,并在测试结束时为您进行总结。

如果您有预算,LoadRunner将是这方面的完美选择。

对于性能,您需要考虑两个方面:延迟(应用程序的响应)和吞吐量(每个间隔有多少个操作)。对于延迟,您需要有一个可接受的基准。对于吞吐量,您需要有一个可接受的最小吞吐量

这些是您的起点。要告诉客户每个间隔可以执行多少xyz,您需要了解硬件和软件配置。了解生产硬件对于获得准确的数字非常重要。如果您不知道硬件配置,则需要设计一种方法,从测试硬件到最终的生产硬件

如果不了解硬件,那么您实际上只能观察性能随时间的变化趋势,而不是绝对的

了解软件配置也同样重要。您是否有群集服务器配置,负载平衡,服务器上是否运行其他配置?您是否可以扩展软件或必须扩展硬件以满足需求

要知道您可以支持多少个客户端,您需要了解什么是标准操作集。快速测试是删除客户端并编写存根客户端,并尽可能多地启动这些客户端。让每个客户端都连接到服务器。您最终将达到服务器连接资源限制。无需连接池或更好硬件你不能得到比这更高的。通常你会遇到一个架构问题,但在这两种情况下,你都有一个上限

获取这些信息并设计一个您的客户端可以执行的脚本。您需要将脚本执行操作所需的时间与预期用户执行操作所需的时间进行映射。开始如上所述增加您的数字,直到客户端的增加导致性能的更大下降。

压力测试有很多方法,但关键是了解预期负载。询问客户的预期。每个间隔的预期需求是什么?从那里你可以计算出较高的负载

您可以对连续运行数小时或数天的多个客户端执行浸泡测试。您可以尝试以尽可能快的速度连接尽可能多的客户端,以查看服务器处理高需求(也是DOS攻击)的能力

并发搜索应该通过代表客户端的标准行为搜索来完成,或者,编写一个脚本来建立一个等待多个线程的信号量,然后您可以一次释放所有线程。这很有趣,并且会惩罚您的数据库。在执行搜索时,您需要考虑可能存在的任何缓存层。您需要测试缓存和不缓存