Python性能测试工具Locust入门

这篇具有很好参考价值的文章主要介绍了Python性能测试工具Locust入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、性能测试基础

1、性能测试该怎么做?

利用工具模拟真实用户操作。

2、性能测试基础:

  • 性能:事物的性质和能效 -->效率性能 (时间/资源/容量)
  • 思考:如何评价软件系统的性能?
    • 快慢:衡量系统的处理效率 (响应时间)
    • 多少:衡量系统的处理能力(单位时间内,能处理多少个事物)

3、性能测试常见的性能指标:

    • 响应时间:rt (系统从发出请求开始直到请求结束的时间)

Python性能测试工具Locust入门

  • 吞吐量:tps / rps / qps (个/ 时间) throughput : 网络带宽/磁盘io kb/单位
  • 资源利用率: cpu/内存/磁盘大小/磁盘io/网络带宽。。。(第三方工具:监控平台)

4、性能测试分类: 根据测试需求

负载测试 load testing

  • 不断的向服务器加压,直到预期的指标 或者 部分的系统资源达到上限。
  • 目的:找到系统的最大负载能力。

压力测试(稳定性测试)

  • 目的:验证系统是否稳定。
  • 在负载测试基础上不断加压。

并发测试

  • 单位时间内同时向服务器发送请求。
  • 目的:检验当大量用户同时访问一个应用、功能模块或者数据的时候,观察系统是否存在事物冲突或者锁升级的现象。

配置测试

  • 运行时硬件的配置要求。

基准测试

  • 少量用户验证服务器资源的消耗情况。

容量测试

  • 系统处于最大负载状态或某项指标达到所能接受的最大阈值下对请求的最大处理能力

5、性能测试的关键:

需求分析 --> 分析被测系统的架构/分析被测系统的业务逻辑/具体性能指标。

二、性能测试工具对比

项目

Jmeter

Loadrunner

Locust

授权方式

开源

商业收费

开源

开发语言

Java

C/Java

Python

测试脚本形式

GUI

C/Java

Python

并发机制

线程

进程/线程

协程

单机并发能力

分布式压力

支持

支持

支持

资源监控

不支持

支持

不支持

报告与分析

简单图表

完善

简单图表

支持二次开发

支持

不支持

支持

1、LoadRunner 是非常有名的商业性能测试工具,功能非常强大。使用也比较复杂,目前大多介绍性能测试的书籍都以该工具为基础,甚至有些书整本都在介绍LoadRunner 的使用。

2、Jmeter 同样是非常有名的开源性能测试工具,功能也很完善,它可以作为接口测试工具的使用。但实际上,它是一个标准的性能测试工具。关于Jmeter相关 的资料也非常丰富,它的官方文档也很完善。

3、Locust 同样是性能测试工具,虽然官方这样来描述它 “An open source load testing tool.” 。但其它和前面两个工具有着较大的不同。相比前面两个工具,功能上要差上不少,但它也并非优点全无。

  • Locust 完全基本 Python 编程语言,采用 Pure Python 描述测试脚本,并且 HTTP 请求完全基于 Requests 库。除了 HTTP/HTTPS 协议,Locust 也可以测试其它协议的系统,只需要采用Python调用对应的库进行请求描述即可。
  • LoadRunner 和 Jmeter 这类采用进程和线程的测试工具,都很难在单机上模拟出较高的并发压力。Locust 的并发机制摒弃了进程和线程,采用协程 (gevent)的机制。协程避免了系统级资源调度,由此可以大幅提高单机的并发能力。

优势:

1、测试脚本形式:简单好学,学习成本低。

2、单机并发能力:通过python特有的协程方式生成成千上万的并发,使在一台普通的电脑跑出几万几十万的并发。

三、Locust入门

1、Locust是什么?

  • Locust 是一种易于使用、可编写脚本且可扩展的性能测试工具。
  • 可以在常规 Python 代码中定义用户的行为,而不是停留在 UI 或限制性特定领域的语言中。
  • 这使得 Locust 可以无限扩展并且对开发人员非常友好。

2、Locust安装

前提:安装python3.7或更高版本

# 安装
pip3 install locust

# 验证安装
locust -V

3、Locust命令行参数

