扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
小编给大家分享一下Python locust工具怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
创新互联是一家集网站建设,延寿企业网站建设,延寿品牌网站建设,网站定制,延寿网站建设报价,网络营销,网络优化,延寿网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写自动化脚本,随着版本的不断更新和新功能的添加,常用于用于开发独立的项目和大型项目。
locust是python语言开发的一款的开源的的性能测试框架,他比jmeter更加的轻量级,主要是通过协程(gevent)的方式去实现并发,通过协程的方式可以大幅提高单机的并发能力,同时避免系统级的资源调度。locust具有开源性、分布式、支持高并发,支持webUI的操作方式。
locust的图表功能较弱,只展示了很少的数据
locust不支持监控服务端的状态,需要借助第三方工具,或者自己写代码去实现
locust的安装非常简单,直接通过pip的方式就可以安装
pip install locust
通过task可以把某个函数指定为任务,直接@task装饰对应的函数即可,在@tast(n)中可以有一个参数n,意思是这个任务的占比是多少
需要定义一个类,继承TaskSet这个类,这个是是一个任务集的概念,这个类中可以包括多个task
需要定义一个类,这个类要继承HttpUser,通过这个定义的类我们可以执行具体的任务集
看了上面的介绍,可能大家有点云里雾里的,下面我们由浅入深看代码
from locust import HttpLocust from locust import HttpUser from locust import task from locust import TaskSet #指定一个任务集 class My_task_set(TaskSet): #这是某个任务,30是比例,比如这里是30/50 @task(30) def getindex1(self): # client就是个requests对象 # catch_response,告诉locust如何判断请求失败还是成功 res = self.client.get("/bainianminguo/p/10952586.html") @task(20) def getindex2(self): # client就是个requests对象 res = self.client.get("/bainianminguo/p/7253930.html") class WebSite(HttpUser): # 指定要执行哪个任务集 tasks = [My_task_set,] # 请求和请求之间最小的间隔时间 min_wait = 1000 # 请求和请求之间较大的间隔时间 max_waif = 2000
Number of total users to simulate 模拟的总的用户数
Spawn rate 每秒钟新增的用户数
class My_task_set(TaskSet): #添加初始化方法 def on_start(self): print("类似类中的构造方法,每个用户在任务开始前,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性")
这个方法类似pytest框架中的前置条件或者说是面向对象中的构造方法
def on_stop(self): print("类似类中的后置方法,每个用户在任务开始后,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性")
from locust import HttpLocust from locust import HttpUser from locust import task from locust import TaskSet # locust中的client会自动帮我们处理cookies。类似request.session(),所以如果我们登陆的时候,只需要在on_start中登陆一次就可以了 # 如果在locust中,如果url是不需要统计,则我们不要用clent去访问api,应该用request去访问,这样就locust就不会统计request库发起的请请求 #指定一个任务集 class My_task_set(TaskSet): #添加初始化方法 def on_start(self): print("类似类中的构造方法,每个用户在任务开始前,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性") def on_stop(self): print("类似类中的后置方法,每个用户在任务开始后,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性") #这是某个任务,30是比例,比如这里是30/50 @task(30) def getindex1(self): # client就是个requests对象 # catch_response,告诉locust如何判断请求失败还是成功 res = self.client.get("/bainianminguo/p/10952586.html",catch_response=True) if res.code == 200: res.success() else: res.failure("ff") print(res) @task(20) def getindex2(self): # client就是个requests对象 res = self.client.get("/bainianminguo/p/7253930.html") print(res) class WebSite(HttpUser): # 指定要执行哪个任务集 # task_set = My_task_set tasks = [My_task_set,] # 请求和请求之间最小的间隔时间 min_wait = 1000 # 请求和请求之间较大的间隔时间 max_waif = 2000 # Number of total users to simulate 模拟的用户数 # Spawn rate 每秒钟产生的用户数
locust中的client会自动帮我们处理cookies。类似request.session(),所以如果我们登陆的时候,只需要在on_start中登陆一次就可以了
如果在locust中,如果url是不需要统计,则我们不要用clent去访问api,应该用request去访问,这样就locust就不会统计request库发起的请请求
一旦单台机器不够模拟足够多的用户时,Locust支持运行在多台机器中进行压力测试。 为了实现这个,你应该在 master 模式中使用--master标记来启用一个 Locust 实例。这个实例将会运行你启动测试的 Locust 交互网站并查看实时统计数据。
master 节点的机器自身不会模拟任何用户。相反,你必须使用 --slave 标记启动一台到多台 Locustslave 机器节点,与标记 --master-host 一起使用(指出master机器的IP/hostname)。 常用的做法是在一台独立的机器中运行master,在slave机器中每个处理器内核运行一个slave实例。 注意:master 和每一台 slave 机器,在运行分布式测试时都必须要有 locust 的测试文件。
在 master 模式下启动 Locust: locust -f my_loucstfile.py --master 在每个 slave 中执行(192.168.0.14 替换为你 msater 的IP): locust -f my_locustfile.py --slave --master-host=192.168.0.14
看完了这篇文章,相信你对“Python locust工具怎么用”有了一定的了解,如果想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流