压力测试脚本,并发发送请求

2023-11-10

import base64
import os
import urllib
import numpy as np
import requests, time, json, threading, random

class Presstest(object):
    def __init__(self, press_url):
        self.press_url = press_url

    def test_interface(self):
        '''压测接口'''
        global INDEX
        INDEX += 1

        global ERROR_NUM
        global TIME_LENS
        try:
            start = time.time()
            file="./home"
            response_content = self.do_request(self.press_url, file)
            end = time.time()
            TIME_LENS.append(end - start)
            print('end')
        except Exception as e:
            print(e)
            ERROR_NUM += 1
            print(e)

    def test_onework(self):
        '''一次并发处理单个任务'''
        i = 0
        while i < ONE_WORKER_NUM:
            i += 1
            self.test_interface()
        time.sleep(LOOP_SLEEP)

    def do_request(self, url, file):

        count = 0

        dir_list = os.listdir(file)

        for i in dir_list:
            dir_name = i.split('.')

            if dir_name[-1] == "jpg" or dir_name[-1] == "png":
                with open(file + i, 'rb') as f:
                    data = f.read()
                    encoded_data = str(base64.b64encode(data), encoding='utf-8')
                    datas = {"imgdata": encoded_data}
                    start_time = time.time()
                    # r = requests.post(url, data)
                    requests.DEFAULT_RETRIES = 5  # 增加重试连接次数
                    s = requests.session()
                    s.keep_alive = False
                    r = requests.post(url, data=json.dumps(datas), headers={'Content-Type': 'application/json'},
                                    timeout=200)

                    text = json.loads(r.text)
                    end_time = time.time()
                    count += round(end_time - start_time, 3)
                print(i)
                print(round(end_time - start_time, 3))
                print(count)

    def run(self):
        '''使用多线程进程并发测试'''
        t1 = time.time()
        Threads = []

        for i in range(THREAD_NUM):
            t = threading.Thread(target=self.test_onework, name="T" + str(i))
            t.setDaemon(True)
            Threads.append(t)

        for t in Threads:
            t.start()
        for t in Threads:
            t.join()
        t2 = time.time()

        print("===============压测结果===================")
        print("URL:", self.press_url)
        print("任务数量:", THREAD_NUM, "*", ONE_WORKER_NUM, "=", THREAD_NUM * ONE_WORKER_NUM)
        print("总耗时(秒):", t2 - t1)
        print("每次请求耗时(秒):", (t2 - t1) / (THREAD_NUM * ONE_WORKER_NUM))
        print("每秒承载请求数:", 1 / ((t2 - t1) / (THREAD_NUM * ONE_WORKER_NUM)))
        # print("错误数量:", ERROR_NUM)
        print(INDEX)


if __name__ == "__main__":
    press_url = 'http://127.0.0.0:8080'
    TIME_LENS = []
    INDEX = 0
    THREAD_NUM = 5000 # 并发线程总数
    ONE_WORKER_NUM = 1 # 每个线程的循环次数
    LOOP_SLEEP = 0 # 每次请求时间间隔(秒)
    ERROR_NUM = 0 # 出错数
    obj = Presstest(press_url)
    obj.run()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

压力测试脚本,并发发送请求 的相关文章

