python locust api_python_locust实现http接口性能测试

本文介绍了如何利用Python的Locust库进行HTTP接口的性能测试。内容包括Locust的基本概念、核心库、安装步骤、测试脚本编写、运行及问题解决,并提供了主从模式和no_web模式的命令示例。
摘要由CSDN通过智能技术生成

python_locust实现http接口性能测试

python_locust实现http接口性能测试

locust官方API文档:https://docs.locust.io/en/stable/api.html

locust简介

开源

python开发

基于事件

支持分布式

Web UI 执行测试 / 结果展示

性能测试工具

locust使用的核心库

gevent:基于协程的python网络库,它使用greenlet在libev或libuv事件循环之上提供高级同步API

flask:是一个微型的Python开发的Web框架

requests:Python Http库

msgpack-python:主要提供MessagePack数据序列化及反序列化的方法

pyzmq:用来实现Locust的分布式模式运行

Locust压测组件图

573bc1df8facaba8b9b98de9ec87f0f8.png

主流压测工具对比

e32896c53026185614dd791fab5461c6.png

安装locust

安装命令

pip install locust

e404e2d3ffa212eeb43fde915259c4ed.png

查看版本命令

locust --version

9309fec07d26006f884719ab30950e1d.png

编写测试脚本

打开pycharm --> 创建dept_list.py文件 --> 将以下脚本复制到文件中

from locust import HttpUser, TaskSet, task

import json

# 定义每个用户的任务集合

class DeptList(TaskSet):

# 任务A--GET示例

@task(7) # 权重 7/ 10

def t_login(self):

url = '/api/ip/ipdept/deptList'

h = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",

"Cookie": "sessionToken=2e183b7bb566461d"}

data = {'draw': '5',

'start': '0',

'length': '13',

'deptTypes': '[]',

'defunctInd': 'N',

'searchStr': 'FSK_01',

'_': '1597112917355'}

# catch_response =True:允许该请求被标记为失败

with self.client.get(url, headers=h, params=data, catch_response=True) as response:

if response.status_code == 200:

response.success()

# 任务B--POST示例

@task(3) # 权重 3/ 10

def t_query_dept(self):

url = '/api/ip/entity/save'

h = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",

"Content-Length": "355",

"Cookie": "sessionToken=6b67c3bfd60c4008"}

entity = {"ipEntityMstrId": 7233101,

"entityCode": "BLL1",

"entityDesc": "BLL2019",

"entityDescLang1": "BLL2019#",

"shortCode": "BLL",

"seqNo": "1",

"entityNameAlias": "BL",

"entityNameAlias1": "BL#",

"addressDetail": "详细地址111"}

body = {'entityInfo': json.dumps(entity)}

with self.client.post(url, headers=h, data=body, catch_response=True) as response:

if response.status_code == 200:

response.success()

# 继承Locust类

# 生成的每一个虚拟的HTTP用户

# 用来发送请求到进行负载测试的系统

class Login(HttpUser):

tasks = [DeptList]

# 权重

weight = 1

# 执行事务之间用户最小等待时间

min_wait = 1000

# 执行事务之间用户最大等待时间

max_wait = 3000

# 超时时间

stop_timeout = 5

host = "10.227.253.226:7000"

运行脚本文件

dept_list.py对应cmd命令窗口下执行以下命令

locust -f dept_list.py --host=http://10.227.253.226:7000

325db0da3258ad5b5cb38e7257bd6185.png

启动遇到的问题

1、导入HttpLocust,在运行时报

ImportError: The HttpLocust class has been renamed to HttpUser in version 1.0

解决办法:

将from locust import HttpLocust 修改成 from locust import HttpUser

2、运行时报

DeprecationWarning: Usage of User.task_set is deprecated since version 1.0. Set the tasks attribute instead (tasks = [DeptList])

解决办法:

将task_set = DeptList 修改成 tasks = [DeptList]

打开浏览器中,输入http://localhost:8089/

de5324a28d969f1ef5e025771e3cfa4d.png

页面参数说明:

Number of total users to simulate:要模拟的总用户数

Hatch rate (users spawned/second):每秒生成的用户数

