UNPKG

@zhanghongping/json-sage-workflow-cli

Version:

An intelligent JSON processing workflow system with improved error handling and configuration

140 lines (110 loc) 5.1 kB
import { json } from '../../index'; import { SchemaGenerator } from '../../core/SchemaGenerator'; import { performance } from 'perf_hooks'; describe('DeepSeek AI Performance Tests', () => { const mockConfig = { apiKey: process.env.JSONSAGE_DEEPSEEK_API_KEY || 'test-api-key' }; // 生成大型测试数据 const generateLargeData = (depth: number, width: number) => { if (depth === 0) { return { id: Math.random().toString(), value: 'test-value', timestamp: new Date().toISOString() }; } const result: any = {}; for (let i = 0; i < width; i++) { result[`field${i}`] = generateLargeData(depth - 1, width); } return result; }; describe('Performance Benchmarks', () => { let generator: SchemaGenerator; beforeEach(() => { generator = json.createSchemaGenerator({ useAI: true, deepseek: mockConfig, caching: true }); }); it('should handle large nested objects efficiently', async () => { const largeData = generateLargeData(3, 5); // 深度3,每层5个字段 const start = performance.now(); const schema = await generator.generateSchema(largeData); const end = performance.now(); const duration = end - start; expect(schema).toBeDefined(); expect(duration).toBeLessThan(10000); // 应在10秒内完成 // 验证生成的schema结构完整性 const parsedSchema = JSON.parse(schema); expect(parsedSchema.properties).toBeDefined(); expect(Object.keys(parsedSchema.properties).length).toBe(5); }); it('should maintain performance with caching enabled', async () => { const testData = generateLargeData(2, 3); // 第一次生成(无缓存) const start1 = performance.now(); await generator.generateSchema(testData); const duration1 = performance.now() - start1; // 第二次生成(有缓存) const start2 = performance.now(); await generator.generateSchema(testData); const duration2 = performance.now() - start2; // 缓存应该显著提升性能 expect(duration2).toBeLessThan(duration1 * 0.5); }); it('should handle concurrent requests efficiently', async () => { const testData = generateLargeData(1, 2); const requests = Array(5).fill(null).map(() => generator.generateSchema(testData) ); const start = performance.now(); const results = await Promise.all(requests); const duration = performance.now() - start; // 验证所有请求都成功完成 expect(results).toHaveLength(5); results.forEach(schema => { expect(schema).toBeDefined(); expect(JSON.parse(schema).properties).toBeDefined(); }); // 并发请求的总时间应该小于串行时间的5倍 expect(duration).toBeLessThan(10000); }); it('should maintain memory usage within bounds', async () => { const initialMemory = process.memoryUsage().heapUsed; const largeData = generateLargeData(4, 4); await generator.generateSchema(largeData); const finalMemory = process.memoryUsage().heapUsed; const memoryDiff = finalMemory - initialMemory; // 内存增长不应超过100MB expect(memoryDiff).toBeLessThan(100 * 1024 * 1024); }); }); describe('Rate Limiting Tests', () => { let generator: SchemaGenerator; beforeEach(() => { generator = json.createSchemaGenerator({ useAI: true, deepseek: mockConfig }); }); it('should handle rate limiting gracefully', async () => { const requests = Array(10).fill(null).map(() => generator.generateSchema({ test: 'data' }) ); const results = await Promise.allSettled(requests); // 检查成功和失败的请求 const successful = results.filter(r => r.status === 'fulfilled'); const failed = results.filter(r => r.status === 'rejected'); expect(successful.length).toBeGreaterThan(0); // 对于失败的请求,确保是因为速率限制 failed.forEach(result => { if (result.status === 'rejected') { expect(result.reason.message).toMatch(/rate limit|too many requests/i); } }); }); }); });