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(" ============== 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 写一个性能测试工具(一)相关推荐
- python 性能测试_python 写一个性能测试工具(一)
国庆重新学习了一下go的gin高性能测试框架. 用JMeter来测试gin与flask接口的性能,差别很大. 为什么我自己不尝试写一个性能工具,性能工具的核心就是 并发 和 请求. 请求可以选择Pyt ...
- 【python小项目】用python写一个小工具——番茄钟
用python写一个小工具--番茄钟 最近听到朋友说在用番茄钟,有点兴趣也想下载一个来用用,后面仔细一想这玩意做起来也不难,索性自己顺手写一个算了,在这里也分享给大家了 一.功能简述 番茄钟即番茄工作 ...
- 用Python编写测试案例
因为工作需要,需要用Python编写测试案例.接下来会记录在这期间遇到的一些问题和解决方法. Python Faker的使用(1):基础使用方法与函数速查 在软件需求.开发.测试过程中,有时候需要使用 ...
- Python:教你如何写一个测量网速的小工具
hello,大家好,我是wangzirui32,今天我们来学习如何写一个测量网速的小工具,开始学习吧! 1. pip安装 这个项目主要依赖speedtest_cli模块,pip安装: pip inst ...
- python编写人工智能-用Python写一个中国象棋AI?
/************************************************************** = 民间六子棋(六子冲)人机博弈引擎实现与教程 =** www.leil ...
- python写一个ssh工具_Python3制作简易SSH登录工具|python3教程|python入门|python教程
https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID:Charles(白露未晞)知乎个人专栏 下载W3Cschool手机App,0基础随时随 ...
- python编写测试系统_纯 python 编写的一套 dubbo 测试平台
因组织要求,需要一个Dubbo接口的测试工具,经多方研究,遂决定要写一个不需要编写任何代码,直接在页面上填写数据就能直接运行Dubbo接口的测试工具,类似于Postman编写http接口一样简单. 整 ...
- python自动测试p-python网络爬虫之自动化测试工具selenium[二]
@ 前言 hello,大家好,在上章的内容里我们已经可以爬取到了整个网页下来,当然也仅仅就是一个网页. 因为里面还有很多很多的标签啊之类我们所不需要的东西. 额,先暂且说下本章内容,如果是没有丝毫编程 ...
- GitHub超3k星!从Python代码到APP只需要一个小工具~
来源:机器之心 本文约2600字,建议阅读7分钟. 本文带你了解这款工具,在你写 Python 代码的时候,实时更新你的应用. 机器学习开发者想要打造一款 App 有多难?事实上,你只需要会 Pyth ...
最新文章
- iOS 中的事件传递和响应机制 - 实践篇
- VS2010Web默认的浏览器设置和VS里调试JavaScript代码的设置
- python-学习 协程函数 模块与包
- CSU-1975 机器人搬重物(BFS)
- MySQL 取得两个时间相差的分钟数 及 常用时间函数
- 全面总结Java泛型
- 2字段添加注释_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
- atitit.数据验证--db数据库数据验证约束
- hibernate java内存一次能取多少条_Hibernate性能测试(load10000条记录的简单测试 仅供参考)(转)...
- ImportError: Missing required dependencies [‘pytz‘]
- WSO2学习笔记(一)
- 【信息系统项目管理师】论文素材大汇总
- IPV6 阿里DDNS
- 数据结构--逻辑结构
- Sqlserver 中的Iif语句
- 天池大数据竞赛第一名,上海交通大学人工智能实验室如何用AI定位肺结节
- Python字符串的转义字符
- android 地铁地图api,利用高德地图api绘制公交+地铁的等时圈
- 遇到问题---tomcat启动报错--startup failed due to previous errors
- CoffeeScript入门实践
热门文章
- 叶际微生物定殖模型研究进展
- python中matplotlib自定义设置图像标题使用的字体类型:获取默认的字体族及字体族中对应的字体、自定义设置图像标题使用的字体类型
- Python数据集可视化:抽取数据集的两个特征进行二维可视化、主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用)
- 巴菲特+查理芒格+投资理论+经典语录+给韭菜的启示
- 可视化神经网络的网络结构并保存
- java linux mysql数据库_Linux Java连接MySQL数据库
- MECAT:PC组装人的基因组
- linux ip rcv处理,linux ip选项处理(二)
- java中飞飞检查异常_Java复习6异常处理
- python 检测文件或文件夹是否存在