开源性能压测工具 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 上手测试就是如此了。
最后,重点是,他开源啊。

参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,912评论 2 89
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 查询引擎 一、Phoenix 贡献者::Salesforce 简介:这是一个Java中间层,可以让开发者在Apac...
    秋天的程序员阅读 1,020评论 0 4
  • 在冲压厂轮岗实习也快十天了,我也渐渐适应了吉利这种快节奏的工作方式,说实话刚开始真的不适应这种中午不休息的工作...
    Edway阅读 139评论 0 0
  • 每个人都会面对到很多不一样的挑战,不一样的艰辛过程,有的人简简单单就熬过去了,也有的人熬不过去。其实一切看你怎么去...
    张艾婷阅读 245评论 0 0