性能测试工具 Locust 源码浅析

目录

前言:

为什么要做工具评测

为什么要解析 Locust 源码

Locust 的执行流程

VUser 的执行流程


前言:

Locust 是一个开源的性能测试工具,可以帮助我们快速地进行网站性能测试和压力测试。Locust 采用了 Hadoop 和 NGINX 的设计思想,可以支持大规模的并发请求,并且具有非常高的可扩展性和灵活性。在实际的应用中,Locust 已经被广泛地使用,包括阿里巴巴、腾讯、百度等大型公司。

为什么要做工具评测

作为性能测试的老司机们而言,要么对各大性能测试工具的特性都了然于心了,要么已经使用 “惯” 了手头上的工具;他们是不会没事做个性能评测的,只有新手们才会认认真真的、按部就班的从第一步走起。

而对于性能测试而言,首要的任务自然是选择工具了。所以就有了性能测试工具评测这一趴!

为什么要解析 Locust 源码

由于 Python 是我的主语言,所以在选择性能工具评测的时候,自然是会多 “关照” 下 Locust 了。因为对评测的结果不是很满意,所以就乘着兴致顺便看了下源码。而本文就是对 Locust 源码解析的简述。

Locust 的执行流程

首先,来看下 Locust 的执行命令如下:

locust -f performan.py --host http://www.testqa.cn --no-web -c 10 -r 5 -t 50s
# 执行performan.py进行性能测试,并发数为10,每秒启动5个并发,执行时间为50秒

那么执行了这一条语句后,Locust 究竟在后台做了哪些事情呢?请看下面的程序执行流程。

|--Python进程
    |--主线程
        |--参数解析(-f、--host等)
        |--性能场景脚本(-f参数后的文件名)加载、分析VUser数量
        |--协程1(local、master、slave)
            |--计算各VUser的并发数占比(按VUser的权重)
            |--生成VUser启动列表
            |--启动VUser协程组
            |        |--子协程1(对应一个VUser)
            |        |--...
            |        |--子协程N
            |               |--获取VUser任务集
            |               |--循环执行任务(顺序、按权重)
            |               |       |--嵌套执行子任务
            |               |--执行指定时间后停止(需设定)
            |
            |--协程组阻塞等待

接下来,我们一个个的来过一下。首先启动进程和主线程这个不用讲,所有的程序都是一样的。然后再是参数解析,这个也是大多数程序都会提供的常规逻辑。

在解析-f 参数成功之后(没有指定-f 参数则不会启动成功),会去自动的导入该脚本模块;再通过 python 的自省能力来检查脚本中的 VUser 类,主要检查继承自 Locust 且带有 task_set 属性的子类;一个子类相当于一个 VUser。通过-l 参数则可以直接列出脚本中所有的 VUser 名称且不会执行脚本。

当 VUser 类都检查完毕之后,会把这些 VUser 类收集到一个列表中去;之后就会根据指定的启动模式(local、no-web、master、slave)来启动一个协程,并且会把 VUser 列表和解析后的命令行参数内容都作为参数传递过去。

在该协程中会先计算各 VUser 的权重,这会影响 VUser 被执行的次数。具体的实现代码如下:

def wei
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值