如何利用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需要跟随crt等参数。

注:

参数 含义
-c 总的并发数量
-r 指定并发加压速率(每秒多少个用户)
-t 测试时间,30s1m1h
--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对服务器的接口进行压力测试相关推荐

  1. 【总结】个人推荐的接口测试工具和接口性能/压力测试工具

    一般接口有2种测试,现在很多是模糊了这个,但是如果细分.一般还要写<接口测试用例>和<接口性能测试用例>.同样,也分接口测试报告和接口性能测试报告. 接口的本质及其工作原理 接 ...

  2. 支付系统接口性能压力测试TPS优化之路

    支付系统接口性能压力测试TPS优化之路 郭柏雅 本文案例是我们品课学院在银行系统性能测试第一个案例,由发生至解决,通过对业务逻辑的认知.测试环境的了解.测试脚本的开发.服务的监控分析优化.操作系统的监 ...

  3. 使用COSBench工具对ceph s3接口进行压力测试--续

    之前写的使用COSBench工具对ceph s3接口进行压力测试是入门,在实际使用是,配置内容各不一样,下面列出 压力脚本是xml格式的,套用UserGuide文档说明,如下 有很多模板的例子,在co ...

  4. NHibernate+WCF项目实战(四)使用WAS对Webservices接口进行压力测试

    NHibernate+WCF项目实战 第一篇.项目介绍与搭建: 第二篇.使用NHibernate实现数据访问并进行单元测试: 第三篇.使用WCF对外提供Webservices接口并进行单元测试: 第四 ...

  5. 如何使用Jmeter对HTTP接口进行压力测试?

    我们不应该仅仅局限于某一种工具,性能测试能使用的工具非常多,选择适合的就是最好的.笔者已经使用Loadrunner进行多年的项目性能测试实战经验,也算略有小成,任何性能测试(如压力测试.负载测试.疲劳 ...

  6. 从零开始自制实现WebServer(十八)---- 对服务器做最后的压力测试 WebBench压测小工具 项目迎来终章

    文章目录 全流程实现博客链接 前引 (十八)---- 对服务器做最后的压力测试 WebBench压测小工具 项目迎来终章 1.正确处理Vmware-Station 处理器设置(初步调试过程) 2.正确 ...

  7. Jmeter做接口的压力测试

    章节一压力测试课程介绍 1.2018年亿级流量压测系列之Jmeter4.0课程介绍和效果演示 简介: 讲解课程安排,使用的Jmeter版本 讲课风格:涉及的组件,操作配置多,不会一次性讲解,会先讲部分 ...

  8. 后端开发都应该了解点接口的压力测试(Apache Bench版)

    背景 小A:小B,最近调你的接口老是超时呀,8秒都还没返回结果,是不是有性能问题呀! 小B :我看看~~ 类似这样的对话,在现实中是时有发生的,不是特别严重的话,往往大家也不会去重视这个事. 尤其是在 ...

  9. 【Python】案例介绍Pytest进行压力测试

    在现代Web应用程序中,性能是至关重要的.为了确保应用程序能够在高负载下正常运行,我们需要进行性能测试. 今天,应小伙伴的提问, 田辛老师来写一个Pytest进行压力测试的简单案例. 这个案例的测试网 ...

  10. 使用 WRK 压力测试工具对 ASP.NET Core 的接口进行压力测试

    0. 简要介绍 WRK 是一款轻量且易用的 HTTP 压力测试工具,通过该工具我们可以方便地对我们所开发的 WebAPI 项目进行压力测试,并且针对测试的情况返回结果. PS:Wrk 并不能针对测试的 ...

最新文章

  1. Learning OpenCV Lecture 5 (Filtering the Images)
  2. mysql datetime转date_一个MySQL时间戳精度引发的血案
  3. 党在心中(turtle画图)
  4. 2017年5个网络行业快速发展技术趋势
  5. 计算机网络的网络层功能在内完成,计算机网络习题及答案
  6. 蓝桥杯真题-连号区间数-枚举
  7. nodejs后端使用art-template
  8. 刚来公司时我却做了一件最傻的事
  9. Android应用程序安装过程源代码分析(2)
  10. SAR图像的统计信息
  11. 为什么要考华为云认证?有什么用?
  12. 如何解决vue项目本地ip地址无法访问项目问题?【亲测有效】
  13. 英特尔 11 代酷睿桌面酷睿 i9-11900K登场
  14. JAVA 导出大批量数据EXCEL
  15. 虚拟机中的ubuntu怎么设置1920X1080分辨率
  16. 争议不断的AI绘画,靠啥成为了顶流?
  17. 多种方法解决计算机程序中出现.DLL文件丢失的问题
  18. 对数线性模型(Log-Linear Model)一种判别式模型的创建框架
  19. Underlying cause: java.io.IOException : Schema script failed, errorcode 2
  20. gt,gte,lt,lte缩写代表的意思

热门文章

  1. 【敏捷2.2】极限编程XP
  2. JVM中的monitor
  3. 光环PMP 串讲课--项目整合管理
  4. 你的Android HTTPS真的安全吗?
  5. 在Ubuntu 18.04中安装ROS操作系统
  6. 能查阅国外文献的8个论文网站(最新整理)
  7. 【读书笔记】金字塔原理-构建金字塔的层级关系
  8. 434个H5游戏源码
  9. 中南大学计算机学院考研好考吗,中南大学or湖南大学:我考研选学校的心路历程...
  10. 手把手教你实现——Python文字(汉字)转语音教程,举一反三~