如何利用Python对服务器的接口进行压力测试
如何利用Python对服务器的接口进行压力测试
我们都知道在服务器提供服务的过程中,不免因为流量的增加导致服务器的提供服务性能下降,因此需要对服务器进行升级,通过有针对性的测试,对延迟非常严重的接口进行升级,比如增加缓存、增大线程池或者重写服务。
在升级的过程中怎样验证服务器的升级效果呢?
这篇文章会利用locust
这个包对服务器的接口进行压力测试,你可以学到:
- 如何利用Python进行压力测试
- 如何对不同的接口分配流量权重
- 如何自动生成测试代码
Locust压测框架
总之locust是非常好用、简单的测试工具。
如何使用
导入包
from locust import HttpUser, task
import os
新建类-PressureStart
class PressureStart(HttpUser):min_wait = 100 # 最小等待时间(ms),模拟用户在执行每个任务之间等待的最小时间max_wait = 500 # 最大等待时长(ms),模拟用户在执行每个任务之间等待的最大时长host = "http://localhost:18813" # 访问的域名和端口def on_start(self):# 开始任务print("start working")
新建任务@Task
@task(1)def acCheck_acCheckDetails(self): header = {"Content-Type": "application/json"}data = '{"applianceId": 17592196255061}'self.client.post('/acCheck/acCheckDetails', data=data, headers=header)
注:@Task
是任务注解,其中1
表示这个接口的访问流量的权重,header
是数据格式,data
是数据,/acCheck/acCheckDetails
是接口。
在服务器中项目会提供很多的接口,因此会有多个task
:
@task(23)def deviceinfo_deleteHeadImg(self):header = {"Content-Type": "application/json"}data = '{"userId":123,"appId":123123, "deviceId":"111"}'self.client.post('/deviceinfo/deleteHeadImg', data=data, headers=header)@task(5)def deviceinfo_get(self):header = {"Content-Type": "application/json"}data = '{"userId":123,"appId":123123}'self.client.post('/deviceinfo/get', data=data, headers=header)@task(1)def region_get(self):header = {"Content-Type": "application/json"}data = '{"appId":"123","userEmail":"123456", "regionCode":"84001002"}'self.client.post('/deviceinfo/oversea/app/region/get', data=data, headers=header)
如何运行
if __name__ == '__main__':os.system("locust -f pressure_start.py --no-web -c 20 -r 20 -t 100s --csv=example --loglevel=INFO --logfile=test.log --host=http://localhost:18813")
本地可以采用web
的方式,可在网页端输入总的并发数量和每秒递增的线程数量,在服务器上运行采用no-web的方式,no-web
需要跟随c
、r
、t
等参数。
注:
参数 | 含义 |
---|---|
-c | 总的并发数量 |
-r | 指定并发加压速率(每秒多少个用户) |
-t |
测试时间,30s 、1m 、1h
|
--csv:保存运行结果
--loglevel:日志等级
--logfile:日志文件
--host:域名
运行方式:
python ***.py
运行结果
如何自动化生产task代码
一个项目不免有好几十个接口,怎样自动生产测试task
呢?
import pandas as pddef get_uri_data():uri_data_values = pd.read_excel('./pressure_uri.xlsx', usecols=[0, 1], names=None, sheet_name='Sheet1')uri_data_list = uri_data_values.values.tolist()result = []uri_len = len(uri_data_list)for i in range(uri_len):result.append("@task(1)\n")str1 = str(uri_data_list[i][0])chs = str1.split('/')title = chs[len(chs) - 2] + "_" + chs[len(chs) - 1]result.append("def " + title + "(self):\n\t")result.append("header={\"Content-Type\": \"application/json\"}\n\t")data = "\'" + uri_data_list[i][1].replace(u'\xa0', '') + "\'"result.append("data=" + data + "\n\t")result.append('self.client.post(' + '\'' + str1 + '\'' + ', data=data, headers=header)')result.append("\n\n")print(result)# result.clear()with open('./result_code_create.txt', 'w', encoding='utf-8') as f:f.writelines(result)
注:在pressure_uril.xlsx
中填写接口名和数据即可。
结果可保存到result_code_create.txt
文件中。
欢迎指教
如何利用Python对服务器的接口进行压力测试相关推荐
- 【总结】个人推荐的接口测试工具和接口性能/压力测试工具
一般接口有2种测试,现在很多是模糊了这个,但是如果细分.一般还要写<接口测试用例>和<接口性能测试用例>.同样,也分接口测试报告和接口性能测试报告. 接口的本质及其工作原理 接 ...
- 支付系统接口性能压力测试TPS优化之路
支付系统接口性能压力测试TPS优化之路 郭柏雅 本文案例是我们品课学院在银行系统性能测试第一个案例,由发生至解决,通过对业务逻辑的认知.测试环境的了解.测试脚本的开发.服务的监控分析优化.操作系统的监 ...
- 使用COSBench工具对ceph s3接口进行压力测试--续
之前写的使用COSBench工具对ceph s3接口进行压力测试是入门,在实际使用是,配置内容各不一样,下面列出 压力脚本是xml格式的,套用UserGuide文档说明,如下 有很多模板的例子,在co ...
- NHibernate+WCF项目实战(四)使用WAS对Webservices接口进行压力测试
NHibernate+WCF项目实战 第一篇.项目介绍与搭建: 第二篇.使用NHibernate实现数据访问并进行单元测试: 第三篇.使用WCF对外提供Webservices接口并进行单元测试: 第四 ...
- 如何使用Jmeter对HTTP接口进行压力测试?
我们不应该仅仅局限于某一种工具,性能测试能使用的工具非常多,选择适合的就是最好的.笔者已经使用Loadrunner进行多年的项目性能测试实战经验,也算略有小成,任何性能测试(如压力测试.负载测试.疲劳 ...
- 从零开始自制实现WebServer(十八)---- 对服务器做最后的压力测试 WebBench压测小工具 项目迎来终章
文章目录 全流程实现博客链接 前引 (十八)---- 对服务器做最后的压力测试 WebBench压测小工具 项目迎来终章 1.正确处理Vmware-Station 处理器设置(初步调试过程) 2.正确 ...
- Jmeter做接口的压力测试
章节一压力测试课程介绍 1.2018年亿级流量压测系列之Jmeter4.0课程介绍和效果演示 简介: 讲解课程安排,使用的Jmeter版本 讲课风格:涉及的组件,操作配置多,不会一次性讲解,会先讲部分 ...
- 后端开发都应该了解点接口的压力测试(Apache Bench版)
背景 小A:小B,最近调你的接口老是超时呀,8秒都还没返回结果,是不是有性能问题呀! 小B :我看看~~ 类似这样的对话,在现实中是时有发生的,不是特别严重的话,往往大家也不会去重视这个事. 尤其是在 ...
- 【Python】案例介绍Pytest进行压力测试
在现代Web应用程序中,性能是至关重要的.为了确保应用程序能够在高负载下正常运行,我们需要进行性能测试. 今天,应小伙伴的提问, 田辛老师来写一个Pytest进行压力测试的简单案例. 这个案例的测试网 ...
- 使用 WRK 压力测试工具对 ASP.NET Core 的接口进行压力测试
0. 简要介绍 WRK 是一款轻量且易用的 HTTP 压力测试工具,通过该工具我们可以方便地对我们所开发的 WebAPI 项目进行压力测试,并且针对测试的情况返回结果. PS:Wrk 并不能针对测试的 ...
最新文章
- Learning OpenCV Lecture 5 (Filtering the Images)
- mysql datetime转date_一个MySQL时间戳精度引发的血案
- 党在心中(turtle画图)
- 2017年5个网络行业快速发展技术趋势
- 计算机网络的网络层功能在内完成,计算机网络习题及答案
- 蓝桥杯真题-连号区间数-枚举
- nodejs后端使用art-template
- 刚来公司时我却做了一件最傻的事
- Android应用程序安装过程源代码分析(2)
- SAR图像的统计信息
- 为什么要考华为云认证?有什么用?
- 如何解决vue项目本地ip地址无法访问项目问题?【亲测有效】
- 英特尔 11 代酷睿桌面酷睿 i9-11900K登场
- JAVA 导出大批量数据EXCEL
- 虚拟机中的ubuntu怎么设置1920X1080分辨率
- 争议不断的AI绘画,靠啥成为了顶流?
- 多种方法解决计算机程序中出现.DLL文件丢失的问题
- 对数线性模型(Log-Linear Model)一种判别式模型的创建框架
- Underlying cause: java.io.IOException : Schema script failed, errorcode 2
- gt,gte,lt,lte缩写代表的意思