Python实现多线程并发请求测试的脚本

 更新时间:2023年06月20日 09:46:20   作者:一夜奈何梁山  
这篇文章主要为大家分享了一个Python实现多线程并发请求测试的脚本,文中的示例代码简洁易懂,具有一定的借鉴价值,需要的小伙伴可以了解一下

一: 需求

今天接到一个需求, 要对线上环境进行并发请求测试。 请求方式可以是两种一种是发送HTTP请求, 一种是发送MESH请求。

测试达到的效果

1: 通过测试检测网关, 引擎的内存, CPU消耗, 负载等。

2: 通过批量测试, 检测引擎规则是否有异常。

3: 通过测试, 发现单请求最短耗时和最长耗时。

二:测试脚本

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time   : 2022/12/5 10:57 AM
import json
import time
import requests
import click
import pandas as pd
from concurrent.futures import ThreadPoolExecutor
from xylib.lib.http import mesh_http_path

mesh_appid = "XXXXXXX"
mesh_request_path = "XXXXXXXX"
http_request_url = "http://127.0.0.1:8888/xxxxx/xxxx"


def read_csv(file_name, test_num):
    """读取CSV文件"""
    res_datas = []
    df = pd.read_csv(file_name)
    index, column = df.shape
    for idx in range(0, index):
        params = df.loc[idx].to_dict()
        res_datas.append(params)
    return res_datas[:test_num]


def send_request(input_msg, request_type):
    request_data = {
        "xxxxx": 2,
        "xxxxxx": "oooooooo",
        "xxxxxxx": {
            "xxxxxxxx": str(input_msg.get("aaaa", "0000")),
            "xxxxxx": int(input_msg.get("bbbbb", 50)),
            "xxxxx": int(input_msg.get("ccccc", 48)),
            "xxxxxxxxxx": str(input_msg.get("dddddd", "")),
        }
    }
    if request_type == "http":
        res = requests.post(http_request_url, data=json.dumps(request_data))
    else:
        res = mesh_http_path(
            mesh_appid,
            mesh_appid,
            mesh_request_path,
            'POST',
            data=json.dumps(request_data)
        )
    result = dict()
    try:
        result = json.loads(res)
    except Exception as e:
        print("error is {}".format(e.message))
    input_msg["xdxaxaxa"] = result.get("xaxx", {}).get("xaxsaxs", {}).get("xaxaxsx", "")
    input_msg["xaxaxs"] = result.get("xaxsxs").get("xaxsaxs", {}).get("xsaxsaxsax", "")
    return input_msg


def threading_test(input_datas, pool_num, req_type):
    """多线程并发测试"""
    out_put_datas = []
    futures = []
    start_time = time.time()
    try:
        with ThreadPoolExecutor(max_workers=pool_num) as executor:
            for input_data in input_datas:
                futures.append(executor.submit(send_request, (input_data, req_type)))
        for future in futures:
            out_put_datas.append(future.result())
    except Exception as e:
        print("error is {}".format(e.message))
    finally:
        end_time = time.time()
        print("cost time is %s" % str(end_time - start_time))
    return out_put_datas


def write_to_csv(out_put_datas, out_file_name):
    """写入到csv文件中"""
    rdf = pd.DataFrame(out_put_datas)
    rdf.to_csv(out_file_name)


@click.command()
@click.option('--req_type', default="http", help='You need input http or mesh')
@click.option('--pool_num', default=80, help='You need input a num')
@click.option('--test_num', default=1000000, help='You need input a num')
@click.option('--file_name', default="hy.csv", help='You need input a file name')
@click.option('--out_file_name', default="result.csv", help='You need input a file name')
def run(req_type, pool_num, test_num, file_name, out_file_name):
    """主运行函数"""
    # 读取测试需要用的CSV文件内容, test_num限制测试数据数量
    res_datas = read_csv(file_name=file_name, test_num=test_num)
    # 进行并发请求测试
    out_put_datas = threading_test(input_datas=res_datas, pool_num=pool_num, req_type=req_type)
    # 测试结果写入到CSV文件中
    write_to_csv(out_put_datas=out_put_datas, out_file_name=out_file_name)


if __name__ == '__main__':
    run()

到此这篇关于Python实现多线程并发请求测试的脚本的文章就介绍到这了,更多相关Python多线程并发测试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python利用paramiko实现交换机巡检的示例

    python利用paramiko实现交换机巡检的示例

    这篇文章主要介绍了python利用paramiko实现交换机巡检,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-09-09
  • 详解python如何提取浏览器中保存的网站登录用户名密码

    详解python如何提取浏览器中保存的网站登录用户名密码

    很多浏览器都贴心地提供了保存用户密码功能,用户一旦开启,就不需要每次都输入用户名、密码,非常方便,作为python脚本,能否拿到用户提前保存在浏览器中的用户名密码,用以自动登录呢,下面我们就来看看吧
    2023-08-08
  • selenium2.0中常用的python函数汇总

    selenium2.0中常用的python函数汇总

    这篇文章主要介绍了selenium2.0中常用的python函数,总结分析了selenium2.0中常用的python函数的功能、原理与基本用法,需要的朋友可以参考下
    2019-08-08
  • Python中._pth文件的作用及说明

    Python中._pth文件的作用及说明

    这篇文章主要介绍了Python中._pth文件的作用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 利用Opencv中Houghline方法实现直线检测

    利用Opencv中Houghline方法实现直线检测

    这篇文章主要为大家详细介绍了利用Opencv中的Houghline方法进行直线检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 使用BeeWare实现iOS调用Python方式

    使用BeeWare实现iOS调用Python方式

    这篇文章主要介绍了使用BeeWare实现iOS调用Python方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Python中的re正则表达式模块

    Python中的re正则表达式模块

    这篇文章介绍了Python中的re正则表达式模块,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • flask中主动抛出异常及统一异常处理代码示例

    flask中主动抛出异常及统一异常处理代码示例

    这篇文章主要介绍了flask中主动抛出异常及统一异常处理代码示例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • python实现图片横向和纵向拼接

    python实现图片横向和纵向拼接

    这篇文章主要为大家详细介绍了python实现图片横向和纵向拼接,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Python正则表达式实现截取成对括号的方法

    Python正则表达式实现截取成对括号的方法

    这篇文章主要介绍了Python正则表达式实现截取成对括号的方法,涉及Python正则匹配相关操作技巧,需要的朋友可以参考下
    2017-01-01

最新评论