first commit
This commit is contained in:
116
test-video-covers.cjs
Normal file
116
test-video-covers.cjs
Normal file
@@ -0,0 +1,116 @@
|
||||
/**
|
||||
* 测试视频封面功能脚本
|
||||
* 验证所有视频的封面API是否正常工作
|
||||
*/
|
||||
|
||||
const http = require('http');
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const path = require('path');
|
||||
|
||||
// 数据库路径
|
||||
const DB_PATH = path.join(__dirname, 'database', 'goguryeo_video.db');
|
||||
|
||||
// 测试视频封面API
|
||||
function testVideoFrame(videoId) {
|
||||
return new Promise((resolve) => {
|
||||
const options = {
|
||||
hostname: 'localhost',
|
||||
port: 4001,
|
||||
path: `/api/videos/${videoId}/frame`,
|
||||
method: 'GET'
|
||||
};
|
||||
|
||||
const req = http.request(options, (res) => {
|
||||
console.log(`视频 ${videoId}: 状态码 ${res.statusCode}, 内容类型: ${res.headers['content-type']}, 大小: ${res.headers['content-length']} bytes`);
|
||||
|
||||
if (res.statusCode === 200 && res.headers['content-type'] === 'image/jpeg') {
|
||||
resolve({ videoId, success: true, size: res.headers['content-length'] });
|
||||
} else {
|
||||
resolve({ videoId, success: false, statusCode: res.statusCode });
|
||||
}
|
||||
|
||||
// 消费响应数据
|
||||
res.on('data', () => {});
|
||||
res.on('end', () => {});
|
||||
});
|
||||
|
||||
req.on('error', (err) => {
|
||||
console.error(`视频 ${videoId} 请求错误:`, err.message);
|
||||
resolve({ videoId, success: false, error: err.message });
|
||||
});
|
||||
|
||||
req.setTimeout(10000, () => {
|
||||
console.error(`视频 ${videoId} 请求超时`);
|
||||
req.destroy();
|
||||
resolve({ videoId, success: false, error: 'timeout' });
|
||||
});
|
||||
|
||||
req.end();
|
||||
});
|
||||
}
|
||||
|
||||
// 主测试函数
|
||||
async function testAllVideoCovers() {
|
||||
console.log('开始测试视频封面功能...');
|
||||
|
||||
// 连接数据库
|
||||
const db = new sqlite3.Database(DB_PATH, (err) => {
|
||||
if (err) {
|
||||
console.error('数据库连接失败:', err);
|
||||
return;
|
||||
}
|
||||
console.log('已连接到数据库');
|
||||
});
|
||||
|
||||
// 获取所有视频ID
|
||||
db.all('SELECT id, title FROM videos ORDER BY id', async (err, rows) => {
|
||||
if (err) {
|
||||
console.error('查询视频失败:', err);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`找到 ${rows.length} 个视频,开始测试封面功能...\n`);
|
||||
|
||||
const results = [];
|
||||
|
||||
// 逐个测试视频封面
|
||||
for (const video of rows) {
|
||||
const result = await testVideoFrame(video.id);
|
||||
results.push(result);
|
||||
|
||||
// 添加延迟避免过快请求
|
||||
await new Promise(resolve => setTimeout(resolve, 500));
|
||||
}
|
||||
|
||||
// 统计结果
|
||||
const successful = results.filter(r => r.success);
|
||||
const failed = results.filter(r => !r.success);
|
||||
|
||||
console.log('\n=== 测试结果统计 ===');
|
||||
console.log(`总视频数: ${results.length}`);
|
||||
console.log(`成功生成封面: ${successful.length}`);
|
||||
console.log(`失败: ${failed.length}`);
|
||||
|
||||
if (failed.length > 0) {
|
||||
console.log('\n失败的视频:');
|
||||
failed.forEach(f => {
|
||||
console.log(`- 视频 ${f.videoId}: ${f.error || '状态码 ' + f.statusCode}`);
|
||||
});
|
||||
}
|
||||
|
||||
if (successful.length > 0) {
|
||||
console.log('\n成功的视频封面大小:');
|
||||
successful.forEach(s => {
|
||||
console.log(`- 视频 ${s.videoId}: ${s.size} bytes`);
|
||||
});
|
||||
}
|
||||
|
||||
console.log('\n测试完成!');
|
||||
|
||||
// 关闭数据库连接
|
||||
db.close();
|
||||
});
|
||||
}
|
||||
|
||||
// 运行测试
|
||||
testAllVideoCovers().catch(console.error);
|
||||
Reference in New Issue
Block a user