美文网首页
性能测试工具Locust使用指南(一)

性能测试工具Locust使用指南(一)

作者: yytester | 来源:发表于2017-11-27 11:44 被阅读526次
  • 开篇
    最近因为某些不可抗拒因素:-D,不能在公司使用Loadrunner,找了一下开源的性能测试工具,决定使用Locust.

  • 什么是Locust

    Locust是一种易于使用的、分布式的、用户负载测试工具。它的目的是对web站点(或其他系统)做性能测试,并确定系统能够处理多少并发用户。

    Locust可以在测试过程中,模拟大量Locust实例会访问目标网站。每个Locust(测试用户)的行为是由自己定义的,并且可以从一个web UI中实时监控着这些进程。

    服务端性能测试工具最核心的部分是压力发生器,而压力发生器的核心要点有两个,一是真实模拟用户操作,二是模拟有效并发。

    在Locust测试框架中,测试场景是采用纯Python脚本进行描述的。对于最常见的HTTP(S)协议的系统,Locust采用Python的requests库作为客户端,使得脚本编写大大简化,富有表现力的同时且极具美感。而对于其它协议类型的系统,Locust也提供了接口,只要我们能采用Python编写对应的请求客户端,就能方便地采用Locust实现压力测试。从这个角度来说,Locust可以用于压测任意类型的系统。

    在模拟有效并发方面,Locust的优势在于其摒弃了进程和线程,完全基于事件驱动,使用gevent提供的非阻塞IO和coroutine来实现网络层的并发请求,因此即使是单台压力机也能产生数千并发请求数;再加上对分布式运行的支持,理论上来说,Locust能在使用较少压力机的前提下支持极高并发数的测试。


  • Locust主要功能
    • 不需要使用笨重的UIs或臃肿的xml代码。基于coroutines而不是回调,使用python代码即可实现.
    • 分布式的和可扩展的——支持成千上万的用户
      Locust支持在多台机器上运行负载测试,而且是基于事件驱动,即使是一个Locust节点也可以在一个过程中处理数千个用户。这背后的部分原因是,即使模拟了许多用户,但并不是所有用户都在积极地访问系统。通常,现实情况下,用户会有一个思考时间。每秒请求!=网上用户数量.
    • Locust有一个简洁的HTML + JS用户界面,可以实时显示相关的测试细节。由于UI是基于web的,它是跨平台的,易于扩展。
    • 可以测试任何系统
      尽管Locust是以网络为导向的,但它可以用来测试几乎所有的系统。只要写一个测试脚本,然后执行Locust来测试系统.
    • 可自由扩展
      Locust易于扩展,核心的代码不复杂。所有令人心烦的I / O和coroutines都被委托给gevent。

  • 简单示例
from locust import HttpLocust, TaskSet

def login(l):
    l.client.post("/login", {"username":"test_one", "password":"education"})

def index(l):
    l.client.get("/")

def profile(l):
    l.client.get("/profile")

class UserBehavior(TaskSet):
    tasks = {index: 2, profile: 1} #请求比例是index:profile = 2:1

    def on_start(self):
        login(self)

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 5000 #最小间隔5s
    max_wait = 9000 #最大间隔9s

在这里定义了一些Locust任务(即def login(l),def profile(l),def index(l)),这些任务是正常的Python方法,它们只接受一个参数(Locust类实例)。这些任务在任务属性中的TaskSet类下收集。然后定义一个表示用户的WebsiteUser类,在WebsiteUser类定义模拟用户在执行任务之间应该等待多长时间,以及TaskSet类应该定义用户的“行为”。TaskSet类可以嵌套。
HttpLocust类继承自Locust类,它添加了一个客户端属性(HttpSession的实例),可用于发出HTTP请求。

另一种更方便的定义方式,使用task装饰器:
from locust import HttpLocust, TaskSet, task

class UserBehavior(TaskSet):
    def on_start(self):
        """ on_start is called when a Locust start before any task is scheduled """
        self.login()

    def login(self):
        self.client.post("/login", {"username":"ellen_key", "password":"education"})

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

    @task(1)
    def profile(self):
        self.client.get("/profile")

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 5000
    max_wait = 9000

  • 执行
    • 在命令行执行locust -f locust文件名.py --host=http://example.com
    • 要在多个进程中运行Locust,可以通过指定master来启动一个主进程:locust -f locust文件名.py --master --host=http://example.com
      然后开始任意数量的从属过程:locust -f locust文件名.py --slave --host=http://example.com

      如果是要在多台机器上运行Locust,必须在启动slave时指定master的主机IP(当在一台机器上运行Locust时,这是不需要的,因为主主机默认为127.0.0.1):
      locust -f locust文件名.py --slave --master-host=192.168.0.100 --host=http://example.com


  • UI界面
    启动脚本后,可以在浏览器http://localhost:8089/打开界面,在这里定义模拟用户数量用户生成速度:
    image.png
    例如,模拟用户数量是20,用户生成速度是2,则会每秒增加两个用户,在十秒钟后并发用户数量达到20.

相关文章

  • 性能测试工具Locust使用指南(三)

    前文目录:性能测试工具Locust使用指南(一)性能测试工具Locust使用指南(二) 分布式运行Locust 如...

  • 性能测试工具Locust使用指南(二)

    上一篇文章性能测试工具Locust使用指南(一)主要介绍了Locust的基本概念,主要功能和一个示例,这篇主要讲进...

  • 性能测试工具Locust

    性能测试工具Locust | iCourt技术 Locust介绍 性能测试工具市面上有很多,除了我们耳熟能详的Lo...

  • Locust—python压力测试工具

    1、Locust与其他性能测试工具对比 优势:1、Locust 完全基本 Python 编程语言,采用 Pure ...

  • 性能测试工具Locust和JMeter比较

    Apache JMeter™和Locust都是是最受欢迎的性能测试工具。 JMeter和Locust - 简介 J...

  • 服务端的性能测试(三)

    本文章转载于搜狗测试 上一篇我们讲了性能测试的测试工具,当时对大家推荐了性能测试工具Locust,上期评论时候大家...

  • 性能测试工具Locust使用指南(一)

    开篇最近因为某些不可抗拒因素:-D,不能在公司使用Loadrunner,找了一下开源的性能测试工具,决定使用Loc...

  • 初识locust

    什么是locust locust是一种易于使用、可编写脚本且可扩展的性能测试工具。locust具备5大特点:1.用...

  • Python Locust性能测试框架实践

    Locust的介绍 Locust是一个python的性能测试工具,你可以通过写python脚本的方式来对web接口...

  • locust

    简介Locust 是一款易用的,可编程的,可度量的性能测试工具你可以通过 Python 代码定义 Locust 的...

网友评论

      本文标题:性能测试工具Locust使用指南(一)

      本文链接:https://www.haomeiwen.com/subject/oxjrbxtx.html