python 写一个性能测试工具(一)

 更新时间:2020年10月24日 10:59:07   作者:虫师  
这篇文章主要介绍了利用python 写一个性能测试工具,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下

国庆重新学习了一下go的gin高性能测试框架。

用JMeter来测试gin与flask接口的性能,差别很大。

为什么我自己不尝试写一个性能工具,性能工具的核心就是 并发 和 请求。

请求可以选择Python的requests库。

并发可以通过python的 进程、线程、协程模拟。

这么一想,也不是很难了,上手撸一个。

依赖库

requests==2.22.0
gevent==20.9.0
numpy==1.19.2

requests 大家并不陌生,HTTP请求库。

gevent是python协程库,通过协程模拟并发更节省资源,在同样配置下能模拟更多的并发。

numpy 是python的数据计算库,提供大量组数和矩阵运算,这里用它求列表的平均值。

实现脚本

好了,接下来开始上手写代码了。

from __future__ import print_function
import time
import gevent
from gevent import monkey
monkey.patch_all()

import requests
from numpy import mean


users = 10 # 用户数
numbers = 100 # 请求次数
req_url = "http://127.0.0.1:8080/user/tom" # 请求URL

print("请求URL: {url}".format(url=req_url))

print("用户数:{},循环次数: {}".format(users, numbers))

print("============== Running ===================")

pass_number = 0
fail_number = 0

run_time_list = []

def running(url):
  global fail_number
  global pass_number
  for _ in range(numbers):
    start_time = time.time()
    r = requests.get(url)
    if r.status_code == 200:
      pass_number = pass_number + 1
      print(".", end="")
    else:
      fail_number = fail_number + 1
      print("F", end="")

    end_time = time.time()
    run_time = round(end_time - start_time, 4)
    run_time_list.append(run_time)


jobs = [gevent.spawn(running, req_url) for _url in range(users)]
gevent.wait(jobs)

print("\n============== Results ===================")
print("最大:    {} s".format(str(max(run_time_list))))
print("最小:    {} s".format(str(min(run_time_list))))
print("平均:    {} s".format(str(round(mean(run_time_list), 4))))
print("请求成功", pass_number)
print("请求失败", fail_number)
print("============== end ===================")

设计思路

在JMeter中创建线程组有两个参数 线程数和 循环数,即 用户数 和请求数,设置多少个用户,每个用户用户跑多少次,用户数通过协程模拟,每次用户运行次数通过for循环实现。

至于请求就比较简单了,直接通过requests发送请求。通过判断影响的状态码是否为200来判断是否成功,通过分别计算成功和失败的请求个数。

关于请求时间统计,在每次请求前后获得当前时间戳,然后计算时间差就是单个接口的调用时间。最大,最小,平均通过计算就可轻松的得到。

> python3 ab.py

请求URL: http://127.0.0.1:8080/user/tom
用户数:10,循环次数: 100
============== Running ===================
...............................................................................................................
...............................................................................................................
...............................................................................................................
...............................................................................................................
...............................................................................................................
...............................................................................................................
...............................................................................................................
...............................................................................................................
...............................................................................................................
.
============== Results ===================
最大:    0.0352 s
最小:    0.0036 s
平均:    0.0204 s
请求成功 1000
请求失败 0
============== end ===================

后续

把ab.py脚本做成 ab 命令行工具。

支持更多的请求类型(get/post/put/delete)和参数。

更多统计维度,吞吐量、吞吐率

增加启动时间,思考时间等

...

以上就是python 写一个性能测试工具(一)的详细内容,更多关于python 性能测试工具的资料请关注脚本之家其它相关文章!

相关文章

  • python对DICOM图像的读取方法详解

    python对DICOM图像的读取方法详解

    DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信,是医学图像和相关信息的国际标准(ISO 12052)。下面这篇文章主要给大家介绍了关于python对DICOM图像读取的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • python suds访问webservice服务实现

    python suds访问webservice服务实现

    这篇文章主要介绍了python suds访问webservice服务实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-06-06
  • Python常用模块介绍

    Python常用模块介绍

    这篇文章主要介绍了Python常用模块介绍,本文罗列了如python运行时服务、数学、数据结构、算法和代码简化、string 和 text 处理、python数据库访问等模块,需要的朋友可以参考下
    2014-11-11
  • 使用pyecharts生成Echarts网页的实例

    使用pyecharts生成Echarts网页的实例

    今天小编就为大家分享一篇使用pyecharts生成Echarts网页的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python基础之语法错误和异常详解

    Python基础之语法错误和异常详解

    Python有两种错误很容易辨认:语法错误和异常.本文就给大家详细介绍一下Python错误和异常,对正在学习python的小伙伴们很有帮助哦,需要的朋友可以参考下
    2021-05-05
  • Pycharm sqllite连接使用教程

    Pycharm sqllite连接使用教程

    SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎,这篇文章主要介绍了Pycharm连接sqllite的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • python解析命令行参数的三种方法详解

    python解析命令行参数的三种方法详解

    这篇文章主要介绍了python解析命令行参数的三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • PyTorch的SoftMax交叉熵损失和梯度用法

    PyTorch的SoftMax交叉熵损失和梯度用法

    今天小编就为大家分享一篇PyTorch的SoftMax交叉熵损失和梯度用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 使用python 打开文件并做匹配处理的实例

    使用python 打开文件并做匹配处理的实例

    今天小编就为大家分享一篇使用python 打开文件并做匹配处理的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python pysnmp使用方法及代码实例

    Python pysnmp使用方法及代码实例

    这篇文章主要介绍了Python pysnmp使用方法及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08

最新评论