前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蝗虫过境,你的系统能扛住吗?

蝗虫过境,你的系统能扛住吗?

作者头像
用户5521279
发布2019-09-09 17:45:49
1.5K0
发布2019-09-09 17:45:49
举报
文章被收录于专栏:搜狗测试搜狗测试

前言

作为一个开源分布式压测工具,Locust其实解决这么一个问题:Locust并发机制摒弃了进程和线程,采用协程机制,从而可以大幅提高单机的并发能力。本质上,应用Locust做压测,就是在写Python程序。

简介

经过一段时间的服务端性能测试,也先后了解及使用过一些性能测试工具,本篇中,向大家推荐Locust这款开源工具。Locust的本意为”蝗虫“,意为由Locust生成的并发请求就跟一大群蝗虫一样,对我们的被测系统进行攻击,以此来检验系统在高并发下的性能。大家可以随意感受下。

将Locust与常用的LoadRunner和Jmeter进行对比,详细参数如下:

通过上述图表,可能大家会觉得,Locust也不怎么样嘛,不支持资源监控,报告分析也是简单图表。那为什么还要选它呢? 我们在考虑选择性能测试工具时,主要考虑2个方面:模拟真实用户操作、模拟有效并发。 先说下模拟用户真实操作。在Locust测试框架中,测试场景是采用Pure Python脚本描述,并且HTTP请求完全基于Requests库。熟悉Requests库的人都知道,这个库能够非常方便的发送请求和处理响应,很多其他编程语言的HTTP库都借鉴它的思路。除了HTTP协议外,Locust也可以测试任意协议的系统,只需要采用Python调用对应的库进行请求即可; 再说一下有效并发。Locust的并发机制采用协程。采用多线程模拟多用户时,线程数会随着并发数的增加而增加,而线程之间的切换需要占用资源,IO阻塞等原因不可避免的造成并发效率下降;正因如此,LoadRunner和Jmeter这类依靠进程和线程的工具,在单机上很难有较高的并发,会受到本机性能的制约。而协程与线程的区别在于,协程避免了系统级资源调度,大大提高了性能。正常情况下,单台普通配置的测试机器可以产生数千的并发量,这是LoadRunner和Jmeter都无法实现的。

脚本编写

那么如何使用Locust进行性能测试呢? 编写Locust脚本,是使用Locust的第一步。简单示例如下:

上述脚本是如何表达测试场景的呢? 首先,该脚本主要包含两个类,一个是UserBehavior,继承自TaskSet;还有一个是WebsiteUser类,继承自HttpLocust,而HttpLocust类继承自Locust。 其中,TaskSet类用于描述用户行为,包括任务执行顺序、挑选下一个任务、执行任务等。

  • @task装饰器定义了不同权重的测试任务,比例为2:1;
  • test_flush表示一个用户行为,此处为post请求/Auroch/flush接口;
  • test_install为请求/Auroch/install接口;
  • Client.get()用于指定请求路径;

在Locust类中,具有一个client属性,对应着客户端的请求能力。

  • task_set:指向一个定义的用户行为类;
  • min_wait:每个任务之间的时间间隔下限;
  • max_wait:每个任务之间的时间间隔上限;

执行测试

(一)单进程运行: 在终端中输入如下命令,执行web类型的测试

此时打开浏览器,访问http://localhost:8089/即可进入Locust的Web管理页面。(默认端口为8089)

其中 Number of users to simulate:设置模拟用户数 Hatch rate (users spawned/second):每秒产生/启动的虚拟用户数 设置好之后,点击Start swarming就可以执行测试了。 (二)多进程分布式运行 不管是单机多进程,还是多机负载模式,运行方式都一样,都是先运行一个master,再启动多个slave 启动master时,需要使用--master参数,master启动后,需要启动slave才能执行测试任务,启动slave需要使用--slave参数。

之后的操作方法同web类型。

测试结果

相比于LoadRunner,Locust结果展示很简单,可以实时在web页面中看到。主要指标包含:并发数,RPS,响应时间,异常率。对于大多数测试场景来说,这几个指标已经足够了。

RPS和平均响应时间这两个指标显示的值都是最近2秒请求响应数据得到的统计值,可以理解为瞬时值。数据走势可以在Charts中看到。

Total Requests per Second:每秒请求数; Response Times(ms):平均响应时间; Number of Users:用户数。

结束语

Locust有很强的可扩展性,当遇到一些复杂的性能测试场景时,可以方便的进行定制化测试。当然,一些性能测试的增强型用法,比如参数化、关联、断言等,都可以通过Python的脚本增强来实现,一起来研究一下吧。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 简介
      • 脚本编写
      • 执行测试
        • 结束语
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档