国庆重新学习了一下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(" ============== 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编写测试工具-python 写一个性能测试工具(一)相关推荐

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

    国庆重新学习了一下go的gin高性能测试框架. 用JMeter来测试gin与flask接口的性能,差别很大. 为什么我自己不尝试写一个性能工具,性能工具的核心就是 并发 和 请求. 请求可以选择Pyt ...

  2. 【python小项目】用python写一个小工具——番茄钟

    用python写一个小工具--番茄钟 最近听到朋友说在用番茄钟,有点兴趣也想下载一个来用用,后面仔细一想这玩意做起来也不难,索性自己顺手写一个算了,在这里也分享给大家了 一.功能简述 番茄钟即番茄工作 ...

  3. 用Python编写测试案例

    因为工作需要,需要用Python编写测试案例.接下来会记录在这期间遇到的一些问题和解决方法. Python Faker的使用(1):基础使用方法与函数速查 在软件需求.开发.测试过程中,有时候需要使用 ...

  4. Python:教你如何写一个测量网速的小工具

    hello,大家好,我是wangzirui32,今天我们来学习如何写一个测量网速的小工具,开始学习吧! 1. pip安装 这个项目主要依赖speedtest_cli模块,pip安装: pip inst ...

  5. python编写人工智能-用Python写一个中国象棋AI?

    /************************************************************** = 民间六子棋(六子冲)人机博弈引擎实现与教程 =** www.leil ...

  6. python写一个ssh工具_Python3制作简易SSH登录工具|python3教程|python入门|python教程

    https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 下载W3Cschool手机App,0基础随时随 ...

  7. python编写测试系统_纯 python 编写的一套 dubbo 测试平台

    因组织要求,需要一个Dubbo接口的测试工具,经多方研究,遂决定要写一个不需要编写任何代码,直接在页面上填写数据就能直接运行Dubbo接口的测试工具,类似于Postman编写http接口一样简单. 整 ...

  8. python自动测试p-python网络爬虫之自动化测试工具selenium[二]

    @ 前言 hello,大家好,在上章的内容里我们已经可以爬取到了整个网页下来,当然也仅仅就是一个网页. 因为里面还有很多很多的标签啊之类我们所不需要的东西. 额,先暂且说下本章内容,如果是没有丝毫编程 ...

  9. GitHub超3k星!从Python代码到APP只需要一个小工具~

    来源:机器之心 本文约2600字,建议阅读7分钟. 本文带你了解这款工具,在你写 Python 代码的时候,实时更新你的应用. 机器学习开发者想要打造一款 App 有多难?事实上,你只需要会 Pyth ...

最新文章

  1. iOS 中的事件传递和响应机制 - 实践篇
  2. VS2010Web默认的浏览器设置和VS里调试JavaScript代码的设置
  3. python-学习 协程函数 模块与包
  4. CSU-1975 机器人搬重物(BFS)
  5. MySQL 取得两个时间相差的分钟数 及 常用时间函数
  6. 全面总结Java泛型
  7. 2字段添加注释_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  8. atitit.数据验证--db数据库数据验证约束
  9. hibernate java内存一次能取多少条_Hibernate性能测试(load10000条记录的简单测试 仅供参考)(转)...
  10. ImportError: Missing required dependencies [‘pytz‘]
  11. WSO2学习笔记(一)
  12. 【信息系统项目管理师】论文素材大汇总
  13. IPV6 阿里DDNS
  14. 数据结构--逻辑结构
  15. Sqlserver 中的Iif语句
  16. 天池大数据竞赛第一名,上海交通大学人工智能实验室如何用AI定位肺结节
  17. Python字符串的转义字符
  18. android 地铁地图api,利用高德地图api绘制公交+地铁的等时圈
  19. 遇到问题---tomcat启动报错--startup failed due to previous errors
  20. CoffeeScript入门实践

热门文章

  1. 叶际微生物定殖模型研究进展
  2. python中matplotlib自定义设置图像标题使用的字体类型:获取默认的字体族及字体族中对应的字体、自定义设置图像标题使用的字体类型
  3. Python数据集可视化:抽取数据集的两个特征进行二维可视化、主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用)
  4. 巴菲特+查理芒格+投资理论+经典语录+给韭菜的启示
  5. 可视化神经网络的网络结构并保存
  6. java linux mysql数据库_Linux Java连接MySQL数据库
  7. MECAT:PC组装人的基因组
  8. linux ip rcv处理,linux ip选项处理(二)
  9. java中飞飞检查异常_Java复习6异常处理
  10. python 检测文件或文件夹是否存在