第二章-locust简介

一. locust概述

1.locust官方介绍

  Locust 官方网站:https://www.locust.io/

  locust官网介绍是:

  • An open source load testing tool.
  • Define user behaviour with Python code, and swarm your system with millions of simultaneous users.

  locust是一个开源的性能测试工具,使用 Python 代码来定义用户行为,用它可以模拟百万计的并发用户访问你的系统。

  locust翻译过来是蝗虫的意思,locust工具生成的并发请求就跟一大群蝗虫一般,对我们的被测系统发起攻击,以此检测系统在高并发压力下是否能正常运转。

 

2.locust是什么?

  Locust是一个易于使用,可编写脚本且可扩展的性能测试工具。

  您可以使用常规Python代码定义用户的行为,而不是使用笨拙的UI或特定于域的语言。

  这使Locust可以无限扩展,并且对开发人员非常友好。

 

3.locust特征

  • 用普通的Python编写用户测试方案

Locust在其自己的greenlet(轻量级进程/协程)中运行每个用户。不需要笨拙的UI或庞大的XML,只需像通常那样编码即可。基于协程而不是回调,您的代码看起来和行为都与普通(阻塞)Python代码一样。

  • 分布式和可扩展-支持数十万用户

Locust使运行分布在多台计算机上的负载测试变得容易。它是基于事件的(使用gevent),这使得单个进程可以处理成千上万的并发用户。尽管可能还有其他工具可以在给定的硬件上每秒执行更多请求,但是每个Locust用户的低开销使其非常适合测试高并发工作负载。

  • 基于Web的UI

Locust具有用户友好的Web界面,可实时显示测试进度。您甚至可以在测试运行时更改负载。它也可以在没有UI的情况下运行,从而使其易于用于CI / CD测试。

  • 可以测试任何系统

即使Locust主要与网站/服务一起使用,它也可以用于测试几乎所有系统或协议。只需为您要测试的内容编写一个客户端,或者浏览社区创建的一些客户端

  • 可控

locust很小,非常灵活,我们打算保持这种状态。如果您想将报告数据发送到您喜欢的数据库和制图系统,包装对REST API的调用以处理系统的细节或运行完全自定义的加载模式,那么没有什么可以阻止您!

 

二. locust优点

image-20210406102801121.png

LoadRunner

  • 商业软件,价格昂贵
  • 只能在Windows平台使用
  • 并发效率低,单台压力机难以产生较高的并发能力
  • 功能是最全面的,用户群体多

Jmeter

  • 并发机制同LoadRunner
  • 脚本编写和描述方面是基于GUI操作

locust

  • 开源免费
  • 易用:Locust采用Pure Python脚本描述,并且HTTP请求完全基于Requests库,简单轻便
  • 并发机制:摒弃了进程和线程,采用协程(gevent)的机制,所以不受进程和线程的限制,可以支持发起更高的并发数请求
  • locust有一个整洁的 HTML+JS 的用户界面,实时显示相关测试细节

        采用多线程模拟用户,线程数会随着并发数的增加而增加,而线程之间的切换是需要占用资源的,IO的阻塞和线程的sleep会不可避免的导致并发效率下降;正因如此,LoadRunner和Jmeter这类采用进程和线程的测试工具,都很难在单机上模拟出较高的并发压力。而协程和线程的区别在于,协程避免了系统级资源调度,由此大幅提高了性能。正常情况下,单台普通配置的测试机可以生产数千并发压力,这是LoadRunner和Jmeter都无法实现的。
 

三. 安装locust

1.开发环境

  • Windows 10
  • python版本:3.7.6

2.安装命令

pip install locust

PS D:\> pip install locust
PS D:\>  locust -V
locust 1.4.3

 

四. 编写性能测试脚本

创建 test.py 文件

from locust import HttpUser, task, TaskSet, between

