stress_test

来源:互联网 发布:java 键值对 编辑:程序博客网 时间:2024/06/06 02:32
#!/usr/bin python2.6# -*- coding: utf-8 -*-import threading, datetime, timeimport logging# close output that lower than errorlogging.getLogger("scapy.runtime").setLevel(logging.ERROR)from scapy.all import *# 初始最大并发数START_THEAD_COUNT = 10# 递增并发数THREAD_INCREASE_STEP = 10# 域名DOMAIN = 'www.baidu.com'# 默认http请求METHOD = 'get'# 请求发送间隔 整数INTERVAL = 10  # 5秒# 每个请求的超时TIMEOUT = 5SRC_IP = ['172.29.165.34',          '172.29.165.35',          '172.29.165.36',          '172.29.165.37']'''Factory'''class biz :    '''Main'''    def run(self) :        start = datetime.datetime.now()        global FAILED_COUNT        FAILED_COUNT = 0        threads = []        src_ip_upper_limit = len(SRC_IP) - 1                # thread instance initialization        for i in range(START_THEAD_COUNT) :            src = SRC_IP[random.randint(0, src_ip_upper_limit)]            t=threading.Thread(target=self.execute, args=(src, ))            threads.append(t)        # activate threads        for i in range(START_THEAD_COUNT) :            threads[i].start()        # wait for all ends        for i in range(START_THEAD_COUNT) :            threads[i].join()        delta = datetime.datetime.now() - start        writeline('INFO', 'Totally \'' + str(START_THEAD_COUNT) + '\' http requests has been sent in ' + str(delta.seconds) + str(delta.microseconds / 1000) + 'ms.')        # writeline('INFO', 'Total is \'' + str(START_THEAD_COUNT) + '\' while failed \'' + str(FAILED_COUNT) + '\' in ' + str(delta.seconds) + str(delta.microseconds / 1000) + 'ms.')        return (True, None)    '''Execute http request and get response status'''    def execute(self, src) :        global FAILED_COUNT                sr(IP(dst = DOMAIN, src = src) / TCP(dport = 80), timeout = TIMEOUT, verbose = 0)        # if unans : FAILED_COUNT = FAILED_COUNT + 1'''Log writer'''def writeline(status, msg) :    line = time.strftime('%Y-%m-%d %X', time.localtime(time.time())) + ' [' + status + '] ' + msg    print line    return (True, line)if __name__ == '__main__' :    o = biz()    while True :        r, c = o.run()        if not r : writeline('FAILED-', c)                time.sleep(INTERVAL)                # update max threads        START_THEAD_COUNT = START_THEAD_COUNT + THREAD_INCREASE_STEP

0 0