@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
text/typescript
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);
}
});
});
});
});