Locust 使用Python代码来定义用户行为,用它可以模拟百万级的并发用户来访问系统。

与其他性能工具对比如下:

LoadRunner

商业性能测试工具,报告完整,不支持二次开发

开发语言:C/Java

并发机制:进程/线程

Jmeter

开源性能测试工具,简单报告,支持二次开发。

开发语言:Java

并发机制:线程,需要在UI界面上通过选择组件来编写脚本,模拟的负载是线程绑定的,

模拟的每个用户都需要一个单独的线程,单台负载机可模拟的负载数有限。

Locust

开源性能测试工具,简单报告,支持二次开发。

开发语言:python

并发机制:协程,LoadRunner和Jmeter这类采用进程和线程的测试工具,很难在单机

上模拟出较高的并发压力。Locust的并发机制摒弃了进程和线程,采用协程(gevent)

机制。协程避免了系统级资源调度,由此可以大幅提高单机的并发能力。

locust的安装

# 1. 命令行安装
pip3 install locust # 2. 直接在pycharm中导入 # 3. github下载安装 https://github.com/locustio/locust/ clone后执行setup.py文件
python setup.py install # 检查是否安装成功
locust --help

locust版本信息、python版本以及依赖库如下查询:

gevent 是在python中实现协程的第三方库,协程又叫微线程Coroutine。

flask 是python 的一个web开发框架。

requests 是python中可进行http(s)请求的操作库。

msgpack 是一种快速、紧凑的二进制序列化格式,适用于类似Json的数据。

six提供了一些简单的工具用来封装Python2和Python3之间的差异性。

pyzmq 可用于Locust分布运行在多个进程/机器上。

实现例子及用法注释

访问博客首页例子

# coding:utf-8
from locust import HttpLocust, TaskSet, task
import urllib3 """
使用Python3 requests发送HTTPS请求,已经关闭认证(verify=False)情况下,控制台会输出以下错误, 忽略报错的方法如下:
InsecureRequestWarning: Unverified HTTPS request is being made.
Adding certificate verification is strongly advised.
See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
"""
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) class UserBehavior(TaskSet):
# UserBehavior类,继承了TaskSet类,用于定义测试任务的 header = {
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"} # on_start 相当于任务开始的入口,可进行初始化,此处省略了实现
def on_start(self):
pass # @task()装饰的方法为一个事务。方法的参数用于指定该行为的执行权重。参数越大每次被虚拟用户执行的概率越高。如果不设置默认为1
@task(1)
def cnblogsHome(self, header):
request = self.client.get("/", headers=header, verify=False) @task(2)
def cnblogsHome(self, header):
request = self.client.get("/belle-ls/", headers = header, verify = False)
class websitUser(HttpLocust):
"""
HttpLocust类继承了HttpSession类,HttpSession使用率requests.Session,所以用client方法请求登录后,会保存登录状态,具有session记忆功能
"""
task_set = UserBehavior #Task_set属性,它是唯一必须要有的,它指向Task Set类,定义用户的行为
min_wait = 3000 #请求等待最小时间
max_wait = 6000 #请求等待最大时间
# 每个用户执行两个任务间隔时间的上下限(毫秒),具体数值在上下限中随机取值,若不指定则默认间隔时间固定为1秒
# host:被测系统的host,当在终端中启动locust时没有指定--host参数时才会用到
# weight: 一个Locust实例被挑选执行的权重,数值越大,执行频率越高
# stop_timeout: 设置 Locust 多少秒后超时,如果为 None ,则不会超时。 if __name__ == "__main__":
import os
os.system("locust -f locustDemo.py --host=https://www.cnblogs.com")

@task装饰器和tasks属性:以下两种写法是等价的

from locust import TaskSet, task

class UserBehavior(TaskSet):
@task
def job1(self):
self.client.get('/job1') @task
def job2(self):
self.client.get('/job2')
####################################
from locust import TaskSet def job1(obj):
obj.client.get('/job1') def job2(obj):
obj.client.get('/job2') class UserBehavior(TaskSet):
tasks = [job1, job2]
# 或者指定执行频率 tasks = {job1:1, job2:1}

执行脚本,locust启动。

web模式:如果Locust运行在本机,在浏览器中访问http://localhost:8089即可进入Locust的Web管理页面;如果Locust运行在其它机器上,那么在浏览器中访问http://locust_machine_ip:8089即可

