• 0
  • 0
分享

前言

做为一个压测工具(库),[locust](http://locust.io/) 其实解决这么一个问题:AB 之类压测工具不能编写复杂的因果逻辑,而现实场景中,待压的服务往往是有一套完整执行流程的,比如 APP 要访问一个 API,是需要先鉴权(验明不是非 APP 访问),再登录换 Token,然后才是 API 调用……

这一切,在 locust 中都很容易实现,本质上,应用 locust 做压测,就是在写 Python 程序,只是它集成了一套不错的 UI,外加并发的benchmark功能。

至于写个压测为什么要用Python,是因为:这玩意心智负担低,你谷歌SO复制粘贴一把梭,直接上手就能写,大脑无需切换context,调试成本也低,没有比这语言更棒的了。

一、Locust介绍

Locust是一个容易使用、分布式的压力测试工具。它是用于网站压力测试(或其它系统)并找出多少用户一个系统可以承载。

在测试过程中,策略就是一个Locust的蠕虫将会攻击你的网站。每一个locust的行为(或你使用的测试用户)是你自己定义的,并且蠕虫进程从一个网页视图中被实时监测。这样会帮助你来实现测试,在真实用户使用前定义系统的瓶颈。

Locust是完全基于事件的,因此可以在单台机器中支持数以千计的用户在线。和其它基于事件的程序相比较,它是不需要使用回调的。相反,它通过[gevent](https://link.juejin.im?target=http%3A%2F%2Fwww.gevent.org%2F)使用轻量级的进程。每一个locust测试你的网站时,实际上是真实的在内部运行它自己的进程(或greenlet,准确的说)。这样就允许你不使用复杂的回调方法,而是使用Python编写复杂的场景。

正如官网所说,[Locust](http://locust.io/)是一个 open source load testing tool,Define user behaviour with Python code,哈,一看是 Python 就对它有天然的好感。

Locust 的使用很简单也很方便,它提供了一个 python lib、一个命令行工具和一个 web UI,用户通过自己写 code 来定义测试用例,通过运行 locust cli 来执行测试,通过 web 界面查看测试结果。

对于程序员(特别是 Python 程序员)来讲,Locust另外一个优势就是,你不用去学不同工具为了定义测试用例而设计的不同的 DSL,直接写 code,通俗易懂。

二、locust骨架

一个 locust 压测程序的最简配置就是一个 .py 程序文件,按照约定,我们给它命名为 locustfile.py,它大概由这么两部分组成:

 一个 [TaskSet 类](http://docs.locust.io/en/latest/writing-a-locustfile.html#taskset-class):里面放置你需要测试的各种任务,这些任务用 @task 装饰器来标记(洋气)

一个 [Locust 类](http://docs.locust.io/en/latest/writing-a-locustfile.html#the-locust-class):它的一个实例就代表一个了用户,同时它提供了用户并发访问的能力;它的 task_set 成员需要引用  TaskSet 类,那是它要执行的任务。

当然,locustfile.py 还有很多实用的配置,如 父子任务/等待时长/权重 等设置,细节可参见 [官网文档](http://docs.locust.io/en/latest/writing-a-locustfile.html)。

三、loucst的安装和使用

安装

使用 pip install locustio安装 locustio。

1.png

loucst安装

但是pip没有安装成功,前往https://pip.readthedocs.io/en/stable/installing/#install-pip 下载pip并安装。

在osx 中,需要手动安装libevent, brew install libevent.

使用

使用locust -h查看帮助,我们编写一个测试,需要编写一个locustfile.py文件,如下面的简单实例:

2.png

随机执行

随机执行代码

代码分析:

定义了一个Locust任务,里面定义了两个类,一个UserBehavior类,用于定义测试业务,一个WebsiteUser类,用于定义模拟用户,我们定义一个模拟用户在执行任务之间应该等待多长时间

顺序执行:用@task 构造器

3.png

顺序执行

四、启动运行locust

1.输入如下指令

进入cmd

进入到项目所在的目录,执行以下命令,然后按回车键

locust -f d:/work/test/locustio.py --host=https://www.baidu.com

locustio.py为测试脚本,https://www.baidu.com为测试的网站。


4.png

启动locust

2.打开locust的web界面,浏览器访问:http://127.0.0.1:8089或localhost:8089 

5.pnglocust的web界面

locust的web界面分析:

第一行Number of users to simulate是模拟用户的数量(虚拟用户数)

第二行Hatch rate (users spawned/second)表示产生模拟用户的速度

填写完成后点击“Start swarming”即可开始测试

五、分析测试结果


6.png

locust性能参数界面

性能测试参数

Type: 请求的类型,例如GET/POST。

Name:请求的路径。这里为百度首页,即:https://www.baidu.com/

request:当前请求的数量。

fails:当前请求失败的数量。

Median:中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值。

Average:平均值,单位毫秒,所有请求的平均响应时间。

Min:请求的最小服务器响应时间,单位毫秒。

Max:请求的最大服务器响应时间,单位毫秒。

Content Size:单个请求的大小,单位字节。

reqs/sec:是每秒钟请求的个数。

在这个过程中,可以随时停止测试,调整参数,当然,也可以在测试数据收集完成后,导出测试结果:

7.png

测试结果

图形界面显示

8.png

图形界面显示

停掉python命令后,也可以看到一些测试数据:

9.png

测试数据

六,命令行执行(取消web显示界面)

命令行执行

locust-f test1.py --host=https://www.baidu.com --no-web -c 10 -r 2 -t 1m

启动参数:

–no-web 表示不使用Web界面运行测试。

-c 设置虚拟用户并发数。

-r 设置每秒启动虚拟用户数执行的次数。

-t 设置设置运行时间。

Locust也可以做分布式执行,需要装一个pyzmq。

性能测试首先而在于分析性能测试的需求,设计性能测试场景,尽可能的模拟真实环境中的压力(正常和异常情况)。然后结果是考察并发用户数、响应时间、tps这类指标。


本文为51Testing经授权转载,转载文章所包含的文字来源于作者:keitwo。如因内容或版权等问题,请联系51Testing进行删除。原文链接:https://www.jianshu.com/p/a19ea7ad0d29。


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 读者提问:『阿常你好,使用 Jmeter 做性能测试,如何模拟多个不同的用户同时登录,总共有几种方法 ?』阿常回答:阿常所知的方法有如下两种:1、CSV Data Set Config本地创建文件,保存为 csv 格式,里面保存用户名和密码。CSV Data Set Config 选择本地创建好的文件,设置变量名。(后续在需要传参的请求中,引用变量 ${username},${password})2、创建JDBC请求获取登录账密Jmeter 创建JDBC请求获取登录账密,结果存储到变量中,依次传给登录接口。具体可以查看阿常之前写过的文章,jmeter创建JDBC请求,返回多...
            0 0 2833
            分享
          • 原文地址(手机阅读体验更佳):https://mp.weixin.qq.com/s/cMqkkZhBF0DWEyxG745nWg送走最后一车货,最后三个工人,老王吃力的关上大铁门。左手从口袋摸出一盒烟,轻轻一颠,滑落一根,右手娴熟的夹住。掏出打火机,点燃,一丝青烟腾起,萦绕在指头。夕阳穿过玻璃,照射在伤痕累累的旧机器上,空旷而寂静。面对空无一人的厂房,老王想起父亲带他来厂房的那个清晨:阳光明媚,厂房异常热闹,忙忙碌碌的嘈杂声格外喜庆。转眼几十年过去了,厂子从织布到纺丝,从生产手套到加工衣服,终究还是走到了关闭的地步。他听说这是低端制造,利润少、污染大。老王不懂这些,但是他心里清楚东西不好卖了,...
            1 1 1334
            分享
          •   据BusinessKorea报道,苹果芯片供应商台积电明年有望交付 2 纳米芯片技术。预计苹果公司将于明年把其定制芯片转移到 2 纳米工艺,以充分利用台积电的先进技术。据悉,台积电正满怀信心地推进 2 纳米节点。这家芯片制造商此前宣布"2 纳米工艺的开发进展顺利",量产有望在 2025 年实现。  有传言称,由于首次应用全栅极(GAA)技术面临技术挑战,台积电可能被迫将其 2 纳米工艺的全面量产推迟到 2026 年。但公司方面辟谣称,"应用 GAA 时的良率已达到目标的 90%",表明技术研发已取得了实质性进展。苹果公司首席运营官杰夫-威廉姆斯(Je...
            0 0 955
            分享
          •   在软件测试的发展历史上,曾发生过很多次因为软件出现bug而造成的重大事故,小编特别整理了历史上震惊全球的5个经典案例↓↓↓↓↓↓图源:网络  众所周知,软件测试是一项比较细致的工作,很多时候会显得有些枯燥。因此,除了专业技能和业务知识外,还需要从业人员具备良好的耐心、专注力和责任感,非常考验从业人员的心理素质和业务能力。  关于一名优秀软件测试工程师所必备的专业素质!本文总结出以下几点:  1.具备严谨、耐心、认真、负责的态度  作为一名软件测试工程师,必须要对你所测的产品负责,需要以严谨的态度,不放过每一个细节,尽可能找出所有的bug。虽然不能做到完全没有bug,但作为一名负责任的测试人...
            0 0 878
            分享
          • 1. qa 是如何工作的,如何保证产品质量的?首先制定质量保证计划->根据过程清单和产品清单对组织级和项目级内容进行检查->不符合项记录在不符合项问题记录表中、反馈项目精力,跟踪问题知道问题解决->编写质量保证报告,反馈给公司领导2.你是如何进行组织级项目的检查?首先,明确组织级的角色有哪些?如 epg、cr、ot等,再针对每个角色的过程和产品进行检查EPG角色:根据《过程检查单》对EPG过程进行检查,EPG工作内容包括(过程管理)和(过程资产开发),查看改进过程是否按照《过程改进计划》进行,是否建立组织财富库,是否定期召开过程改进会议,是否编写《EPG月度报告》;[管理性能...
            0 0 3638
            分享
      • 51testing软件测试圈微信