脚本宝典收集整理的这篇文章主要介绍了性能测试篇:六:locust性能工具使用,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
1:locust简介
Locust是一个用于可扩展的,分布式的,性能测试的,开源的,用Python编写框架/工具,它非常容易使用,也非常好学 它的主要思想就是模拟一群用户将访问你的网站。每个用户的行为由你编写的python代码定义,同时可以从Web界面中实时观察到用户的行为。Locust完全是事件驱动的,因此在单台机器上能够支持几千并发用户访问。 locust是基于协程的,异步执行代码的与其它许多基于事件的应用相比,Locust并不使用回调,而是使用gevent,而gevent是基于协程的,可以用同步的方式来编写异步执行的代码。每个用户实际上运行在自己的greenlet(协程)中
2:locust特点
1:不需要编写笨重的UI或者臃肿的XML代码,基于协程而不是回调,脚本编写简单易读2:有一个基于web简洁的HTML+JS的UI用户界面,可以实时显示相关的测试结果;3:支持分布式测试,用户界面基于网络,因此具有跨平台且易于扩展的特点;4:所有繁琐的I/O和协同程序都被委托给gevent,替代其他工具的局限性;
3:进程、线程和协程的区别
1、进程 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。 每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存, 所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。 2、线程 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位. 线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈), 但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。 3、协程 协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。 协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈, 直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。打开一个软件就是一个进程一个进程下多个线程,比如多个qq聊天,cpu调度的最小单位, jmeter使用多线程的方式
4:locust与jmeter等其他性能压测工具的区别
工具 区别jmeter 需要在UI界面上通过选择组件来“编写”脚本,模拟的负载是线程绑定的, 使用的是线程 意味着模拟的每个用户,都需要一个单独的线程。单台负载机可模拟的负载数有限locust 通过编写简单易读的python代码完成测试脚本,基于事件,同样配置下,单台负载机可模拟的负载数远超jmeter 协程更小,负载数远超jmeter的使用jmeter和locust都是开源的
PS:但locust的局限性在于,目前其本身对测试过程的监控和测试结果展示,不如jmeter全面和详细,需要进行二次开发才能满足需求越来越复杂的性能测试需要。
1:开源许可证 工具许可范围的问题是最重要的问题之一,因为您可能想知道是否需要支付额外的第三方工具来完成负载测试。 如果某个工具是开源的,那么您几乎可以实现为性能测试设置的任何目标,而无需任何额外付款。 开源JMeter和Locust也不例外 JMeter和Locust都提供了许可软件许可证,该许可证支持免费软件,对软件的分发方式提出最低要求。 JMeter是由Apache开发的,它基于Apache License 2.0, 而Locust是由一个由社区驱动的开发人员组成的小团队开发的基于MIT许可证。在这两种情况下,这些工具都是开源的,允许您自由使用它们,而不受任何使用限制2:负载测试创建和维护 性能测试工作流程有三个主要步骤:创建,运行和分析。 一般第一步是最耗时的。 编写JMeter性能测试的最常用方法是使用其GUI模式。不需要写代码,简单,JMeter GUI模式提供了一个桌面客户端,允许您轻松创建测试,而无需编写单行代码(直到您需要创建棘手的测试),所以最简单的场景可能如下所示: JMeter非常简单,通常,即使是没有经验的工程师也可以毫无困难地上手。 但是如果需要,您可以使用Java在GUI和非GUI模式下使用代码。 但是,由于脚本实现的复杂性(因为JMeter旨在与GUI模式一起使用)以及缺乏如何制作此类脚本的文档,因此这种方式在JMeter社区中并不流行 Locust则需要python编程基础。代码设计请求:参数化,集合点等都需要通过代码实现3:支持的协议 理想情况下,您应该能够使用尽可能少的工具测试所有工具,只要它不会影响测试质量。 使用JMeter,您可以使用完整的内置函数和第三方插件,在一个地方创建所有内容的性能测试。 您无需编码即可测试不同的协议甚至数据库。 这些包括JDBC,FTP,LDAP,SMTP等。JMeter还可以通过jar包扩展,比如加载jython,jmeter里可以使用python脚本。 根据文档,Locust主要用于基于HTTP Web的测试。但可以扩展其默认功能并创建自定义Python函数来测试可以使用Python编程语言进行测试的任何内容。4:并发用户数 JMeter和Locust有完全不同的方式来处理机器资源。JMeter有一个基于线程的模型,它为每个用户分配一个单独的线程。 每个步骤的线程分配和基准测试需要大量资源,这就是为什么JMeter对于您可以在一台机器上模拟的用户数量非常有限的原因。 您可以在一台计算机上运行的用户数取决于许多因素,如脚本复杂性,硬件,响应大小等。 如果您的脚本很简单, JMeter允许您在一台机器上运行多达数千个,但脚本执行逐渐变得不可靠 Locust有完全不同的用户模拟模型,它基于事件和异步方法(协程),以gevent coroutine作为整个过程的基石。 这种实现允许Locust框架在一台机器上轻松模拟数千个并发用户,即使是在非常规的笔记本电脑上,也可同时运行内部有许多步骤的复杂测试jmeter一般机器大概也就跑个1000左右线程就不行了,需要分布式了locust可以并发更大的用户数5:增强灵活性 这两个工具提供相对相同的生成负载的方式 - 您可以指定在性能测试期间要使用的用户数以及它们应该加速的速度 在JMeter中,您可以在指定字段的“线程组”控制器中配置负载:但是JMeter还有其他插件,可以让您配置非常灵活的负载。 最好的方法之一是使用Ultimate Thread Group ,它允许用户制作非常具体的加载模式: Locust有不同的方法。 当您运行性能脚本时,Locust会自动在http://localhost:8089上启动Web界面的服务器, 该界面为您提供仅指定线性负载的输入元素, 当然也可以命令行执行通过参数定制。6:脚本录制 这是JMeter具有强大优势的地方,因为它具有脚本录制的内置功能,而Locust根本没有此功能。 除此之外,还有许多第三方插件可以为JMeter制作脚本录制。 记录此类脚本最方便的方法之一是使用BlazeMeter chrome扩展。7:测试监控 JMeter和Locust都提供了强大的内置功能来监控性能脚本并分析您的测试结果。 JMeter有许多不同的元素叫做监听器。 每个侦听器都提供特定类型的监视,你也可以使用许多现有的自定义监听器扩展默认库。另一方面,JMeter监听器在其运行的机器上消耗大量资源。 这就是为什么通常,JMeter是以非GUI模式执行的,没有任何监听器或监控过程,在这种情况下,可使用3方工具,如BlazeMeter 。 Locust的监测能力稍弱,不过几乎提供了所有可用于监控基本负载的信息。在脚本运行期间,Locust运行一个简单的Web服务器
java里暂时没有协程概念,python支持协程所有支持大量的并发jmeter 写java的jar包放入jmeter相当于二次开发了locust二次开发:编写其他功能,继承一些所需要的类,开发一些新的功能
5:locust的安装
locust使用python代码写的 前提:安装python以及pycharm安装locust库pip install locust -i http://pypi.douban.com/simple/ 安装locust库pip install locust -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 如果上面下载不成功,这样下载即可,信任源下载 安装成功后可以输入 pip show locust 命令查看是否安装成功,以及通过 locust -help 命令查看帮助信息。安装 pyzmq 库:分布式需要使用这个库If you intend to run Locust distributed across multiple processes/machines, we recommend you to also install pyzmq. 如果打算运行Locust 分布在多个进程/机器,需要安装pyzmq. 通过pip命令安装。pip install pyzmq -i http://pypi.douban.com/simple/
6:Locust主要由下面的几个库构成
1:gevent
gevent是一种基于协程的Python网络库,它用到Greenlet提供的,封装了libevent事件循环的高层同步API2:flask Python编写的轻量级Web应用框架。3:requests Python Http库4:msgpack-python MessagePack是一种快速、紧凑的二进制序列化格式,适用于类似JSON的数据格式。msgpack-python主要提供MessagePack数据序列化及反序列化的方法。5: six Python2和3兼容库,用来封装Python2和Python3之间的差异性6: pyzmq pyzmq是zeromq(一种通信队列)的Python绑定,主要用来实现Locust的分布式模式运行 当我们在安装 Locust 时,它会检测我们当前的 Python 环境是否已经安装了这些库,如果没有安装,它会先把这些库一一装上。
7:locust原理
locust为什么能够识别写的代码和运行? locust基于两个类,继承两个类才能实现模拟用户行为: TaskSet类:locust里面的类,继承TaskSet类,写一个类继承这个类之后locust才能识别它 这个类主要是模拟请求的行为,任务 主要是为了模拟用户端请求信息信息,@task装饰器让locust识别到哪个是我们的任务 模拟用户的行为 HttpUser类:locust里的类继承HttpUser类,用户类,这个类主要写一些用户的配置信息,比如Host主机地址 思考时间,等一系列信息,通过继承HttpUser类来实现 用户配置类
以上是脚本宝典为你收集整理的性能测试篇:六:locust性能工具使用全部内容,希望文章能够帮你解决性能测试篇:六:locust性能工具使用所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。