diff --git a/.env.dev b/.env.dev index 02bf555..78b4a0a 100644 --- a/.env.dev +++ b/.env.dev @@ -1,5 +1,15 @@ # 基础URL BASE_URL=https://ibp-dev.longi.com -MENU_DATA_FILE_PATH=data/longi/menu-data.json -MENU_TIME_OUT=30000 \ No newline at end of file +# 超时配置 +MENU_TIME_OUT=30000 + +# 数据目录配置 +TEST_DATA_DIR=test-data +MENU_DATA_FILE_PATH=test-data/menu-data.json +TEST_PROGRESS_FILE_PATH=test-data/test-progress.json + +# 测试批次配置 +TEST_BATCH_SIZE=5 +TEST_RETRY_COUNT=3 +TEST_BATCH_INTERVAL=2000 \ No newline at end of file diff --git a/config/env.js b/config/env.js index 380a851..65cfc0d 100644 --- a/config/env.js +++ b/config/env.js @@ -1,10 +1,26 @@ const path = require('path'); -require('dotenv-flow').config({ - node_env: process.env.NODE_ENV || 'dev', +const dotenv = require('dotenv-flow'); + +// 获取当前环境 +const NODE_ENV = process.env.NODE_ENV || 'dev'; + +// 加载环境变量 +const result = dotenv.config({ + node_env: NODE_ENV, path: path.resolve(process.cwd()), default_node_env: 'dev' }); +// 解析环境变量中的变量引用 +Object.keys(process.env).forEach(key => { + const value = process.env[key]; + if (typeof value === 'string') { + process.env[key] = value.replace(/\${([^}]+)}/g, (_, varName) => { + return process.env[varName] || ''; + }); + } +}); + console.log('Current NODE_ENV:', process.env.NODE_ENV); // console.log('Loaded BASE_URL:', process.env.BASE_URL); console.log('Environment files path:', path.resolve(process.cwd())); \ No newline at end of file diff --git a/controllers/TestController.js b/controllers/TestController.js index 7f91b7c..f1d85b0 100644 --- a/controllers/TestController.js +++ b/controllers/TestController.js @@ -4,16 +4,11 @@ const LongiLoginPage = require('../tests/pages/LongiLoginPage'); const menuDataService = require('../services/MenuDataService'); class TestController { - /** - * @param {Object} options - 配置选项 - * @param {number} [options.batchSize=5] - 每批次测试的菜单数量 - * @param {number} [options.retryCount=3] - 失败重试次数 - * @param {number} [options.batchInterval=2000] - 批次间隔时间(ms) - */ - constructor(options = {}) { - this.batchSize = options.batchSize || 5; - this.retryCount = options.retryCount || 3; - this.batchInterval = options.batchInterval || 2000; + constructor() { + // 从环境变量获取配置 + this.batchSize = parseInt(process.env.TEST_BATCH_SIZE || '5', 10); + this.retryCount = parseInt(process.env.TEST_RETRY_COUNT || '3', 10); + this.batchInterval = parseInt(process.env.TEST_BATCH_INTERVAL || '2000', 10); // 浏览器配置 this.browserConfig = { @@ -21,6 +16,12 @@ class TestController { args: ['--start-maximized'], // 最大化窗口 slowMo: 50 // 放慢操作速度,便于观察 }; + + console.log('测试配置:', { + batchSize: this.batchSize, + retryCount: this.retryCount, + batchInterval: this.batchInterval + }); } /** diff --git a/scripts/run-tests.js b/scripts/run-tests.js index 76dad26..f9d6eef 100644 --- a/scripts/run-tests.js +++ b/scripts/run-tests.js @@ -122,11 +122,7 @@ async function main() { MENU_DATA_FILE_PATH: process.env.MENU_DATA_FILE_PATH }); - const controller = new TestController({ - batchSize: 5, - retryCount: 3, - batchInterval: 2000 - }); + const controller = new TestController(); // 处理命令行参数 const args = process.argv.slice(2); diff --git a/services/MenuDataService.js b/services/MenuDataService.js index 8fd0a1c..a787384 100644 --- a/services/MenuDataService.js +++ b/services/MenuDataService.js @@ -3,9 +3,10 @@ const path = require('path'); class MenuDataService { constructor() { - this.dataDir = path.join(process.cwd(), 'test-data'); - this.menuDataPath = path.join(this.dataDir, 'menu-data.json'); - this.progressPath = path.join(this.dataDir, 'test-progress.json'); + // 从环境变量获取路径配置 + this.dataDir = process.env.TEST_DATA_DIR || path.join(process.cwd(), 'test-data'); + this.menuDataPath = process.env.MENU_DATA_FILE_PATH || path.join(this.dataDir, 'menu-data.json'); + this.progressPath = process.env.TEST_PROGRESS_FILE_PATH || path.join(this.dataDir, 'test-progress.json'); // 确保数据目录存在 if (!fs.existsSync(this.dataDir)) {