性能测试工具Locust

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

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

Locust的特点


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

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

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

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

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

安装

pip install locust

性能测试工具Locust_第1张图片

 测试脚本

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")

右键运行

性能测试工具Locust_第2张图片

@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

 性能测试工具Locust_第3张图片

测试结果

性能测试工具Locust_第4张图片

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

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

性能测试工具Locust_第5张图片

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

性能测试工具Locust_第6张图片

 性能测试工具Locust_第7张图片

 参考: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里。

你可能感兴趣的:(性能测试,python,开发语言)