| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- #!/usr/bin/env node
- /**
- * 测试培训包完整用户流程:
- * 1. 凭据检测(从包目录 .env.local 或页面填写)
- * 2. 订阅状态检查
- * 3. 扫码登录流程
- * 4. 工作台与监听启动
- */
- const http = require('http');
- const { spawn } = require('child_process');
- const path = require('path');
- const TRAINING_DIR = 'D:/qiwei-training';
- const DASHBOARD_PORT = 4320;
- const FLOW_PORT = 4310;
- function request(port, path, method = 'GET', body = null) {
- return new Promise((resolve, reject) => {
- const options = {
- hostname: '127.0.0.1',
- port,
- path,
- method,
- headers: body ? { 'Content-Type': 'application/json' } : {}
- };
- const req = http.request(options, res => {
- let data = '';
- res.on('data', chunk => data += chunk);
- res.on('end', () => {
- try {
- resolve({ status: res.statusCode, data: JSON.parse(data) });
- } catch {
- resolve({ status: res.statusCode, data: data });
- }
- });
- });
- req.on('error', reject);
- if (body) req.write(JSON.stringify(body));
- req.end();
- });
- }
- async function sleep(ms) {
- return new Promise(resolve => setTimeout(resolve, ms));
- }
- async function main() {
- console.log('=== 企微培训包用户流程测试 ===\n');
- // 步骤 1:启动工作台
- console.log('步骤 1:启动培训包工作台...');
- const workbench = spawn(
- path.join(TRAINING_DIR, 'qiwei-workbench.exe'),
- ['--no-open'],
- {
- cwd: TRAINING_DIR,
- stdio: 'pipe',
- detached: false
- }
- );
- workbench.stdout.on('data', data => {
- process.stdout.write(`[工作台] ${data}`);
- });
- workbench.stderr.on('data', data => {
- process.stderr.write(`[工作台错误] ${data}`);
- });
- await sleep(5000);
- // 步骤 2:检查状态接口
- console.log('\n步骤 2:检查整体状态...');
- try {
- const status = await request(DASHBOARD_PORT, '/api/status');
- console.log('✓ 状态接口响应:', {
- authConfigured: status.data.summary?.authConfigured,
- subscribed: status.data.summary?.subscribed,
- online: status.data.summary?.online
- });
- // 步骤 3:Token 检测
- if (!status.data.summary?.authConfigured) {
- console.log('\n✗ Token 未检测到,需要用户填写');
- console.log(' 提示:在页面上粘贴 Fmode r: 会话凭据或 sk- 密钥,或写入 .env.local');
- } else {
- console.log('\n✓ 凭据已检测到');
- }
- // 步骤 4:订阅状态
- if (!status.data.summary?.subscribed) {
- console.log('\n✗ 没有可用席位,需要开通服务');
- console.log(' 提示:新账号会先检查 7 天试用;没有试用时访问 http://127.0.0.1:4310 开通席位');
- } else {
- const sub = status.data.data?.subscription?.data;
- console.log(`\n✓ ${sub?.trialActive ? '7 天试用有效' : '服务有效'}:`, {
- seats: sub?.seats,
- usedSeats: sub?.usedSeats,
- expireAt: sub?.expireAt?.slice(0, 10)
- });
- }
- // 步骤 5:登录状态
- if (!status.data.summary?.online) {
- console.log('\n需要企微扫码登录');
- console.log(' 访问工作台会自动引导到登录流程');
- } else {
- console.log('\n✓ 企微账号已在线');
- }
- } catch (error) {
- console.error('✗ 状态接口失败:', error.message);
- }
- // 步骤 6:测试登录流程页(如果已开通订阅)
- console.log('\n步骤 6:测试登录流程页...');
- try {
- const flowPage = await request(FLOW_PORT, '/');
- if (flowPage.status === 200) {
- console.log('✓ 登录流程页可访问 (http://127.0.0.1:4310)');
- } else {
- console.log(' 登录流程页状态:', flowPage.status);
- }
- } catch (error) {
- console.log(' 登录流程页未启动(订阅未开通时会自动启动)');
- }
- // 步骤 7:检查监听 Runtime
- console.log('\n步骤 7:检查监听 Runtime...');
- const statePath = path.join(TRAINING_DIR, 'outputs', 'runtime', 'qiwei-runtime.json');
- try {
- const fs = require('fs');
- const runtimeState = JSON.parse(fs.readFileSync(statePath, 'utf8'));
- console.log('✓ 监听 Runtime 运行中:', {
- pid: runtimeState.pid,
- status: runtimeState.status,
- mode: runtimeState.mode
- });
- } catch {
- console.log(' 监听 Runtime 状态文件未找到');
- }
- console.log('\n=== 测试完成 ===');
- console.log('\n现场用户操作顺序:');
- console.log(' 1. 双击 qiwei-workbench.exe');
- console.log(' 2. 浏览器自动打开工作台页面');
- console.log(' 3. 如凭据未检测到,粘贴 Fmode r: 会话凭据或 sk- 密钥');
- console.log(' 4. 新账号先使用 7 天试用;试用不可用时再开通席位(跳转付费页)');
- console.log(' 5. 扫描企微二维码登录');
- console.log(' 6. 添加测试白名单,开启监听');
- console.log('\n按 Ctrl+C 停止工作台...');
- process.on('SIGINT', () => {
- console.log('\n停止工作台...');
- workbench.kill();
- process.exit(0);
- });
- }
- main().catch(error => {
- console.error('测试失败:', error);
- process.exit(1);
- });
|