class UserBehavior(TaskSet):
    @task(1)
    def task1(self):
        self.client.get("/search/error.html")

    @task(2)
    def task2(self):
        self.client.get("/")

class MyUser(HttpUser):
    wait_time = between(0.5, 1)
    host = "https://www.baidu.com"
    tasks = [UserBehavior]

脚本解释:访问百度网页的两个页面,请求比例为1:2

1)UserBehavior:继承TaskSet类,TaskSet类好比蝗虫的大脑,控制着蝗虫的具体行为,即模拟实际业务场景操作

2)MyUser:继承HttpUser类, tasks = [UserBehavior]即是实例化
 

五. 执行脚本

终端命令行执行:locust -f test.py

  • -f 指定性能测试脚本文件
    通过浏览器访问locust服务:http://localhost:8089(Locust启动网络监控器,默认为端口号为: 8089)
    image-20210402163920806.png

参数说明:
(1)Number of users to simulate :模拟用户数
(2)Hatch rate(users spawned/second): 每秒启动的用户数
(3)Host:被测接口的ip地址或域名(带http://)
点击 “Start swarming” 按钮,开始运行性能测试。
 

六. 测试数据展示

Locust在执行测试的过程中,我们可以在web界面中实时地看到结果运行情况。

相比于LoadRunner,Locust的结果展示十分简单,主要就四个指标:并发数、RPS、响应时间、异常率。但对于大多数场景来说,这几个指标已经足够了。

Top栏

image-20210402165147107.png
1. HOST  
2. STATUS:状态(两个用户正在运行)  
3. RPS:单位时间内处理的请求数  
4. FAILURES:失败率  
5. STOP:停止运行  
6. Reset Stats:重置  

 

Statistics

image-20210402165246363.png
参数说明
  • Type: 请求的类型,即接口请求方法,例如GET/POST
  • Name: 请求的路径
  • request: 当前已完成的请求数量
  • fails: 当前请求失败的数量
  • Median: 响应时间的中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值
  • 90%ile (ms):90%的响应时间,单位毫秒
  • Average:平均响应时间,单位毫秒
  • Min: 请求的最小服务器响应时间,单位毫秒
  • Max: 请求的最大服务器响应时间,单位毫秒
  • Average size (bytes) : 请求的平均大小,单位字节
  • Current RPS: 当前的RPS
  • Current Failures/s: 当前每秒钟请求失败率

最后一行:aggregated为汇总数据

 

Charts

(1) 每秒响应请求数(RPS)+ 失败率
image-20210402165408226.png
(2)请求响应时间
image-20210402165440480.png
(3)虚拟用户数
image-20210402165456944.png
(4)Failures:失败的请求
image-20210402165525771.png
(5)Exceptions:异常的请求
image-20210402165537833.png
(6)Download Data:下载测试数据
image-20210402165559408.png

 
 

七. 数据监测

Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能

image.png

可以监控测试过程中,被测服务端的资源详情,如cpu、内存等

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 01、认识Locust Locust是一个比较容易上手的分布式用户负载测试工具。它旨在对网站(或其他系统)进行负载...
    Wing_test阅读 269评论 0 1
  • 简介 Locust是一个使用Python编写的可扩展、分布式的开源性能测试工具。 优点 相比于Jmeter、Loa...
    忆江南_1569阅读 2,848评论 1 6
  • 一、Locust简介 Locust是使用Python开发的支持分布式的一款开源压力测试工具,Locust在测试时,...
    我是孟小鱼呀阅读 2,582评论 2 4
  • 一、认识Locust Locust是一个比较容易上手的分布式用户负载测试工具。 它旨在对网站(或其他系统)进行负载...
    jokerj阅读 480评论 0 0
  • 线上业务压测的核心要素 做到 5 个一样要达成精准衡量业务承接能力的目标,业务压测就需要做到 5 个一样: 一样的...
    我为峰2014阅读 5,524评论 3 37

友情链接更多精彩内容