Locust


 
 
 

Python语言的locust接口性能测试

性能测试工具

性能工具首先想到的是Loadrunner或Jmeter,LoadRunner是非常有名的商业性能测试工具,功能非常强大,但不推荐使用该工具,使用比较复杂,工具体积比较大,付费价格不便宜.

Locust简介

基于Python语言,采用纯Python描述测试脚本,并且HTTP请求完全基于Requests库,除HTTP/HTTPS协议外,Locust还可以测试其他协议的系统,只需采用Python调用对应的库进行请求描述即可,Locust的并发机制摒弃了进程和线程,采用协程的机制,协程避免了系统级资源调度,因此可以大幅度提高单机的并发能力.

Locust的常规使用

安装    pip install locust

针对开发的接口    https://api.apiopen.top/getJoke?page=1&count=2&type=video

负载场景

  • 每秒生成2个用户,总共生成60个用户
  • 负载测试5分钟然后查看接口的平均响应时间
from locust import HttpUser, task, between


class QuickstartUser(HttpUser):
wait_time = between(5, 9)

# 测试新实时段子 https://api.apiopen.top/getJoke?page=1&count=2&type=video
@task
def view_item(self):
page = 1
count = 2
type = "video"
self.client.get(f"/getJoke?page={page}&count={count}&type={type}")

分解解释:

  1. 模拟用户定义一个类,继承自HttpUser的client属性,从而为每个用户提供一个属性,该属性是一个实例HttpSession,可用于像要加载测试的目标系统发出HTTP请求
  2. 类中定义了一个wait_time函数,该函数将使模拟用户在每个任务执行后等待5-9秒
  3. 通过修饰两个方法来声明两个任务@task()    传入参数在选择任务的时候,传入2表示有2倍的选择任务机会,越大倍数越高
  4. 此外还声明了on_start方法,每个模拟用户在启动时,都会调用具有该名称的方法
  5. 如果将测试代码放在当前目录下的locustfile.py,直接运行locust就会执行该测试用例;如果在其他目录位置,使用locust -f 文件绝对路径

locust的页面解释

 首页

  1. Number of users to simulate    设置模拟用户数
  2. Hatch rate(users spawned/second)    每秒产生的虚拟用户数
  3. 但是Start swarming    开始运行性能测试

测试报告页

  1. Type    请求的类型
  2. Name    请求的路径
  3. request    当前请求的数量
  4. fails    当前请求失败的数量
  5. Median    中间值
  6. Average    平均值,所有请求的平均响应时间
  7. Min    请求的最小服务器响应时间
  8. Max    请求的额最大服务器响应时间
  9. Content Size    单个请求的大小,单位字节
  10. reqs/sec    每秒中请求的个数
  11. 点击Charts菜单可以查看性能图表

locust的分解教程

wait_time属性

用于确定模拟用户在执行任务之间等待多长时间

最常见的是between,模拟用户在每次执行任务后等待介于最小值和最大值之间的随机时间,其他内置的等待时间函数时constant和constant_pacing    wait_time=between(5,15)

weight属性

如果文件存在多个用户类,并且希望模拟更多特定类型的用户,则可以在这些类上设置一个weight属性,比如WebUser可能是MobileUser的三倍

class WebUser(User): weight = 3 ... class MobileUser(User): weight = 1 ...

主机属性

一般在locust启动时或者命令行中执行该选项指定(locust -f 绝对路径 --host="https://ww.w.baidu.com")

如果在用户类中声明了主机属性,则--host在命令行货web请求中未指定任何主机属性的情况下将使用该属性

on_start和on_stop方法

用户和TaskSet类可以声明一个on_start方法或on_stop方法,用法跟selenium中setup、setdown用法类似

  1. on_start    在开始运行时将调用它的方法,对于TaskSet,on_start方法在模拟用户开始执行时被调用
  2. on_stop    在停止运行时调用它的方法

test_start和test-stop事件

如果需要在负载测试的呃开始或结束时运行一些代码,则使用test_start和test_stop事件,可以在locustfile的模块级别为这些事件设置侦听器

from locust import events @events.test_start.add_listener def on_test_start(**kwargs): print("A new test is starting") @events.test_stop.add_listener def on_test_stop(**kwargs): print("A new test is ending")

使用http客户端

HttpUser的每个实例在client属性中都有一个实例,在HttpSession类实际上是一个子类ruquest.Session,可以用来做HTTP请求,将使用报告给用户get、post、put、delete、head、patch和options方法

在没有UI的情况下运行locust

希望在某种自动化流程运行locust,结合headless标志与-u和-r一起使用

locust -f locust_files/my_locust_file.py --headless -u 1000 -r 100

设置测试时间限制(一旦时间到,locust将关闭)

locust -f locust_files/my_locust_file.py --headless -u 1000 -r 100 --run-time 1h30m

通过更快的HTTP客户端提高Locust的性能

子类FastHttpUser而不是HttpUser(需要注意的是FastHttpUser使用具有稍微不同的API的其他客户端实现,所以它可能并不总是可以替代HttpUser。)

from locust import task, between from locust.contrib.fasthttp import FastHttpUser class MyUser(FastHttpUser): wait_time = between(2, 5) @task def index(self): response = self.client.get("/")

待续...


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM