利用python实现性能测试工具
创始人
2024-11-17 12:01:09
0次

性能工具的核心就是 并发 和 请求。

请求可以选择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)和参数。

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

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

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...