Python脚本加载测试网页
我想对一个网页进行负载测试,想用Python来实现,并且使用多个线程。首先,我需要发送一个POST请求来登录用户(设置cookies)。
接下来,我想知道同时有多少用户发出相同的POST请求,服务器能够承受。我的想法是创建多个线程,让这些线程在循环中发送请求。
我有几个问题:
1. 从CPU的角度来看,能同时运行1000到1500个请求吗?这样做不会让系统变得很慢,从而影响测试的可靠性吗?
2. 关于带宽的限制,测试的网络条件应该有多好,才能保证测试结果的可靠性?
测试网站的服务器是在亚马逊EC2上,而脚本会从另一台服务器(也是亚马逊的)运行。
谢谢!
2 个回答
变量太多了。一次性有1000个...不,是在同一秒钟内...可能会有。带宽可能会成为瓶颈。这种情况最好通过实验来解决。
cPython在运行多个线程时并不能充分利用多核处理器。这意味着,基本上只有一个核心在进行测试工作。
有一些专门的工具可以帮助你完成你想做的事情。让我推荐两个:
FunkLoad 是一个用Python编写的功能性和负载测试工具,主要用途包括:
- 对网页项目进行功能测试,也就是回归测试。
- 性能测试:通过加载网页应用并监控你的服务器,帮助你找到瓶颈,并提供详细的性能报告。
- 负载测试工具,可以发现一些在简单测试中不会出现的bug,比如大规模测试或长时间测试。
- 压力测试工具,用来压垮网页应用的资源,测试应用的恢复能力。
- 通过脚本编写网页代理,处理一些重复的网页任务,比如检查一个网站是否在线。
Tsung 是一个开源的多协议分布式负载测试工具。
Tsung的目的是模拟用户,以测试基于IP的客户端/服务器应用的可扩展性和性能。你可以用它来对你的服务器进行负载和压力测试。已经实现并测试了许多协议,并且可以很容易地扩展。最近还添加了对WebDAV、LDAP和MySQL的支持(实验性)。
它可以分布在多个客户端机器上,能够同时模拟成千上万的虚拟用户(如果你的硬件足够,还可以模拟数百万个用户……)。
如果你决定自己编写工具,可能会想使用Python的multiprocessing模块,这样可以让你利用多个核心。你还应该看看Twisted,它可以让你在有限的线程下轻松处理多个套接字,这比为每个套接字创建新线程要好得多。
你在使用Amazon EC2,所以我建议使用Tsung。你可以租用几台多核服务器几个小时,使用Tsung进行一些非常重的负载测试。在这种配置下,它的扩展性非常好。
至于带宽,通常不是问题,但这取决于应用。你需要在进行负载测试时密切监控所有资源。