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. JDBC 连接 MySQL 时碰到的小坑

    最近从MS SQL Server换到了MySQL,已经是8.11版本了,安装的时候似乎还用了新的身份认证方式之类的,连接过程中也是磕磕绊绊,碰到很多奇奇怪怪的问题,在此记录下来. 驱动加载: 以前使用 ...

  2. RobotFramework学习-问题

    RobotFramework,基于Python的自动化测试框架.近期学习中遇到过一些问题. 1.运行ride时,报错[ ERROR ] option --monitorcolors not recog ...

  3. R Markdown 速查表

  4. 使用 ServiceStack 构建跨平台 Web 服务(转)

    出处:http://www.cnblogs.com/shanyou/p/3348347.html 本文主要来自MSDN杂志<Building Cross-Platform Web Service ...

  5. [GO]runtime包及gosched的使用

    Gosched:让出CPU时间片 Goexit:退出当前的协程 GOMAXPROCS:设置使用最大的CPU数量(哇,牛逼了...) package main import ( "fmt&qu ...

  6. C# 集合的使用List<T>的使用

    C# List<T>用法 所属命名空间:using System.Collections.Generic; List<T>类是  ArrayList 类的泛型等效类. 该类使用 ...

  7. MinGW-编译器

    MinGW 是Minimalist GNUfor Windows的缩写. 它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Window ...

  8. Android-自定义IntentSession来传递数据

    在上一篇博客中介绍到,Android-Intent意图传递数据,能够传递基本数据类型系列,能够传递对象(需要序列化),等操作: 但是如果要传递 List<T>,这种类型的数据,就不能通过I ...

  9. [LeetCode 题解]: Maximum Subarray

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 Find the c ...

  10. C# 利用CMD命令行结束进程

    public static void CmdKillProcess(int pid)        {            string cmdStr = string.Format("t ...