|
@@ -0,0 +1,126 @@
|
|
|
|
|
+const { test, expect, request } = require('@playwright/test');
|
|
|
|
|
+
|
|
|
|
|
+const BASE_URL = 'https://ajy.danclub.cn';
|
|
|
|
|
+const API_BASE_URL = 'https://ajy.danclub.cn/api';
|
|
|
|
|
+const PERFORMANCE_THRESHOLD_MS = 200;
|
|
|
|
|
+
|
|
|
|
|
+test.describe('API性能测试', () => {
|
|
|
|
|
+ test('PERF-001: 用户列表接口响应时间', async ({ request }) => {
|
|
|
|
|
+ const start = Date.now();
|
|
|
|
|
+ const response = await request.get(`${API_BASE_URL}/users?page=1&pageSize=10`);
|
|
|
|
|
+ const duration = Date.now() - start;
|
|
|
|
|
+ expect(response.status()).toBe(200);
|
|
|
|
|
+ expect(duration).toBeLessThan(PERFORMANCE_THRESHOLD_MS);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ test('PERF-002: 设备列表接口响应时间', async ({ request }) => {
|
|
|
|
|
+ const start = Date.now();
|
|
|
|
|
+ const response = await request.get(`${API_BASE_URL}/device/page?pageNum=1&pageSize=10`);
|
|
|
|
|
+ const duration = Date.now() - start;
|
|
|
|
|
+ expect(response.status()).toBe(200);
|
|
|
|
|
+ expect(duration).toBeLessThan(PERFORMANCE_THRESHOLD_MS);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ test('PERF-003: 穴位列表接口响应时间', async ({ request }) => {
|
|
|
|
|
+ const start = Date.now();
|
|
|
|
|
+ const response = await request.get(`${API_BASE_URL}/acupoint/page?pageNum=1&pageSize=10`);
|
|
|
|
|
+ const duration = Date.now() - start;
|
|
|
|
|
+ expect([200, 404]).toContain(response.status());
|
|
|
|
|
+ expect(duration).toBeLessThan(PERFORMANCE_THRESHOLD_MS * 2);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ test('PERF-004: 方案列表接口响应时间', async ({ request }) => {
|
|
|
|
|
+ const start = Date.now();
|
|
|
|
|
+ const response = await request.get(`${API_BASE_URL}/plan/page?pageNum=1&pageSize=10`);
|
|
|
|
|
+ const duration = Date.now() - start;
|
|
|
|
|
+ expect([200, 404]).toContain(response.status());
|
|
|
|
|
+ expect(duration).toBeLessThan(PERFORMANCE_THRESHOLD_MS * 2);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ test('PERF-005: 穴位坐标生成响应时间', async ({ request }) => {
|
|
|
|
|
+ const start = Date.now();
|
|
|
|
|
+ const response = await request.post(`${API_BASE_URL}/algorithm/acupoint-generate`, {
|
|
|
|
|
+ data: { shoulderWidth: 42, bodyLength: 85, gender: '男', cun1: 2.2 }
|
|
|
|
|
+ });
|
|
|
|
|
+ const duration = Date.now() - start;
|
|
|
|
|
+ expect([200, 401]).toContain(response.status());
|
|
|
|
|
+ expect(duration).toBeLessThan(PERFORMANCE_THRESHOLD_MS * 3);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ test('PERF-006: 指寸估算响应时间', async ({ request }) => {
|
|
|
|
|
+ const start = Date.now();
|
|
|
|
|
+ const response = await request.post(`${API_BASE_URL}/algorithm/cun-calculate`, {
|
|
|
|
|
+ data: { shoulderWidth: 42, bodyLength: 85, gender: '男' }
|
|
|
|
|
+ });
|
|
|
|
|
+ const duration = Date.now() - start;
|
|
|
|
|
+ expect([200, 401]).toContain(response.status());
|
|
|
|
|
+ expect(duration).toBeLessThan(PERFORMANCE_THRESHOLD_MS * 2);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ test('PERF-007: 数据验证接口响应时间', async ({ request }) => {
|
|
|
|
|
+ const start = Date.now();
|
|
|
|
|
+ const response = await request.post(`${API_BASE_URL}/algorithm/validate`, {
|
|
|
|
|
+ data: { shoulderWidth: 42, gender: '男' }
|
|
|
|
|
+ });
|
|
|
|
|
+ const duration = Date.now() - start;
|
|
|
|
|
+ expect([200, 401]).toContain(response.status());
|
|
|
|
|
+ expect(duration).toBeLessThan(PERFORMANCE_THRESHOLD_MS * 2);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ test('PERF-008: 置信度计算响应时间', async ({ request }) => {
|
|
|
|
|
+ const start = Date.now();
|
|
|
|
|
+ const response = await request.post(`${API_BASE_URL}/algorithm/confidence`, {
|
|
|
|
|
+ data: { shoulderWidth: 42, bodyLength: 85, cun1: 2.2 }
|
|
|
|
|
+ });
|
|
|
|
|
+ const duration = Date.now() - start;
|
|
|
|
|
+ expect([200, 401]).toContain(response.status());
|
|
|
|
|
+ expect(duration).toBeLessThan(PERFORMANCE_THRESHOLD_MS * 2);
|
|
|
|
|
+ });
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
|
|
+test.describe('页面加载性能测试', () => {
|
|
|
|
|
+ test('PERF-010: 用户列表页面加载时间', async ({ page }) => {
|
|
|
|
|
+ await page.goto(BASE_URL);
|
|
|
|
|
+ await page.waitForLoadState('networkidle');
|
|
|
|
|
+ await page.getByPlaceholder('请输入用户名').fill('admin');
|
|
|
|
|
+ await page.getByPlaceholder('请输入密码').fill('admin123');
|
|
|
|
|
+ await page.getByRole('button', { name: '登 录' }).click();
|
|
|
|
|
+ await page.waitForURL(`${BASE_URL}/#/user/app`, { timeout: 10000 });
|
|
|
|
|
+
|
|
|
|
|
+ const start = Date.now();
|
|
|
|
|
+ await page.goto(`${BASE_URL}/#/user/app`);
|
|
|
|
|
+ await page.waitForLoadState('networkidle');
|
|
|
|
|
+ const duration = Date.now() - start;
|
|
|
|
|
+ expect(duration).toBeLessThan(3000);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ test('PERF-011: 设备列表页面加载时间', async ({ page }) => {
|
|
|
|
|
+ await page.goto(BASE_URL);
|
|
|
|
|
+ await page.waitForLoadState('networkidle');
|
|
|
|
|
+ await page.getByPlaceholder('请输入用户名').fill('admin');
|
|
|
|
|
+ await page.getByPlaceholder('请输入密码').fill('admin123');
|
|
|
|
|
+ await page.getByRole('button', { name: '登 录' }).click();
|
|
|
|
|
+ await page.waitForURL(`${BASE_URL}/#/user/app`, { timeout: 10000 });
|
|
|
|
|
+
|
|
|
|
|
+ const start = Date.now();
|
|
|
|
|
+ await page.goto(`${BASE_URL}/#/device`);
|
|
|
|
|
+ await page.waitForLoadState('networkidle');
|
|
|
|
|
+ const duration = Date.now() - start;
|
|
|
|
|
+ expect(duration).toBeLessThan(3000);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ test('PERF-012: 穴位列表页面加载时间', async ({ page }) => {
|
|
|
|
|
+ await page.goto(BASE_URL);
|
|
|
|
|
+ await page.waitForLoadState('networkidle');
|
|
|
|
|
+ await page.getByPlaceholder('请输入用户名').fill('admin');
|
|
|
|
|
+ await page.getByPlaceholder('请输入密码').fill('admin123');
|
|
|
|
|
+ await page.getByRole('button', { name: '登 录' }).click();
|
|
|
|
|
+ await page.waitForURL(`${BASE_URL}/#/user/app`, { timeout: 10000 });
|
|
|
|
|
+
|
|
|
|
|
+ const start = Date.now();
|
|
|
|
|
+ await page.goto(`${BASE_URL}/#/acupoint`);
|
|
|
|
|
+ await page.waitForLoadState('networkidle');
|
|
|
|
|
+ const duration = Date.now() - start;
|
|
|
|
|
+ expect(duration).toBeLessThan(3000);
|
|
|
|
|
+ });
|
|
|
|
|
+});
|