Host (e.g. http://www.example.com):测试服务器地址

Start swarming:开始运行性能测试

查看测试结果

40d9ebcbe11c4b607983d2ad86f68cd3.png

工具栏参数说明:

HOST

http://10.227.253.226:7000:被测服务器地址

STATUS

RUNNING

10 users:运行10个虚拟用户

RPS

3.7:每秒请求数

FAILURES

0%:运行失败比例

STOP:停止

Reset Stats:重置统计信息

列表参数说明:

Type: 请求的类型,例如GET/POST

Name:请求的路径

request:当前请求的数量

fails:当前请求失败的数量

Median:中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值

Average:平均值,单位毫秒,所有请求的平均响应时间

Min:请求的最小服务器响应时间,单位毫秒

Max:请求的最大服务器响应时间,单位毫秒

Content Size:单个请求的大小,单位字节

reqs/sec:是每秒钟请求的个数

主从模式

启动mastr节点:locust -f dept_list.py --master

启动worker节点:locust -f dept_list.py --worker

在其他机器上启动worker节点:locust -f dept_list.py --worker --master-host=192.168.x.xx

740948c2853f0c8325f7aced97303613.png

38b8dfaf65263bd17f50c3297759a2ec.png

Host格式一定要正确,不然的话启动后会报:

raise InvalidSchema(“No connection adapters were found for ‘%s’” % url)

No connection adapters were found for ‘10.227.253.226:7000/api/ip/ipdept/deptList’

主从模式下测试结果

80d728c008da8c0de9861ce7e6bce42e.png

no_web模式命令

locust -f load_test.py --host=https://www.baidu.com --no-web -c 10 -r 2 -t 1m

–no-web: 表示不使用Web界面运行测试

-c:设置虚拟用户数

-r:设置每秒启动虚拟用户数

-t:设置设置运行时间

Locust web模式的性能监控和展示的明显缺陷:

1、rps、平均响应时间波动图没有持久化存储,刷新后便丢失

2、整体统计信息只是表格的形式,不能体现波动时序

3、测试报告过于简陋且只有文字版,只能下载存档

# Locust web模式的性能监控和展示优化解决方案

Locust + Prometheus + Grafana

参考:https://testerhome.com/topics/24873

python_locust实现http接口性能测试相关教程

panolens.js实现简单的全景预览

panolens.js实现简单的全景预览 1、下载js文件 (panolens.js 和 依赖插件 three.js) 1) threejs 下载地址https://threejs.org/ 2)panolens.js 下载地址https://github.com/pchen66/panolens.js 本人百度网盘整理地址: 链接:https://pan.baidu.com/s/1lxWX

exp3-挖矿的简易实现

exp3-挖矿的简易实现 文章目录 参考 挖矿 篡改 bilibili luotuo exp1-POW的简单实现 exp2-构造简单区块链 会有一个难度值,计算符合难度值要求的哈希字符串,比如说,难度值nonce = 1,就要找前面有1个0开头的哈希字符串 class Block { constructor(data,prev

SpringBoot下使用ShardingShere实现分表操作

SpringBoot下使用ShardingShere实现分表操作 SpringBoot下使用ShardingShere实现分表操作 表结构: 因为后面使用了雪花算法保证生成的id唯一性,所以id列设置为bigInt类型 项目结构: dependency groupIdorg.springframework.boot/groupId artifactIdspring-b

python实现 感知机(Perceptron)算法

python实现 感知机(Perceptron)算法 1. 感知机简介 神经网络如下图所示: 上图中每个圆圈都是一个神经元,每条线表示神经元之间的连接。我们可以看 到,上面的神经元被分成了多层,层与层之间的神经元有连接,而层内之间的 神经元没有连接。最左边的层叫做

内核epoll的实现原理及用户态epoll的设计思路

内核epoll的实现原理及用户态epoll的设计思路 1.思考 在tcp的编程接口socket,bind,connect,listen,accpect,recv,send,close这些中,哪些动作对方能感知到可以产生回调?connect,send,close,recv 2.何时回调epoll模块 1.三次握手成功时,会有一次回

单态设计模式的实现原来是构造方法的私有化

单态设计模式的实现原来是构造方法的私有化 我们知道类的封装可以对属性,也可以对方法。当然也可以 封装构造函数 。 为什么要封装构造函数!!?耐心点看过程,最后你就知道了 单态设计模式的核心就是将类的构造方法私有化,之后在类的内部产生实例化对象,

实现两个字符串获取两个指定字符串中的最大相同子串

实现两个字符串获取两个指定字符串中的最大相同子串 Java实现两个字符串获取两个指定字符串中的最大相同子串并打印出来 思路 图 代码 思路 取长度较小的字符串,取其长度依次递减的子字符串,再判断较长的字符串中是否包含此子字符串,第一次出现便为两字符串

vue实现的后台管理系统

vue实现的后台管理系统 vue后台管理系统 记录一次后台管理系统项目,需要的朋友私聊我拿源码 vue后台管理系统 介绍 效果图 代码实现 登录 用户页 权限页 路由 总结 介绍 这是在在学校对vue进行学习后搭建的小项目。该后台管理系统为spa单页项目,前后端分离,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值