专栏首页orientlu开源性能压测工具 locust

开源性能压测工具 locust

本文主要针对服务端,web系统的性能测试。

性能测试

根据不同的测试目的,性能测试具体细分为多种类型

  • 基准测试 : 模拟单个用户访问系统的场景,考察系统性能指标,关注系统功能是否正常,为其他压测提供基准参考。
  • 负载测试: 模拟系统在正常压力下(预期压力或者系统达到临界)的负载能力,判断是否满足业务需求。
  • 压力测试 : 不断提升系统负载知道达到性能拐点,寻找系统最大负载能力,性能瓶颈等。
  • 稳定性测试:在一定压力下持续运行,关注系统长期一定负载下是否能稳定服务。

以此获得系统在多少并发用户,请求数的情况下,平均响应时间,成功失败率等数据。

在定位系统瓶颈时,考虑被测系统 cpu,网络,磁盘,缓存和数据库情况,同时也要关注测试机器的情况。

这里介绍一种开源性能压测软件 locust,纯 python 实现,能实现模拟用户操作场景进行加压,支持单进程和分布式多进程,有一个简单 web ui 查看压测过程,而且开源python,方便自己自定义hack。

安装

pip install locustio
locust --help
pip install pyzmq  ## 多进程机器部署需要安装

公司网络限制手动装依赖真是丢.....

注意 : 设置系统文件描述符最大限制 ulimit -n xx, 每一个http 连接会打开一个文件描述符,确保系统设置满足测试需求。

测试

参看官方文档,简单地写一个测试例子,对一个 oms 进行访问:

#!/usr/bin/env python
# coding=utf-8
import json
from locust import HttpLocust, TaskSet, task

class WebsiteTasks(TaskSet):
    def on_start(self):
        response = self.client.get("/v1/games?developer=orientlu", catch_response = True)
        #print dir(response)
        result = json.loads(response.text)
        self.gameid = result[0]['gameid']

    @task(2)
    def get_unit(self):
        self.client.get("/v1/games?developer=orientlu&&gameid=%s"%(self.gameid))

    @task(1)
    def get_game(self):
        self.client.get("/v1/games?developer=orientlu")

class WebsiteUser(HttpLocust):
    task_set = WebsiteTasks   // 指向TasSet类,定义测试行为
    host= "http://10.xx.xx.xxx:8099/"
    min_wait = 1000
    max_wait = 5000

例子中, WebsiteTasks继承 TaskSet,定义了测试行为,定义on_start方法,locust 在模拟用户启动时调用执行一次,诸如执行登录操作等; 定义执行任务,通过@task修饰,后续跟的数字为调用比重,默认为1,虚拟用户运行期间,按权重随机挑选任务执行,然后根据设置的min_wait/max_wait 区间随机休眠等待,继续执行任务直到终止。

单进程运行

为了方便调试,先在 no-web 模式下执行,看看脚本是否正常,参数信息通过locust -h查看,可以直接通过 print 打印调试。

$ locust  -f locust_test.py  --no-web -c 1 -r 1 -t 10

确认脚本没有问题后,通过web模式执行测试,

$ $ locust  -f locust_test.py -P 8899

启动web 后台后登录web,设置模拟用户并发数和请求频率,执行测试并查看测试情况

1533635778967.png

后台可见系统 http 连接数正在 rangup 中

1533630815709.png

1533630790693.png

多进程/分布式运行

执行压力测试时,可能单个进程或者一台机器无法产生足够的压力,此时需要多进程或者在多台机器上输出压力。不管是多进程模式还是多机模式,都需要先启动一个master,然后在启动多个slaver。

启动 master, master 不输出压力,需要指定 --master, web 访问端口等参数。

$ locust -f ./locust_test.py --master -P 8899

启动slaver,同一台机器执行多次启动多个进程,多机分布式通过在不同机器上执行命令,需要指定 --slave 和 master 的 ip。

$ locust -f ./locust_test.py --slave --master-host=127.0.0.1

登录 web 后可以查看当前启动的 slaver 数目。

1533636504819.png

基本 locust 上手测试就是如此了。 最后,重点是,他开源啊。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python ssh 库 - paramiko and fabric

    标题提到两个第三方库,都是可以实现在 python 中执行 ssh 命令。fabric 是在 paramiko 的基础上封装开发的。所以一般场景下 fabric...

    orientlu
  • Git 使用记录 - 各种撤销

    以上操作用于撤销保存在工作区修改,但是不会撤销暂存区中的修改。 由于修改还没记录到 git 中,撤销无法恢复,请慎重!

    orientlu
  • FreeRTOS 任务调度 List 组织

    前面了解了 FreeRTOS 的内存管理,接下来看看任务调度,这也是一个操作系统中最重要的一部分,而其任务调度大量使用了链表(list.c 实现),调度器使用链...

    orientlu
  • Python性能测试Locust简介

    “Locust是一个用于可扩展的,分布式的,性能测试的,开源的,用Python编写框架/工具,它非常容易使用,也非常好学。它的主要思想就是模拟一群用户访问你的网...

    周萝卜
  • 作为测试面试官给求职者的一些建议

    最近公司业务快速发展,整个研发团队都在加紧招聘人员,我主要负责测试和运维的初面,偶尔参与二面。从年前到今天为止,陆陆续续收到简历仅百人(测试占大多数),进入初...

    叨叨软件测试
  • 学习web需要掌握的一些小窍门

    自己研究web已经有一段时间了,后来慢慢的就会有一些学弟学妹问我,如果学习web怎么才能快速的上手做一些东西,还有一些比如说学习web有没有什么窍门,怎么可以快...

    程序员互动联盟
  • Android训练课程(Android Training) - 测试你的 Activity

    你应该开始编写和启动测试作为你的android程序开发周期的一部分。写的好的测试能够帮助你更早的发现bug和使你对你的代码有信心。

    zhangyunfeiVir
  • 一次python 内存泄漏解决过程

    最近工作中慢慢开始用python协程相关的东西,所以用到了一些相关模块,如aiohttp, aiomysql, aioredis等,用的过程中也碰到的很多问题,...

    coders
  • python3安装locust说明

    前段时间有位朋友看完我之前的文章Locust + python + influxdb + grafana 展示性能压测QPS图表之后,咨询我如何安装Locust...

    Devops海洋的渔夫
  • 机器学习VS动量、反转效应,量化交易1

    这是2018的一篇论文《A Machine Learning View on Momentum and Reversal Trading》的观后感。作者探索并比...

    mixlab

扫码关注云+社区

领取腾讯云代金券