写在 Locust 教程开始的前面

本文参考了: Locust 教程 : https://www.axihe.com/tools/locust/home.html

locust 的官方 Github 是:https://github.com/locustio/locust

这个教程是我翻译官方 Github 介绍并搜索网络的相关 locust 使用文章而组织的教程哦;

locust 这个工具,需要根据你的实际情况来决定是不是适合你;

如果你对编程了解比较多,并不是只会 jmeter 的测试人员;

那么完全可以代替笨拙的 jmeter 处理你的测试,它在自定义方面处理的非常好,这也就带来一个弊端,就是什么都需要你来做,而且对你的代码能力和逻辑思维有一定的要求;

如果你对 编程是一脸懵逼的状态,那么建议你还是 jmeter 为主(毕竟要干活),然后了解下 Locust,看看它是怎么工作的,了解下它的处理思维;

Locust 是什么?

Locust 是一个比较容易上手的分布式用户负载测试工具。

它旨在对网站(或其他系统)进行负载测试,并确定系统可以处理多少个并发用户,Jmeter 也可以处理这种场景,但是个人感觉 Jmeter 在这方面做的不如 Locust 专业。

Locust 在英文中是 蝗虫 的意思:

作者的想法是,在测试期间,放一大群 蝗虫 攻击您的网站。

当然事先是可以用 Locust 定义每个蝗虫(或测试用户)的行为,并且通过 Web UI 实时监视围攻过程。

这将帮助您在项目上线之前测试并确定项目的瓶颈;

如果上线几个人访问就跪了,被老板拉出去祭天就懵逼了,有了 locust 可以让项目更加快乐的上线;

Locust 可以让测试工程师对开发人员和项目经理的回复的更专业,

可以想象一下,当项目经理或领导问你这个项目的性能如何,可以承受多少压力的时候;

你回答说这个项目的瓶颈在 2341 人同时访问,超过就会挂掉 / 宕机 / 出错等,当在 1834 人同时访问时候,会变慢;具体访问时间的饼图如 XXX)

这样的回答是不是逼格很高?

Locust 的运行原理

Locust 的运行原理是完全基于事件运行的,因此可以在一台计算机上支持数千个并发用户。

与许多其他基于事件的应用程序相比,它不使用回调(比如 Nodejs 就是属于回调,Locust 不使用这种的逻辑)。

相反,它通过 gevent 使用轻量级进程。测试您站点的每个蝗虫实际上都在其自己的进程中运行(正确地说,是Greenlet)。

这可以让您写 Python 代码的时候更加简单,而不会进入类似 JS 的那种回调地域。

我是如何开始了解 Locust 的

我是一名码农,写接口的时候,除了 Postman 做校验外,偶尔也测测一些接口的性能;

2017 年的年中时候,做接口压力测试,一直研究使用 jmeter 写写 DEMO 还是很嗨皮的;

但是真正进行并发接口时,发现 jmeter 在单机下并发超过 1000 的时候,单台台式电脑机器的资源早就被使用完,jmeter 都动不了,基本就算凉了;

也可能是我的 jmeter 压测接口研究得不够,不会用吧 - -,如果有优雅的方法,欢迎告诉我;

通过搜索发现基于 Python 开发的 Locust 的单机并发能力很理想,在测试环境拿来压测,好像真的可以实现几千的并发,然后就打开了 Locust 的大门。