参数名称

参数值

参数说明

-h, --help

不带参数

查看帮助信息

-H HOST, –host=HOST

HOST

指定被测试的主机,采用以格式:http://10.21.32.33

–web-host=WEB_HOST

WEB_HOST

指定运行 Locust Web 页面的主机,默认为空 “。

-P PORT, –port=PORT, –web-port=PORT

PORT

指定 –web-host 的端口,默认是8089

-f LOCUSTFILE, –locustfile=LOCUSTFILE

LOCUSTFILE

指定运行 Locust 性能测试文件,默认为: locustfile.py

–csv=CSVFILEBASE, –csv-base-name=CSVFILEBASE

CSVFILEBASE

以CSV格式存储当前请求测试数据。

–master

不带参数

Locust 分布式模式使用,当前节点为 master 节点。

–slave

不带参数

Locust 分布式模式使用,当前节点为 slave 节点。

–master-host=MASTER_HOST

MASTER_HOST

分布式模式运行,设置 master 节点的主机或 IP 地址,只在与 –slave 节点一起运行时使用,默认为:127.0.0.1.

–master-port=MASTER_PORT

MASTER_PORT

分布式模式运行, 设置 master 节点的端口号,只在与 –slave 节点一起运行时使用,默认为:5557。注意,slave 节点也将连接到这个端口+1 上的 master 节点。

–master-bind-host=MASTER_BIND_HOST

MASTER_BIND_HOST

做分布式压测时,指定分机IP。只用于master。如果没有指定,默认是所有可用的IP(即所有标记主机IP的slave)

–master-bind-port=MASTER_BIND_PORT

MASTER_BIND_PORT

做分布式压测时,指定分机port。默认是5557与5558。

–headless

-c 和 -r 配合

无ui界面模式运行测试,需要 -c 和 -r 配合使用.

-c NUM_CLIENTS, –clients=NUM_CLIENTS

NUM_CLIENTS

指定并发用户数,作用于 –no-web 模式。

-r HATCH_RATE, –hatch-rate=HATCH_RATE

HATCH_RATE

指定每秒启动的用户数,作用于 –no-web 模式。

-t RUN_TIME, –run-time=RUN_TIME

RUN_TIME

设置运行时间, 例如: (300s, 20m, 3h, 1h30m). 作用于 –no-web 模式。

-L LOGLEVEL, –loglevel=LOGLEVEL

LOGLEVEL

选择 log 级别(DEBUG/INFO/WARNING/ERROR/CRITICAL). 默认是 INFO.

–logfile=LOGFILE

LOGFILE

日志文件路径。如果没有设置,日志将去 stdout/stderr

–print-stats

不带参数

在控制台中打印数据

–only-summary

不带参数

只打印摘要统计

–no-reset-stats

不带参数

Do not reset statistics once hatching has been completed。

-l, –list

不带参数

显示测试类, 配置 -f 参数使用

–show-task-ratio

不带参数

打印 locust 测试类的任务执行比例,配合 -f 参数使用.

–show-task-ratio-json

不带参数

以 json 格式打印 locust 测试类的任务执行比例,配合 -f 参数使用.

-V, –version

不带参数

查看当前 Locust 工具的版本.

4、Locust脚本开发及使用方法

脚本:

'''导包'''
from locust import HttpUser, between, task,TaskSet


class WebsitUser(HttpUser):
	# 设置一个随机时间间隔
	wait_time = between(3, 5)
	# host可填可不填,不填时执行脚本打开locust页面时可填入
	host = "https://baidu.com"

	def on_start(self):
		self.client.post('/login', {
			'username': 'test',
			'password': ''
		})

	@task
	def index(self):
		self.client.get('/index')

	@task
	def about(self):
		self.client.get('/about')

常用的locust类:

  • HttpUser:用于执行请求(执行类)。
  • TaskSet:用于定义测试任务信息(任务信息类)
  • task:用于声明函数是否为测试任务。
  • between:用于设定每个测试题任务之间的等待时间。思考时间: 为了模拟真实用户的操作,在脚本中设定的一种等待时间

请求方法(client)

  • client:Locust 的请求方法,由requests二次封装而成。

