文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python多线程http压力测试脚本

2023-01-31 04:00

关注
#coding=utf-8

import sys
import time
import thread
import httplib, urllib
import random
import uuid
import logging
logging.basicConfig(level=logging.DEBUG,
                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                datefmt='%a, %d %b %Y %H:%M:%S',
                filename='测试脚本日志.log',
                filemode='w')

def log_uncaught_exceptions(exception_type, exception, tb):
    logging.critical(''.join(traceback.format_tb(tb)))
    logging.critical('{0}: {1}'.format(exception_type, exception))
sys.excepthook = log_uncaught_exceptions

#网关地址
addr="172.18.2.4"
port=8080
thread_count = 15 #单次并发数量
requst_interval = 10 #请求间隔(秒)
test_count = sys.maxsize #sys.maxsize  # 指定测试次数


#字段说明,必须一一对应
#login为空表示使用随机用户名

param_list=[
{"login":"user1","password":"qweqwe12"},
]

now_count = 0
lock_obj = thread.allocate()
def send_http():
    global now_count
    httpClient = None
    try:
        for user in user_list:
            tmp_user = user["login"]
            if tmp_user.strip() =='':
                tmp_user = str(uuid.uuid1()) + str(random.random())
            print tmp_user
            params = urllib.urlencode({"operationData":
                        [{"login": tmp_user,"password":user["password"]}]})
            headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}

            httpClient = httplib.HTTPConnection(addr, port, timeout=5)
            httpClient.request("POST", "/simple/spider.task.distribute", params, headers)

            response = httpClient.getresponse()
            print '发送数据: ' + params
            print '返回码: ' + str(response.status)
            print '返回数据: ' + response.read()

            logging.info('发送数据: ' + params)
            logging.info('返回码: ' + str(response.status))
            logging.info('返回数据: ' + response.read())
            #print response.getheaders() #获取头信息
            sys.stdout.flush()
            now_count+=1
    except Exception, e:
        print e
        logging.info(e)
    finally:
        if httpClient:
            httpClient.close()

def test_func(run_count):
    global now_count
    global requst_interval
    global lock_obj
    cnt = 0
    while cnt < run_count:
        lock_obj.acquire()
        print ''
        print '***************************请求次数:' + str(now_count) + '*******************************'
        print 'Thread:(%d) Time:%s\n'%(thread.get_ident(), time.ctime())

        logging.info(' ')
        logging.info('***************************请求次数:' + str(now_count) + '*******************************')
        logging.info('Thread:(%d) Time:%s\n'%(thread.get_ident(), time.ctime()))
        cnt+=1
        send_http()
        sys.stdout.flush()
        lock_obj.release()
        time.sleep(requst_interval)

def test(ct):
    global thread_count
    for i in range(thread_count):
        thread.start_new_thread(test_func,(ct,))

if __name__=='__main__':
    global test_count
    test(test_count)
    while True:
        time.sleep(100)
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