随机推荐

  • 作为一个江苏人,我眼中的苏宁

    江苏人 人人都在苏宁电器的地面商店里买过东西 我也不例外 听说张近东要转让苏宁易购的股份给一家疑似国企或国有基金 作为一个地道的江苏人 感慨良多 中国有4个电商平台 天猫 京东 拼多多和苏宁易购 还有大商 国美什么 已经彻底掉队 暂且不提
  • 推荐你个软件 TDengine

    推荐你个软件 https github com taosdata TDengine 时序数据库 效率非常高 https constd com 2019 07 26 tdengine doc https www taosdata com cn
  • Linux 桌面虚拟化技术 KVM

    KVM 是 Kernel based Virtual Machine 的简称 是一个开源的系统虚拟化模块 自Linux 2 6 20之后集成在Linux的各个主要发行版本中 它使用Linux自身的调度器进行管理 所以相对于Xen 其核心源码
  • Easylogging介绍和简单使用

    一 Easylogging简介 Easyloggingpp是一个C 开源log库 其在github的地址 https github com muflihun easyloggingpp Easyloggingpp最大的特点是只需一个头文件
  • 最全面计算机英语单词列表(四)

    作为一名开发者 不管是自己写代码还是阅读英文文档 英语水平对于开发进度有很大的影响 业余时间简单整理了计算机开发中常见的英语单词 不限于前端开发 再此和朋友们分享 单词较多 为了阅读体验良好分成几个部分 下面是其他部分的链接 最全面计算机英
  • go get 与git clone的区别

    一直对go get 和git clone 区别不开 go get 的参数说明 d 只下载不安装 f 只有在你包含了 u参数的时候才有效 不让 u去验证import中的每一个都已经获取了 这对于本地fork的包特别有用 fix 在获取源码之后
  • 布局优化之ViewStub原理

    1 概述 在进行Android程序开发时 除了要实现基本功能外 还要关注应用的性能 内存占用少 程序稳定 响应速度快等 懒加载 就是为了让程序尽可能快地启动而提出的一个优化策略 即让那些对用户不重要或者不需要立即显示的布局控件做延迟加载 只
  • Linux下进程与多线程之间的共享资源

    在Linux 下 程序或可执行文件是一个静态的实体 它只是一组指令的集合 没有执行的含义 进程是一个动态的实体 有自己的生命周期 线程是操作系统进城调度器可以执行的最小执行单元 同一个进程中的各个线程都有自己独立的线程ID 用来标识线程 如
  • 使用jsPlumb制作流程图设计器

    jsPlumb是一个比较强大的绘图组件 它提供了一种方法 主要用于连接网页上的元素 在现代浏览器中 它使用SVG或者Canvas技术 而对于IE8以下 含IE8 的古董浏览器 则使用VML技术 项目主页 http jsplumbtoolki
  • PCL 常用小知识

    目录 零 保存点云 一 时间计算 二 已知需要保存点的索引 从原点云中拷贝点到新点云 三 删除无效点 四 pcl PointCloud Ptr和pcl PointCloud的两个类相互转换 五 计算点云中心点 六 将vector型索引转换成
  • scikit-learn 逻辑回归--调参

    代码笔记 from sklearn linear model import LogisticRegression as LR from sklearn datasets import load breast cancer import nu
  • CTFshow web15

    ctf show 萌新模块 web15关 这一关是代码执行漏洞 需要灵活的运用PHP的命令执行函数 在上一关的基础上又过滤了 gt 关键字 看起来已经没啥思路了 但仔细一看 它居然取消了对分号 的过滤 这样一来就好办了 继续上一关的曲线救国
  • IDEA中打jar包的方式

    在讲这两种方式之前 我们先来说明一下什么是java中的jar文件 jar Java Archive File 翻译过来就是java的档案文件 它其实也类似于我们windows下的zip文件 唯一的区别就是在 JAR 文件的内容中 包含了一个
  • opencv学习--图像处理基础

    将图片处理为灰度图 import os import re import cv2 from PIL import Image import numpy as np import matplotlib pylab as pylab img c
  • css公共样式总结(持续总结)

    flex display flex align center align items center justify between justify content space between justify center justify c
  • java基础(一)-虚拟机和第一个命令

    虚拟机 用 Java 语言编写的程序由 Java 虚拟机 JVM 来执行 JVM 是一个特殊的程序 它知道如何执行用 Java 语言编写的程序 并且它的命令列表涵盖范围很大 比如 System out println 你以为我会说虚拟机是由
  • WebGL简介

    WebGL简介 前言 1 WebGL简介 1 1 WebGL概述 1 2 WebGL程序的结构 1 3 WebGL和OpenGL 2 着色器语言 2 1 顶点着色器 2 2 片元着色器 3 webGL绘制一个点 4 webGL渲染过程 前言
  • 模板类的特例化(具体化)

    模板的基础知识 模板的实例化 模板并不是真正的函数或类 它仅仅是编译器用来生成函数或类的一张 图纸 模板不会占用内存 最终生成的函数或者类才会占用内存 由模板生成函数或类的过程叫做模板的实例化 相应地 针对某个类型生成的特定版本的函数或类叫
  • 【Flask学习】2.1模板之渲染

    1 模板概念 观察之前的demo程序 1个视图函数的响应是诸如 h1 Hello everyone h1 的html文本 但是常规的视图函数一般经过业务逻辑处理 再生成响应返回给客户端 这两个过程叫做业务逻辑和表现逻辑 目前来看 demo中
  • 压力测试脚本,并发发送请求

    import base64 import os import urllib import numpy as np import requests time json threading random class Presstest obje