启动参数:

  • –headless 表示不使用Web界面运行测试。
  • -c 设置虚拟用户数,即并发用户数。
  • -r 设置每秒启动虚拟用户数,即每秒请求数。
  • -t 或–run_time,设置设置运行时间。
  • –csv 表示运行结果文件名。

四、locust框架组成与工作流程

1、locust核心库

Python性能测试工具Locust入门

  • gevent:gevent是一种基于协程的Python网络库,它用到Greenlet提供的,封装了libevent事件循环的高层同步API。
  • flask:Python编写的轻量级Web应用框架。
  • requests:Python的HTTP库。
  • msgpack-python:MessagePack是一种快速、紧凑的二进制序列化格式,适用于类似JSON的数据格式。msgpack-python主要提供MessagePack数据序列化及反序列化的方法。
  • six:Python2和Python3兼容库,用来封装Python2和Python3之间的差异性。
  • pyzmq:pyzmq是zeromq(一种通信队列)的Python绑定,主要用来实现Locust的分布式模式运行。

2、Locust工作流程:

Python性能测试工具Locust入门

  • 首先,执行WebsiteTasks中的On_start (只执行一次),作为初始化。
  • 然后,从WebsiteTasks中随机挑选(如果定义了任务间的权重(Weight)关系,那么就按照权重关系随机挑选)一个任务执行。
  • 接着,根据Locust类中min_wait和max_wait定义的间隔时间范围(如果TaskSet类中也定义了min_wait和max_wait,TaskSet中的优先),在时间范围中随机取一个值,休眠等待。
  • 最后,重复2~3步骤,知道测试任务终止。

五、Locust脚本开发

# 第一步:导入Locust包
from locust import TaskSet,HttpUser,task

# 定义一个类
class WebsitUser(HttpUser):
    # 设置一个随机时间间隔
    wait_time = between(3, 5)

    def on_start(self):
        self.client.post('/login', {
            'username': 'test',
            'password': ''
        })

    # 设置任务,@task装饰器用于声明函数是一个测试任务,@task(权重)
    @task(1)
    def index(self):
        self.client.get('/index')

TaskSet的用法:

TaskSet实现了虚拟用户所执行任务的调度方法。包括:

-- 任务执行顺序:schedule_task

-- 指定下一个执行的任务:execute_next_task

-- 执行任务:execute_task

-- 休眠等待:wait

-- 中断:interrupt

from locust import TaskSet,HttpUser,task

# 定义任务信息
class TestBaidu(TaskSet):

    @task
    def test_001(self):
        self.client.get('/')

# 控制执行,
class TestUser(HttpUser):
    task_set = task(TestBaidu)
    host = 'http://lbs.amap.com'
    max_wait = 5000
    min_wait = 3000

六、UI界面及测试结果

1、UI界面

配置启动参数

Python性能测试工具Locust入门

Number of users : 设置模拟用户数。
Spawn rate : 每秒产生(启动)的虚拟用户数。

Host :被测主机(如果在脚本中指定了host启动页面将使用脚本中的host)

Start swarming :开始运行性能测试。

每秒请求用户数(TPS)

Python性能测试工具Locust入门

响应时间

Python性能测试工具Locust入门

用户数

Python性能测试工具Locust入门

运行的异常信息

Python性能测试工具Locust入门

2、测试结果

Python性能测试工具Locust入门

结果说明

    • Type: 请求的类型,例如GET/POST。
    • Name:请求的路径。
    • request:当前请求的数量。
    • fails:当前请求失败的数量。
    • Median:中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值。
    • Average:平均值,单位毫秒,所有请求的平均响应时间。
    • Min:请求的最小服务器响应时间,单位毫秒。
    • Max:请求的最大服务器响应时间,单位毫秒。
    • Content Size:单个请求的大小,单位字节。
    • reqs/sec:是每秒钟请求的个数。

下载测试结果

Python性能测试工具Locust入门文章来源地址https://www.toymoban.com/news/detail-470756.html

