性能测试工具Locust

Locust是一个基于Python的开源性能测试工具,以其简单易读的代码、分布式能力及Web界面展示测试结果而著称。它可以测试网页、应用和系统,但监控和结果展示不如JMeter详尽,可能需要二次开发。文中提供了测试脚本示例,包括任务定义、事件监听以及用户类和任务集的创建。
摘要由CSDN通过智能技术生成

Locust是一个用python开发的开源性能测试工具。通过编写简单易读的代码完成测试脚本,基于事件,同样配置下,单台负载机可模拟的负载数远超jmeter

官方API解读:性能测试工具--Locust官方文档(API)解读(全)-腾讯云开发者社区-腾讯云

Locust的特点


1、用Python编写测试方案 不需要在UI界面上点击,只需要正常编写代码即可,灵活性比较强

2、分布式&可扩展 Locust 支持分布在多台计算机上的运行负载测试(可以多台机器并行开搞)。

3、统计结果基于Web界面 Locust 有一个简单的用户界面,可实时显示相关的测试详细信息,并且统计结果界面是基于网页的,而网页是天生跨平台的,所以 Locust 是跨平台且易于扩展的

4、可以测试任何网页/应用/系统 只需用 python 编写想要测试的方案,然后放”蝗虫”去怼需要测试的项目就可以了,非常简单

locust的局限性在于,目前其本身对测试过程的监控和测试结果展示,不如jmeter全面和详细,需要进行二次开发才能满足需求越来越复杂的性能测试需要。

安装

pip install locust

 测试脚本

import time
from locust import HttpUser, task, between, events
import urllib3
from locust.contrib.fasthttp import FastHttpLocust
urllib3.disable_warnings()


@events.test_start.add_listener
def on_test_start(**kwargs):
    print('===测试最开始提示===')


@events.test_stop.add_listener
def on_test_stop(**kwargs):
    print('===测试结束了提示===')


class TestTask(HttpUser):
    wait_time = between(1, 5)
    # host = 'https://www.baidu.com'

    def on_start(self):
        print('这是SETUP,每次实例化User前都会执行!')

    @task(1)
    def getBaidu(self):
        self.client.get(url="/", verify=False)

    def on_stop(self):
        print('这是TEARDOWN,每次销毁User实例时都会执行!')

# class MyLocust(FastHttpLocust):
#     task_set = TestTask
#     min_wait = 1000
#     max_wait = 60000
if __name__ == "__main__":
    import os

    os.system("locust -f test_demo.py --host=https://www.baidu.com")

右键运行

@task(weight):修饰函数,将函数定义成任务。weight代表权重,权重越大执行次数越多,默认值是1

locust界面

打开localhost:8089,进入locust界面。

Number of users to simulate:设置模拟的用户总数

Hatch rate (users spawned/second):每秒启动的虚拟用户数

Start swarming:执行locust脚本

输入用户数,集合时间spawn rate,host地址在脚本中已经指明,点击start swarming

 

测试结果

 可以看到请求数,失败数,响应时间,当前的RPS(每秒请求数)

 charts页面可以看到RPS,RT,用户数曲线

 download data页面可以下载测试数据

 

 参考:http://t.csdn.cn/2fyBo

 http://t.csdn.cn/F8cIu

测试脚本二

from locust import HttpUser, TaskSet, task
 
headers = {"content-type": "application/json;charset=UTF-8"}
data = {"username": "hogwarts", "passwords": "test12345", "code": ""}
params = {"page": 1, "limit": 20, "goodsSn": "11111", "name": ""}
 
 
# 定义任务集
class TaskTest(TaskSet):
 
    # 定义任务
    # 登录方法
    @task(1)
    def login(r):
        response = r.client.post(url="/admin/auth/login", json=data, headers=headers)
        headers["x-litemall-admin-token"] = response.json()["data"]["token"]
        print(response.json())
 
    # 获取商品列表方法
    @task(1)
    def list(r):
        response = r.client.get(url="/admin/goods/list", params=params, headers=headers)
        print(response.json())
 
    def on_start(self):
        self.login()
 
    def on_stop(self):
        self.list()
 
# 定义用户类
class Test(HttpUser):
    tasks = [TaskTest]
    host = "https://litemall.hogwarts.ceshiren.com"
    min_wait = 1000
    max_wait = 3000

 这里task被定义在tasktset里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值