Locust 的 特征

  • 用 Python 编写测试方案

    • 不需要在 UI 界面上傻乎乎的点击,只需正常的写写代码就可以了。
    • Locust 基于协程而不是回调,这样会让您的代码类似于正常的 Python 阻塞代码那样同步执行。
  • 分布式 & 可扩展
    • 支持模拟数十万的用户行为(还是非常给力的)
    • Locust 支持分布在多台计算机上的运行负载测试(可以多台机器并行开搞)。
    • 由于基于事件,因此即使一个蝗虫节点也可以在单个过程中处理数千个用户。
    • 不过即使您模拟了这么多用户,也并非所有人都是这种频率的使用您的系统,通常,用户会有思考的时候,会想一想下一步该怎么做。
      • 需要明白 每秒请求数 不等于 在线用户数
  • 统计结果基于 Web 界面
    • Locust 有一个简单的用户界面,可实时显示相关的测试详细信息。
    • 统计结果界面是基于网页的,而网页是天生跨平台的,所以 Locust 是跨平台且易于扩展的(Locust 作者的这种思维还是很不错的)。
  • 可以测试任何网页 / 应用 / 系统
    • 即使 Locust 是面向 Web 的,它也可以测试几乎所有项目
    • 只需用 python 编写想要测试的方案,然后放"蝗虫"去怼需要测试的项目就可以了,非常简单!
      • 虽然官方是这么宣传的,但是如果你对 python 了解的不怎么样,那可能就没有那么简单啊;就像商家把兰博基尼的操作宣传的再简单,我没钱买也是白搭(老铁,我太难了!)
      • 如果你对编程是懵逼的状态,那还是回去用 jmeter 吧,优雅不优雅的先不说,最起码你可以用它来干活;
  • 容易被入侵
    • Locust 放出去的蝗虫很小,很容易被入侵,开发团队是一只打算保持这种状态的。
    • 事件 I/O 和协程的所有繁重工作都委托给 gevent
    • 团队是看到 jmeter 等其它测试工具,处理的太 low,太死板了,所以才写的 locust;

Locust 是完全基于 Python

http 请求完全是基于 requests 库;

Locust 支持 http、https 协议,还支持测试其他协议,websocket 等;

只要采用 Python 调用对应的库就可以了。

  • http/https 采用 requests;
  • websocket 采用 websocket ;

Locust 的创作背景

Locust之所以创建,是因为作者受够了现有的解决方案。

作者认为他们都没有解决正确的问题,没有抓住要点,简单的讲,就是作者认为他们太 low 了,一个能打的都没有,于是自己撸了一个 Locust 给大家用。

作者也深度尝试过 Apache JMeter 和 偶尔用用 Tsung。

JMeter 带有一个 UI,很多人可能会认为这是一件好事,只需要点点就好。

但是如果你是一个测试测试,很快就会意识到,通过某些点击界面“编码”您的测试方案是一种 PITA。

其次,JMeter 是线程绑定的,这意味着对于每个要模拟的用户,都需要一个单独的线程。这也就导致了,在一台计算机上模拟成千上万的用户进行基准测试是不可行的。

另一方面,Tsung 没有用 Erlang 编写的线程问题。

它可以利用 BEAM 自身提供的轻量级工艺,并且可以愉快地扩展规模。

但是在定义测试方案时,Tsung 和 JMeter 一样有限。

它提供了基于 XML 的 DSL 来定义用户在测试时的行为方式(这种格式还是很 low 的,但是却很直观)。完成后显示任何种类的图形或报告,都需要对测试生成的日志文件进行后处理,只有这样,您才能了解测试的进行方式。

作者在创建 locust 时试图解决这些问题。

开源许可证

根据 MIT 许可获得许可的开放源代码(有关详细信息,请参阅 LICENSE 文件)。
本文参考:https://www.axihe.com/tools/locust/home.html

Locust 教程的更多相关文章

  1. Locust安装教程与使用

    Locust安装教程与使用官网地址:https://github.com/locustio/locust 如果是python3+以上的环境,需要下载locust项目源码进行安装 因Centos7.2环 ...

  2. 性能测试工具Locust

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

  3. 初遇locust

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

  4. Python3.6 性能测试框架Locust的搭建与使用

    背景 Python3.6 性能测试框架Locust的搭建与使用 基础 python版本:python3.6 方法一: pip install locustio 方法二: 开发工具:pycharm 使用 ...

  5. locust的安装与使用

    Contents Locust这一款开源性能测试工具.然而,当前在网络上针对Locust的教程极少,不管是中文还是英文,基本都是介绍安装方法和简单的测试案例演示,但对于较复杂测试场景的案例演示却基本没 ...

  6. locust 的使用

    Contents Locust这一款开源性能测试工具.然而,当前在网络上针对Locust的教程极少,不管是中文还是英文,基本都是介绍安装方法和简单的测试案例演示,但对于较复杂测试场景的案例演示却基本没 ...

  7. 性能测试工具Locust,一个开源性能测试工具

    性能测试工具Locust,一个开源性能测试工具使用Python代码来定义用户行为.用它可以模拟百万计的并发用户访问你的系统.1.它与目前主流的LoadRunner和Jmeter玩法都不一样.2.它完全 ...

  8. 性能测试进阶:(一)性能测试工具Locust

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

  9. 在Rainbond上使用Locust进行压力测试

    Locust简介 Locust 是一种易于使用.可编写脚本且可扩展的性能测试工具.并且有一个用户友好的 Web 界面,可以实时显示测试进度.甚至可以在测试运行时更改负载.它也可以在没有 UI 的情况下 ...

随机推荐

  1. [LeetCode] 323. Number of Connected Components in an Undirected Graph 无向图中的连通区域的个数

    Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), ...

  2. 玩转CONSUL(3)–大规模部署的性能开销定量分析

    1. 引言 今天有朋友问萌叔,consul能否在大规模生产环境下进行应用.场景是总计大约10w+台机器,分为3 ~ 4个机房,单个机房最多3w万+机器.这个问题大的,可把萌叔吓了跳,部门里面consu ...

  3. java注解简单使用

    java注解可以比喻成标签,可以贴在任何地方,也可以限制只能贴在固定地方,比如类上方.方法上方.属性[字段]上方等,然后通过反射,判断是否存在这个注解. 注解形式 public @interface ...

  4. php HTTP协议

    HTTP协议 超文本传输协议(HTTP,HyperText Transfer Protocol) 最常见B/s架构中,使用,浏览器端与服务器端数据交互协议. 协议:约定好的一套语法规则. 规定:请求数 ...

  5. 【vim小小记】vim的复制粘贴(包括系统剪贴板)

    1.vim常用复制粘贴命令 Vim的复制粘贴命令无疑是y (yank),p(paster),加上yy,P PS: vim有个很有意思的约定(我觉得是一种约定),就是某个命令的大小写都是实现某种功能,只 ...

  6. QPS和并发量

    QPS(q) :每秒处理的请求数量 并发量 (c):同时支持多少个用户在线.与服务器的请求处理模型有关,如果是BIO模型,则并发量就受限于最大能支持多少个线程,如果是NIO模型,则并发量与socket ...

  7. [转帖]首颗国产DRAM芯片的技术与专利,合肥长鑫存储的全面深度剖析

    首颗国产DRAM芯片的技术与专利,合肥长鑫存储的全面深度剖析 https://mp.weixin.qq.com/s/g_gnr804q8ix4b9d81CZ1Q 2019.11 存储芯片已经成为全球珍 ...

  8. [转帖]linux Shell sort按照指定列排序

    linux Shell sort按照指定列排序 https://blog.csdn.net/weixin_38308151/article/details/80760133 kubectl get p ...

  9. 深入浅出JVM(一):运行时数据区域

    程序计数器 线程私有 指向了正在执行的虚拟机字节码指令的地址:如果是本地方法,数值为空 没有 OutOfMemoryError 错误的区域 Java虚拟机栈 线程私有: 生命周期与线程相同: 代表着 ...

  10. CF778D Parquet Re-laying 构造

    传送门 如果\(2 \not\mid M\),就把两个图折一下,把\(N\ M\)互换,这样就可以保证\(2 \mid M\). 因为操作可逆,所以我们可以选择一个中间状态,把起始和终点状态都变成这个 ...