到了这里,关于Python性能测试工具Locust入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 压力测试(QPS)及测试工具Locust

    通常指的是确定接口或服务能够处理的最大请求量(吞吐量)和并发用户数,同时保持合理的响应时间和稳定性。 最大吞吐量:系统每秒可以处理的请求数。 最大并发用户数:系统可以同时支持的用户数。 响应时间:系统响应请求的时间。 稳定性和可靠性:在高负载下系统

    2024年04月10日
    浏览(43)
  • Locust:分布式负载测试工具的利器

    引言: 在软件开发过程中,负载测试是确保系统能够承受高并发访问的重要环节。然而,传统的负载测试工具往往无法满足大规模并发测试的需求。为了解决这一问题,Locust应运而生。本文将介绍Locust的特点、使用方法以及其在分布式负载测试中的应用,帮助读者了解并掌握

    2024年02月03日
    浏览(37)
  • 性能测试,python 内存分析工具 -memray

    Memray是一个由彭博社开发的、开源内存剖析器;开源一个多月,已经收获了超8.4k的star,是名副其实的明星项目。今天我们就给大家来推荐这款python内存分析神器。 Memray可以跟踪python代码、本机扩展模块和python解释器本身中内存分配,可以生成多种不同类型的报告,帮助您分

    2024年02月15日
    浏览(49)
  • Python性能测试-Locust框架

    Locust是一个比较容易上手的分布式用户负载测试工具。 它旨在对网站(或其他系统)进行负载测试,并确定系统可以处理多少个并发用户,Locust 在英文中是 蝗虫 的意思: 作者的想法是,在测试期间,放一大群 蝗虫 攻击您的网站。 当然事先是可以用 Locust 定义每个蝗虫(或

    2023年04月11日
    浏览(31)
  • python轻量级性能工具-Locust

    Locust基于python的协程机制,打破了线程进程的限制,可以能够在一台测试机上跑高并发 1.快慢:衡量系统的处理效率:响应时间 2.多少:衡量系统的处理能力:单位时间内能处理多少个事务(tps) 性能测试根据测试需求最常见的分为下面三类 1 负载测试load testing 不断向服务

    2024年02月02日
    浏览(49)
  • Python性能测试框架Locust实战教程

    Locust是一个比较 容易上手的分布式用户负载测试工具 。它旨在对网站(或其他系统)进行负载测试,并确定系统可以处理多少个并发用户,Locust 在英文中是 蝗虫 的意思:作者的想法是在测试期间,放一大群 蝗虫 攻击您的网站。当然事先是可以用 Locust 定义每个蝗虫(或测

    2024年02月03日
    浏览(31)
  • 【Python】万字长文,Locust 性能测试指北

    Locust 是比较常见的性能测试工具,底层基于 gevent。官方介绍 它是一款易于使用、可编写脚本且可扩展的性能测试工具,可以让我们使用常规 Python 代码定义用户的行为,而不必陷入 UI 或限制性领域特定语言中. Locust 具有无限的可扩展性( 只要提供客户端python 代码,适用于

    2024年02月13日
    浏览(34)
  • 【工具/性能】开源的性能测试工具sysbench

    sysbensh是一个非常通用的benchmark工具,其提供多种方面的测试: cpu :提供一个简单的cpu benchmark测试 fileio:文件磁盘io的benchmark测试 memory:内存访问 benchmark测试 thread:线程调度 benchmark测试 mutex:POSIX的锁 benchmark测试 OLTP:数据库 benchmark测试,支持MySQL,Pgsql 默认支持MySQL,如

    2024年02月12日
    浏览(46)
  • H5性能测试以及H5性能测试工具

    背景由于公司最近项目有一个H5测试项目,功能测试不用多说,但是H5性能测试是一个大难题,于是研究下H5性能测试,下面总结下,希望能帮助自己回顾项目也希望能帮到测友。 H5性能测试的常用指标: 白屏时间:用户首次看到网页内容的时间,即第一次渲染流程完成的时间

    2024年02月14日
    浏览(59)
  • 【Python】万字长文,Locust 性能测试指北(上)

    Locust 是比较常见的性能测试工具,底层基于 gevent。官方介绍 它是一款易于使用、可编写脚本且可扩展的性能测试工具,可以让我们使用常规 Python 代码定义用户的行为,而不必陷入 UI 或限制性领域特定语言中. Locust 具有无限的可扩展性( 只要提供客户端python 代码,适用于

    2024年02月13日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包