Locust 安装

Stella981
• 阅读 502

Locust 介绍

  Locust 是一个易于使用、分布式的负载测试工具,它可以对网站或其他系统进行负载测试,并计算出一个系统能够承受多少的并发用户。Locust完全基于事件,因此可以在一台机器上支持数千名并发用户,与其他基于事件的应用相比,它不使用回调。与jmeter、loadrunner相比,Locust不需要笨重的UI或臃肿的xml,所有的用户行为都是通过手动编写代码在实现,基于协程而不是回调。不过,Locust有一个整洁的HTML用户界面,用来实时显示测试结果的相关数据。

Locust 有以下几个特点:

  •  分布式和可扩展的-支持成千上万的用户(基于协程)
  • 基于web的用户界面(具有跨平台和易于扩展的特点)
  •  可控制(所有事件I/O和协程任务都委托给gevent来替代测试工具执行)

Locust安装

Locust支持版本Python2.7、3.3、3.4、3.5、3.6

Locust 在pypi上可用,可用通过pip或easy_install安装。

pip install locustio   

或  

easy_install locustio

安装ZeroMQ

如果您打算运行分布在多个进程/机器上的Locust,那就需要安装pyzmq:

Pip install pyzmq

Easy_install pyzmq

在windows上安装locust:

在Windows上,如果正确设置了构建环境,则运行pip install locustio可能会失败。 在这种情况下,在Windows上运行Locust的最简单方法是首先为pyzmq安装预构建的二进制包(也可能为gevent和greenlet安装)。

你可以在这里找到一个非官方的预制python包集合:http://www.lfd.uci.edu/~gohlke/pythonlibs/

当您下载了预先构建的.whl文件时,可以使用以下命令安装它:

  pip install pyzmq 16.0.2 cp36 cp36m win32.whl

一旦你完成了,你应该能够只是pip安装locustio。在Windows上运行Locust应该可以很好地开发和测试负载测试脚本。

但是,在运行大规模测试时,建议您在Linux机器上执行此操作,因为gevent在Windows下的性能很差。

 安装好后,使用locust --help 查看是否安装成功。

下面是一个简单的locustfile.py的简单示例:

from locust import HttpLocust, TaskSet
def login(l):
    l.client.post("/login", {"username":"ellen_key", "password":"education"})
def index(l):
    l.client.get("/")
def profile(l):
    l.client.get("/profile")
class UserBehavior(TaskSet):
    tasks = {index: 2, profile: 1}

    def on_start(self):
        login(self)
class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait = 5000
    max_wait = 9000

  这里我们定义了许多Locust任务,它们是带有一个参数的普通Python callables(一个Locust类实例)。 这些任务是在tasksattribute中的TaskSet类下收集的。 然后我们有一个代表用户的HttpLocust类,我们在其中定义模拟用户在执行任务之间应该等待多长时间,以及TaskSet类应该定义用户的“行为”。py:class:`TaskSet <locust.core.TaskSet>`s 可以嵌套。

  HttpLocust类继承自Locust类,并添加了一个客户端属性,该属性是HttpSession的一个实例,可用于发出HTTP请求。

    我们可以通过更方便的方式声明任务的另一种方式是使用@taskdecorator.以下代码等同于上述代码:

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类(以及HttpLocust,因为它是一个子类)也允许在执行任务(min_wait和max_wait)之间以及其他用户行为之间指定每个模拟用户的最小和最大等待时间。

启动locust
  要使用上面的Locust文件运行Locust,如果它名为locustfile.py并位于当前工作目录中,我们可以运行:

  locust --host=http://localhost.com

  如果Locust文件位于子目录下和/或名称不同于locustfile.py,请使用它来指定它 -f :

locust -f locust_files/my_locust_file.py --host=http://localhost.com

  然后我们将启动任意数量的从属进程:

  locust -f locust_files/my_locust_file.py --slave --host=http://localhost.com

  如果我们想在多台机器上运行分布式Locust,我们还必须在启动从机时指定主机(在运行分布在单台机器上的Locust时不需要这样做,因为主机主机默认为127.0.0.1):

  locust -f locust_files/my_locust_file.py --slave --master-host=192.168.0.100 --host=http://localhost.com

  您可能希望通过csv文件记录您的Locust结果。 在这种情况下,有两种方法可以做到这一点:

  首先,在运行Web服务器时,您可以从localhost检索csv:localhost:8089/stats/requests/csv   和 localhost:8089/stats/distribution/csv。 其次,您可以使用标志运行Locust,该标志将定期保存csv文件。 如果您计划使用--no-web标志以自动方式运行Locust,这将特别有用。

  locust -f locust_files/my_locust_file.py --csv=foobar --no-web -n10 -c1

  如果您希望更快(或更慢)写入,您还可以自定义写入的频率:

import locust.statslocust.stats.CSV_STATS_INTERVAL_SEC = 5 # default is 2 seconds

打开Locust的Web界面

使用上述命令行之一启动Locust后,应打开浏览器并将其指向http://127.0.0.1:8089(如果您在本地运行Locust)。 那么你应该进入这样的欢迎:

  Locust 安装

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
Locust 教程
写在Locust教程开始的前面本文参考了:Locust(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.axihe.com%2Ftools%2Flocust%2Fhome.html)教程:https://www.axihe.c
Stella981 Stella981
2年前
Python3.6 性能测试框架Locust的搭建与使用
背景  Python3.6性能测试框架Locust的搭建与使用基础python版本:python3.6方法一:pipinstalllocustio 方法二:开发工具:pycharm 使用教程:https://www.cnblogs.com/qingchengzi/p/9505548.h
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这