脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python locust工具使用详解

Python locust工具使用详解

2021-09-17 00:30bai_nian_min_guo Python

这篇文章主要介绍了Python locust工具使用详解,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下

今年负责部门的人员培养工作,最近在部门内部分享和讲解了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. from locust import HttpLocust
  2. from locust import HttpUser
  3. from locust import task
  4. from locust import TaskSet
  5. #指定一个任务集
  6. class My_task_set(TaskSet):
  7.  
  8.  
  9.     #这是某个任务,30是比例,比如这里是30/50
  10.     @task(30)
  11.     def getindex1(self):
  12.         # client就是个requests对象
  13.         # catch_response,告诉locust如何判断请求失败还是成功
  14.         res  = self.client.get("/bainianminguo/p/10952586.html")
  15.  
  16.     @task(20)
  17.     def getindex2(self):
  18.         # client就是个requests对象
  19.         res = self.client.get("/bainianminguo/p/7253930.html")
  20.  
  21.  
  22. class WebSite(HttpUser):
  23.     # 指定要执行哪个任务集
  24.     tasks = [My_task_set,]
  25.     # 请求和请求之间最小的间隔时间
  26.     min_wait = 1000
  27.     # 请求和请求之间最大的间隔时间
  28.     max_waif = 2000

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

Python locust工具使用详解

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

Python locust工具使用详解

4、参数讲解

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

Spawn rate 每秒钟新增的用户数

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

1、任务集类中的on_start方法

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

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

2、任务集类中的on_start方法

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

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

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

Python locust工具使用详解

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

Python locust工具使用详解

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

  1. from locust import HttpLocust
  2. from locust import HttpUser
  3. from locust import task
  4. from locust import TaskSet
  5.  
  6. # locust中的client会自动帮我们处理cookies。类似request.session(),所以如果我们登陆的时候,只需要在on_start中登陆一次就可以了
  7.  
  8. # 如果在locust中,如果url是不需要统计,则我们不要用clent去访问api,应该用request去访问,这样就locust就不会统计request库发起的请请求
  9. #指定一个任务集
  10. class My_task_set(TaskSet):
  11.  
  12.     #添加初始化方法
  13.     def on_start(self):
  14.         print("类似类中的构造方法,每个用户在任务开始前,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性")
  15.  
  16.     def on_stop(self):
  17.         print("类似类中的后置方法,每个用户在任务开始后,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性")
  18.  
  19.     #这是某个任务,30是比例,比如这里是30/50
  20.     @task(30)
  21.     def getindex1(self):
  22.         # client就是个requests对象
  23.         # catch_response,告诉locust如何判断请求失败还是成功
  24.         res  = self.client.get("/bainianminguo/p/10952586.html",catch_response=True)
  25.         if res.code == 200:
  26.             res.success()
  27.         else:
  28.             res.failure("ff")
  29.         print(res)
  30.     @task(20)
  31.     def getindex2(self):
  32.         # client就是个requests对象
  33.         res = self.client.get("/bainianminguo/p/7253930.html")
  34.         print(res)
  35.  
  36. class WebSite(HttpUser):
  37.     # 指定要执行哪个任务集
  38.     # task_set = My_task_set
  39.  
  40.     tasks = [My_task_set,]
  41.     # 请求和请求之间最小的间隔时间
  42.     min_wait = 1000
  43.     # 请求和请求之间最大的间隔时间
  44.     max_waif = 2000
  45.  
  46.  
  47. # Number of total users to simulate   模拟的用户数
  48. # Spawn rate                          每秒钟产生的用户数

八、常见问题

1、cookies

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

2、多统计api的问题

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

九、分布式调用的问题

  1. 一旦单台机器不够模拟足够多的用户时,Locust支持运行在多台机器中进行压力测试。
  2.  
  3. 为了实现这个,你应该在 master 模式中使用--master标记来启用一个 Locust 实例。这个实例将会运行你启动测试的 Locust 交互网站并查看实时统计数据。<br>master 节点的机器自身不会模拟任何用户。相反,你必须使用 --slave 标记启动一台到多台 Locustslave 机器节点,与标记 --master-host 一起使用(指出master机器的IP/hostname)。
  4.  
  5. 常用的做法是在一台独立的机器中运行master,在slave机器中每个处理器内核运行一个slave实例。
  6.  
  7. 注意:master 和每一台 slave 机器,在运行分布式测试时都必须要有 locust 的测试文件。
  1. master 模式下启动 Locust:
  2.  
  3. locust -f my_loucstfile.py --master
  4.  
  5. 在每个 slave 中执行(192.168.0.14 替换为你 msater IP):
  6.  
  7. locust -f my_locustfile.py --slave --master-host=192.168.0.14

Python locust工具使用详解

以上就是Python locust工具使用详解的详细内容,更多关于Python locust工具的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/bainianminguo/p/14503916.html

延伸 · 阅读

精彩推荐