首页 > 编程语言 >Python locust工具使用详解

Python locust工具使用详解

时间:2022-11-16 07:55:27浏览次数:57  
标签:task Python self locust client 详解 master import

今年负责部门的人员培养工作,最近在部门内部分享和讲解了locust这个工具,今天再博客园记录下培训细节。相信你看完博客,一定可以上手locust这个性能测试框架了。

一、简介

1、优势

locust是python语言开发的一款的开源的的性能测试框架,他比jmeter更加的轻量级,主要是通过协程(gevent)的方式去实现并发,通过协程的方式可以大幅提高单机的并发能力,同时避免系统级的资源调度。locust具有开源性、分布式、支持高并发,支持webUI的操作方式。

2、劣势

locust的图表功能较弱,只展示了很少的数据

locust不支持监控服务端的状态,需要借助第三方工具,或者自己写代码去实现

二、安装

locust的安装非常简单,直接通过pip的方式就可以安装

1 2       pip install locust

三、locust的库和方法介绍

1、from locust import task

通过task可以把某个函数指定为任务,直接@task装饰对应的函数即可,在@tast(n)中可以有一个参数n,意思是这个任务的占比是多少

2、from locust import TaskSet

需要定义一个类,继承TaskSet这个类,这个是是一个任务集的概念,这个类中可以包括多个task

3、from locust import HttpUser

需要定义一个类,这个类要继承HttpUser,通过这个定义的类我们可以执行具体的任务集

看了上面的介绍,可能大家有点云里雾里的,下面我们由浅入深看代码

四、实战代码V1.0(入门代码)

1、代码如下

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 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

2、进入代码的目录,执行如下命令

3、打开浏览器,输入http://localhost:8089/

4、参数讲解

Number of total users to simulate 模拟的总的用户数

Spawn rate 每秒钟新增的用户数

五、实战代码V1.1(入门代码)

1、任务集类中的on_start方法

1 2 3 4 5 class My_task_set(TaskSet):        #添加初始化方法     def on_start(self):         print("类似类中的构造方法,每个用户在任务开始前,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性")

这个方法类似pytest框架中的前置条件或者说是面向对象中的构造方法

2、任务集类中的on_start方法

1 2 def on_stop(self):     print("类似类中的后置方法,每个用户在任务开始后,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性")

六、实战代码V1.2(入门代码)

1、如何判断请求是失败还是成功

2、然后再响应的消息中指定判断逻辑即可,success即为成功,failure即为失败

七、实战代码V1.3(全量代码)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 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                          每秒钟产生的用户数

八、常见问题

1、cookies

locust中的client会自动帮我们处理cookies。类似request.session(),所以如果我们登陆的时候,只需要在on_start中登陆一次就可以了

2、多统计api的问题

如果在locust中,如果url是不需要统计,则我们不要用clent去访问api,应该用request去访问,这样就locust就不会统计request库发起的请请求

九、分布式调用的问题

1 2 3 4 5 6 7 一旦单台机器不够模拟足够多的用户时,Locust支持运行在多台机器中进行压力测试。    为了实现这个,你应该在 master 模式中使用--master标记来启用一个 Locust 实例。这个实例将会运行你启动测试的 Locust 交互网站并查看实时统计数据。<br>master 节点的机器自身不会模拟任何用户。相反,你必须使用 --slave 标记启动一台到多台 Locustslave 机器节点,与标记 --master-host 一起使用(指出master机器的IP/hostname)。    常用的做法是在一台独立的机器中运行master,在slave机器中每个处理器内核运行一个slave实例。    注意:master 和每一台 slave 机器,在运行分布式测试时都必须要有 locust 的测试文件。
1 2 3 4 5 6 7 在 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工具使用详解的详细内容,更多关于Python locust工具的资料请关注脚本之家其它相关文章!

标签:task,Python,self,locust,client,详解,master,import
From: https://www.cnblogs.com/sunyllove/p/16894675.html

相关文章

  • python神经网络编程
    计算机系统:输入->(计算)->输出建立模型可以模拟事情的运作神经网络的基本思想:持续细化误差值。大的误差需要大的修正值,小的误差需要小的修正值。尝试得到一个答案,并多......
  • Python 文本文件拖上转自适应图片 - 学习笔记(2022.11.16)
    Python文本文件拖上转自适应图片功能:1、支持拖拽执行2、文本文件转为自适应尺寸图片1importre2importos3importsys4importtime5fromPI......
  • 如何正确遵守 Python 代码规范
    前言无规矩不成方圆,代码亦是如此,本篇文章将会介绍一些自己做项目时遵守的较为常用的Python代码规范。命名大小写模块名写法:module_name包名写法:package_nam......
  • python 中 循环结构同时传入多个参数
     001、>>>list1=[("aa",100,400),("bb","kk","yy"),(33,400,500)]>>>fori,j,kinlist1:##利用列表、元组同时传入多个参数...print(i,......
  • python 中统计每一个字符串中每一个字符出现的次数
     001、直接使用字典进行统计>>>str1="aaaabbcdddefff"##测试字符串>>>dict1=dict()>>>foriinstr1:##利用条件分支进行判断.........
  • Python 中的 defaultdict 数据类型
     首先,defaultdict是dict的一个子类。通常Python中字典(dict)是通过键值对来存取的,当索引一个不存在的键时,就会引发keyerror异常。那么,defaultdict就可以解决这个......
  • python中的公共操作和推导式
    #1.公共操作#del删除删除变量或指定容器内数据变量,容器里面的值#+将两个相同类型序列进行连接字符串,列表,元组print('1.公共操作')print('a'+'b')print([......
  • python-if where for-函数
    一、if-where-for1、If:判断语句: if+条件:              elif+条件:              else:后面不能加条件实......
  • python 中 filter函数的用法
     和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。 ......
  • python 中内建函数map的用法
     map函数会根据提供的函数对指定序列做映射。通过定义可以看到,这个函数的第一个参数是一个函数,剩下的参数是一个或多个序列,返回值是一个集合。map的作用是以参数序列中......