Locust是一个用python开发的开源性能测试工具。通过编写简单易读的代码完成测试脚本,基于事件,同样配置下,单台负载机可模拟的负载数远超jmeter
官方API解读:性能测试工具--Locust官方文档(API)解读(全)-腾讯云开发者社区-腾讯云
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
打开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里。