backend/test/doc/HOW_TO_RUN_FLOWS.md

4.4 KiB
Raw Permalink Blame History

如何運行流程測試

📝 說明

user-profile-flow.js 是一個場景模組,不是可以直接運行的測試文件。它提供了可重複使用的流程函數,需要在測試文件中導入並使用。

🚀 快速開始

方式 1: 使用已創建的測試文件(推薦)

我們已經創建了使用這些流程的測試文件:

冒煙測試

# 設置 API 地址
export BASE_URL=http://localhost:8888

# 運行使用者資料流程冒煙測試
make smoke-user-profile-flow

負載測試

# 設置 API 地址
export BASE_URL=http://localhost:8888

# 運行使用者資料流程負載測試
make load-user-profile-flow

方式 2: 使用通用 run 命令

# 設置 API 地址
export BASE_URL=http://localhost:8888

# 運行指定的流程測試
make run TEST=tests/smoke/smoke-user-profile-flow-test.js

方式 3: 直接使用 k6如果本地已安裝

# 設置 API 地址
export BASE_URL=http://localhost:8888

# 運行測試
k6 run tests/smoke/smoke-user-profile-flow-test.js

📋 可用的流程函數

user-profile-flow.js 提供了以下流程函數:

1. getAndUpdateProfileFlow

取得並更新個人資料流程

import { getAndUpdateProfileFlow } from '../../scenarios/e2e/user-profile-flow.js';

const result = getAndUpdateProfileFlow({
  baseUrl: 'http://localhost:8888',
  accessToken: 'your_access_token',
  updateData: {
    nickname: 'NewNickname',
    preferred_language: 'zh-tw',
  },
});

2. emailVerificationFlow

完整 Email 驗證流程(請求 → 提交)

import { emailVerificationFlow } from '../../scenarios/e2e/user-profile-flow.js';

const result = emailVerificationFlow({
  baseUrl: 'http://localhost:8888',
  accessToken: 'your_access_token',
  verifyCode: '123456', // 需要從外部獲取
});

3. phoneVerificationFlow

完整手機驗證流程(請求 → 提交)

import { phoneVerificationFlow } from '../../scenarios/e2e/user-profile-flow.js';

const result = phoneVerificationFlow({
  baseUrl: 'http://localhost:8888',
  accessToken: 'your_access_token',
  verifyCode: '123456', // 需要從外部獲取
});

4. passwordChangeFlow

登入狀態下修改密碼流程

import { passwordChangeFlow } from '../../scenarios/e2e/user-profile-flow.js';

const result = passwordChangeFlow({
  baseUrl: 'http://localhost:8888',
  accessToken: 'your_access_token',
  currentPassword: 'OldPassword123!',
  newPassword: 'NewPassword123!',
});

5. userProfileInitializationFlow

完整的使用者資料初始化流程(註冊 → 登入 → 取得資訊 → 更新資訊)

import { userProfileInitializationFlow } from '../../scenarios/e2e/user-profile-flow.js';

const result = userProfileInitializationFlow({
  baseUrl: 'http://localhost:8888',
  loginId: 'test@example.com',
  password: 'Test123456!',
  updateData: {
    nickname: 'TestUser',
    preferred_language: 'zh-tw',
    currency: 'TWD',
  },
});

📝 創建自定義測試文件

如果你想創建自己的測試文件來使用這些流程,可以參考以下模板:

/**
 * 自定義流程測試
 */
import { userProfileInitializationFlow } from '../../scenarios/e2e/user-profile-flow.js';

export const options = {
  scenarios: {
    custom_flow: {
      executor: 'shared-iterations',
      vus: 1,
      iterations: 1,
      maxDuration: '30s',
      tags: { test_type: 'custom', flow: 'user_profile' },
    },
  },
  thresholds: {
    checks: ['rate==1.0'],
    http_req_duration: ['p(95)<3000'],
  },
};

export default function () {
  const baseUrl = __ENV.BASE_URL || 'http://localhost:8888';
  
  // 使用流程函數
  const result = userProfileInitializationFlow({
    baseUrl,
    loginId: `test_${Date.now()}@example.com`,
    password: 'Test123456!',
  });

  if (!result.success) {
    console.error(`Test failed: ${result.step} - ${result.error}`);
    return;
  }

  console.log('Test passed!');
}

然後運行:

make run TEST=tests/your-custom-test.js

🎯 測試文件位置

  • 冒煙測試: tests/smoke/smoke-user-profile-flow-test.js
  • 負載測試: tests/pre/load-user-profile-flow-test.js

📚 相關文檔