跳转至

性能测试

用循环压测的方法,针对特定接口进行性能测试。可以使用如 Apifox、postman 等软件的自动测试模块,也可以使用轻量级的 Locust 等软件包,这里主要使用 Locust。

用户行为测试———以注册用户为例

当软件知名度得到提升的时候,注册用户数量将迎来增长,现在测试短时间大量的访问这个接口的情况

测试准备

  • 使用 Apifox 的自动测试

测试结果

以下是重要数据分析

90% 响应时间

  • 数值: 469 ms
  • 90% 的请求能够在 469 毫秒内得到响应。这是衡量系统性能的重要指标之一,反映了大多数用户的实际体验

平均响应时间

  • 数值: 418 ms
  • 系统处理一个注册请求的平均时间为 418 毫秒。对于注册接口来说,这个响应时间在可接受范围内

请求失败率

  • 数值: 1.62%
  • 在所有请求中,有 1.62% 的请求失败。是一个低的失败率。进一步分析发现,设备性能达到峰值才会导致失败,说明接口很稳定

管理员查询行为测试————以查看用户对设备的权限为例

测试准备

因为参数位于 URL,使用 Locust 脚本进行性能测试

from locust import HttpUser, task, between
import random
import json

## 管理员 token
ADMIN_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzUwMDcwNzMyLCJpYXQiOjE3NTAwNjcxMzIsImp0aSI6IjU5MGUwOTNmNjY5YzRmZWNhNTkxNWRkNmVkZWZlOGE1IiwidXNlcl9pZCI6MX0.C-zVLZn5PIXF4Ju_JRDioAwgkSIjv1tNXx37e3rGn6o"

## 用户ID范围
USER_ID_RANGE = range(1, 3000)

class DevicePermissionTest(HttpUser):
    wait_time = between(1, 3)  ## 每次请求之间等待时间(秒)

    @task
    def check_user_permissions(self):
        user_id = random.choice(list(USER_ID_RANGE))
        url = f"/api/v1/permissions/user/{user_id}/"

        headers = {
            "Authorization": f"Bearer {ADMIN_TOKEN}",
            "Content-Type": "application/json"
        }

        with self.client.get(url, headers=headers, catch_response=True) as response:
            try:
                data = response.json()

                ## 判断 success 字段是否存在且为 True
                if isinstance(data, dict) and data.get("success") is True:
                    print(f"[{user_id}] 成功获取权限信息,data: {data['data']}")
                    ## 标记为成功
                else:
                    ## 接口返回了错误或结构异常
                    msg = data.get("message", "未知错误")
                    response.failure(f"接口返回失败:{msg} - 响应内容: {data}")
                    print(f"[{user_id}] 请求失败: {data}")

            except json.JSONDecodeError:
                ## JSON 解析失败
                response.failure("响应内容不是有效的 JSON")
                print(f"[{user_id}] 响应内容不是有效的 JSON,原始内容:{response.text}")

测试结果

进入 http://localhost:8089/ 测试

  • 图像中出现的曲线尖峰,来自于设备性能的变化,总体上看,接口的性能很好,没有失败案例