web模式执行过程如下:

按钮:

Edit:点击该按钮可对模拟的总虚拟用户和每秒启动的虚拟用户数进行重新设定

STOP:停止运行,缺点----locust只能手动停止,无法自动停止

locust运行命令

"""
web模式运行
-f 指定脚本的绝对路径 --host指定被测接口的服务主机
"""
locust -f load_test.py --host=https://www.baidu.com """
--no-web模式运行
-c 设置虚拟用户数
-r 设置每秒启动虚拟用户数
-t 设置运行时间 """
locust -f load_test.py --host=https://www.baidu.com --no-web -c 10 -r 2 -t 1m """
分布式运行Locust,如果是--no-web模式运行,master会等待slave机器节点接入后运行
--master 设置locust为master模式,网页交互会在这台节点机器中运行
--slave 设置locust的slave模式
--master-host 如果是本机多进程运行,可省略
"""
locust -f load_test.py --master
locust -f load_test.py --slave --master-host = 192.168.1.110

参数说明:

 -h, –help:查看帮助
-H HOST, –host=HOST:指定被测试的主机,采用以格式:http://192.168.1.110
–web-host=WEB_HOST:指定运行 Locust Web 页面的主机,默认为空
-P PORT, –port=PORT, –web-port=PORT:指定 –web-host 的端口,默认是8089
-f LOCUSTFILE, –locustfile=LOCUSTFILE:指定运行 Locust 性能测试文件,默认为: locustfile.py
–csv=CSVFILEBASE, –csv-base-name=CSVFILEBASE:以CSV格式存储当前请求测试数据
–master:Locust 分布式模式使用,当前节点为 master 节点
–slave:Locust 分布式模式使用,当前节点为 slave 节点。
–master-host=MASTER_HOST:分布式模式运行,设置 master 节点的主机或 IP 地址,只在与 –slave 节点一起运行时使用,默认为:127.0.0.1
–master-port=MASTER_PORT:分布式模式运行, 设置 master 节点的端口号,只在与 –slave 节点一起运行时使用,默认为:5557。注意,slave 节点也将连接到这个端口+1 上的 master 节点。
–master-bind-host=MASTER_BIND_HOST:master运行模式需要设置host,默认是* 所有有效接口
–master-bind-port=MASTER_BIND_PORT:应该设置master端口号(只用于master执行是),默认5557. 也会使用这个端口+1的端口,所以默认master会被连接到5557和5558两个端口
–expect-slaves=EXPECT_SLAVES:开始测试之前期望多少个slave节点接入 (只–no-web模式).
–no-web:no-web 模式运行测试,需要 -c 和 -r 配合使用.
-c NUM_CLIENTS, –clients=NUM_CLIENTS:指定并发用户数,作用于 –no-web 模式
-r HATCH_RATE, –hatch-rate=HATCH_RATE:指定每秒启动的用户数,作用于 –no-web 模式。
-t RUN_TIME, –run-time=RUN_TIME:设置运行时间, 例如: (300s, 20m, 3h, 1h30m). 作用于 –no-web 模式。
-L LOGLEVEL, –loglevel=LOGLEVEL:选择 log 级别(DEBUG/INFO/WARNING/ERROR/CRITICAL). 默认是 INFO.
–logfile=LOGFILE:日志文件路径。如果没有设置,日志将去 stdout/stderr
–print-stats:在控制台中打印数据
–only-summary:只打印摘要统计
–no-reset-stats:执行完后不重新设定
-l, –list:显示测试类, 配置 -f 参数使用
–show-task-ratio:打印 locust 测试类的任务执行比例,配合 -f 参数使用.
–show-task-ratio-json:以 json 格式打印 locust 测试类的任务执行比例,配合 -f 参数使用
-V, –version:查看当前 Locust 工具的版本.

Locust 基本使用的更多相关文章

  1. 性能测试工具Locust

    An open source load testing tool. 一个开源性能测试工具. define user behaviour with python code, and swarm your ...

  2. python httprequest, locust

    r = self.client.get("/orders", headers = {"Cookie": self.get_user_cookie(user[0] ...

  3. Python Locust对指定网站“一键压测”

    [本文出自天外归云的博客园] 前篇 前篇:Python Locust性能测试框架实践 本篇 承上——归纳过程 在前篇的基础上,我们可以利用Locust性能测试框架编写python脚本对指定网站或者接口 ...

  4. linux安装locust

    linux安装locust 1. 安装epel扩展源(目的是为了在安装Pip时不出现一堆乱七八糟的错误信息) EPEL(http://fedoraproject.org/wiki/EPEL) 是由 F ...

  5. Python Locust性能测试框架实践

    [本文出自天外归云的博客园] Locust的介绍 Locust是一个python的性能测试工具,你可以通过写python脚本的方式来对web接口进行负载测试. Locust的安装 首先你要安装pyth ...

  6. 性能测试框架Locust初学笔记

    Locust初探 Locust是一款类似于Jmeter开源负载测试工具,所不同的是它是用python实现,并支持python脚本. locust提供web ui界面,能够方便用户实时监控脚本运行状态. ...

  7. 初遇locust

    大概有四个月没有用过PYTHON的我. 今天差点都不知道怎么运行了. 说起来真是丢人呐. 幸好还是存留着一点点印象,再加上看了一下以前写的几篇文章, 还是比较快的想起来了.不然真的是要崩溃了. 刚开始 ...

  8. Locust性能测试工具的安装及实际应用

    一.安装Locust 安装Locust之前先安装的库:gevent库:第三方库,gevent为python提供了比较完善的协程支持.使用gevent,可以获得极高的并发性能. pip install ...

  9. Locust性能测试框架,从入门到精通

    1. Locust简介 Locust是使用Python语言编写实现的开源性能测试工具,简洁.轻量.高效,并发机制基于gevent协程,可以实现单机模拟生成较高的并发压力. 主要特点如下: 使用普通的P ...

  10. Locust no-web 模式与参数详解

    读前参考:<性能测试工具Locust > 熟悉 Apache ab 工具的同学都知道,它是没有界面的,通过命令行执行. Locust 同样也提供的命令行运行,好处就是更节省客户端资源. 命 ...

随机推荐

  1. C++中的深拷贝和浅拷贝 QT中的深拷贝,浅拷贝和隐式共享

    下面是C++中定义的深,浅拷贝 当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用.也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用.以下情况都会 ...

  2. aspnetcore的那些actionresult们

    比MVC5多了n个actionresult,傻傻分不清,整理了下,妈妈再也不用担心了 https://docs.asp.net/projects/api/en/latest/autoapi/Micro ...

  3. 大前端涉猎之前后端交互总结1: 软件架构与PHP搭建

    1 软件架构与PHP搭建 1.1 HTTP服务器(web服务器) 即( web服务器 )网站服务器,主要提供文档(文本.图片.视频.音频)web浏览服务,一般安装Apache.Nginx服务器软件. ...

  4. Matlab图像处理教程

    虽然典型算法的开发是基于理论支持的,但这些算法的实现几乎总是要求参数估计,并常常进行算法修正与候选求解方案的比较. MATLAB由LINPACK和EISPACK项目开发,最初用于矩阵处理.今天,MAT ...

  5. 引用数据数据类型Scanner、Random

    键盘录入Scanner 获取键盘录入的数据,对获取数据的具体操作进行了封装,只需要调用方法,即可得到键盘录入的数据 A:导包            import java.util.Scanner;  ...

  6. ES 遇到的一个坑too_many_clauses: maxClauseCount

    异常: Caused by: org.elasticsearch.common.io.stream.NotSerializableExceptionWrapper: too_many_clauses: ...

  7. 《FilthyRichClients》读书笔记(一)-SwingのEDT

    <FilthyRichClients>读完了前几个章节,现将我的体会结合工作以来从事Swing桌面开发的经验,对本书的一些重要概念进行一次 分析,对书中的一些遗漏与模糊的地方及时补充,同时 ...

  8. android屏幕适配,生成不同分辨率的dimen.xml文件

    一.在项目下新建moudle,选择Java Library 二.DimenUtils类 public class DimenUtils { //文件保存的路径 是在该项目下根路径下创建 比如该项目创建 ...

  9. simrank

    simrank 背景 度量相似度是许多应用的关键问题.传统方法与问题的领域相关,如文本匹配.计算交集.simrank则利用关联关系度量相似性,即"两个节点的相似性和各自邻域节点的相似度有关& ...

  10. python的reflect反射方法

    核心内容专自:http://www.liujiangblog.com/course/python/48 在自动化测试的时候,需要从excel中读取关键字,此关键字对应一个方法,如何使用该关键字去调用真 ...