第一时间获取测试技术干货! 往期性能专题: 阅读全文需7分钟,作为性能工具实战开篇,请认真读完。 1. 前言在上一篇性能专题的文章:性能专题:性能测试实施全过程指南,已提前剧透告知了,从本篇开始,将结合服务端性能测试的两款常用工具进行实战操作介绍:Jmeter和Locust。 就服务端性能测试而言,工具选择性上面,Jmeter的选择热度和网上已有的学习资料明显高于Locust,也正因如此,本篇计划会以Locust工具系列的实战介绍优先,算是弥补目前市面上Locust学习资料较少的空缺。 整个Locust系列连载内容目录大纲如图1所示,每篇具体的名称和内容后续可能会有所调整,最终以公众号发表的为准: 图1 内容大纲 2. 开篇介绍在学习任何一款新工具之前,首先至少要先了解搞清楚这款工具的“哲学三问”:我是谁(是什么),我从哪里来(为了解决什么问题),我将去哪里(具体是如何实现的)。 关于第一问:是什么,Locust到底是什么呢?先来看一段官网的介绍,如图2所示 官网传送门:https://www./ 图2 Locust官网主页 在图2 官网主页介绍中,有两句对Locust的描述: `An open source load testing tool.` 一个开源负载测试工具。 `Define user behaviour with Python code, and swarm your system with millions of simultaneous users.` 使用 Python 代码来定义用户行为。用它可以模拟百万计的并发用户访问你的系统。 看到这里,相信读者对Locust是什么,有了一个大致的印象,概括起来:Locust是一款开源的性能负载测试工具,且是使用Python代码来定义用户行为的。 3. 进一步认识Loucst当前在网络上针对Locust的教程比较少,不管是中文还是英文,基本都是介绍安装方法和简单的测试案例演示,对于较复杂测试场景的案例演示却基本没有,因此很多工程师都感觉难以将Locust应用到实际的性能测试工作当中。有这类想法的人员,归根结底还是在于没有深入去学习了解Locust这款工具。 对于技术人而言,学习一款新工具,特别还是开源工具,最好的方式就是结合官网文档和项目源码来学习。
关于第二问:Locust为了解决什么问题?从前面我们可以得知,官网对Loucst定位是一款负载测试工具。 而Locust一词英文翻译过来的意思为蝗虫, 原作者之所以选择Locust这个蝗虫名字,估计也是听过这么一句俗语,“蝗虫过境,寸草不生”。寓意为:Locust工具生成的并发请求就跟一大群蝗虫一般,对我们的被测系统发起攻击,并以此检测系统在高并发压力下是否能正常运转。 在官方文档中,关于Locust介绍有这样一段描述: 通过上述官网对Locust的介绍,可以进一步加深认识Locust:它是一款开源的分布式负载测试工具,使用Python代码定义用户行为,完全基于事件驱动,在模拟并发时,Locust基于gevent协程、非阻塞IO来实现网络层的并发请求,可以实现单机模拟生成较高的并发压力。 4. Locust特点、实现Locust是使用Python语言编写实现的开源性能测试工具,具有简洁、轻量、高效的优点,除此之外,还具备如下特点。
关于第三问:具体是如何实现的? 了解过性能测试的同学,应该都清楚,实现性能测试,其中有两个关键:
关于第一点,尽可能模拟到真实用户行为:我们从上述介绍中可以得知,在Locust中,测试场景皆是采用纯Python脚本进行描述的。对于最常见的HTTP(S)协议的系统,Locust采用的是Python的Requests库作为客户端,而对于其它协议类型的系统,Locust也提供了接口,我们只需要采用Python编写对应的请求客户端。换而言之,只要你具备了Python编码能力,并且熟悉业务流程,就能很容易的在Locust中通过Python脚本实现模拟到真实用户行为。 对于第二点,如何实现有效的高并发: LoadRunner 和 Jmeter 这类采用进程和线程的测试工具,都很难在单机上模拟出较高的并发压力。而Locust 的并发机制摒弃了进程和线程,基于事件驱动,采用gevent提供的非阻塞IO和coroutines协程机制。而协程避免了系统级资源调度,由此可以大幅提高单机的并发能力。并且Locust支持分布式多机联合测试,从而可以实现极高的并发数。 6. 小结介绍到这里,相信读者们对Locust已经有了一定的认识,总结归纳成两点:
|
|