test-genie-mcp 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +219 -0
- package/dist/analyzers/astAnalyzer.d.ts +108 -0
- package/dist/analyzers/astAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/astAnalyzer.js +800 -0
- package/dist/analyzers/astAnalyzer.js.map +1 -0
- package/dist/analyzers/performanceAnalyzer.d.ts +90 -0
- package/dist/analyzers/performanceAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/performanceAnalyzer.js +647 -0
- package/dist/analyzers/performanceAnalyzer.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +683 -0
- package/dist/index.js.map +1 -0
- package/dist/platforms/android/index.d.ts +90 -0
- package/dist/platforms/android/index.d.ts.map +1 -0
- package/dist/platforms/android/index.js +519 -0
- package/dist/platforms/android/index.js.map +1 -0
- package/dist/platforms/flutter/index.d.ts +105 -0
- package/dist/platforms/flutter/index.d.ts.map +1 -0
- package/dist/platforms/flutter/index.js +533 -0
- package/dist/platforms/flutter/index.js.map +1 -0
- package/dist/platforms/ios/index.d.ts +79 -0
- package/dist/platforms/ios/index.d.ts.map +1 -0
- package/dist/platforms/ios/index.js +393 -0
- package/dist/platforms/ios/index.js.map +1 -0
- package/dist/platforms/react-native/index.d.ts +160 -0
- package/dist/platforms/react-native/index.d.ts.map +1 -0
- package/dist/platforms/react-native/index.js +602 -0
- package/dist/platforms/react-native/index.js.map +1 -0
- package/dist/platforms/web/index.d.ts +177 -0
- package/dist/platforms/web/index.d.ts.map +1 -0
- package/dist/platforms/web/index.js +637 -0
- package/dist/platforms/web/index.js.map +1 -0
- package/dist/storage/index.d.ts +35 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +351 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/tools/analysis/analyzeAppStructure.d.ts +9 -0
- package/dist/tools/analysis/analyzeAppStructure.d.ts.map +1 -0
- package/dist/tools/analysis/analyzeAppStructure.js +289 -0
- package/dist/tools/analysis/analyzeAppStructure.js.map +1 -0
- package/dist/tools/analysis/createTestPlan.d.ts +21 -0
- package/dist/tools/analysis/createTestPlan.d.ts.map +1 -0
- package/dist/tools/analysis/createTestPlan.js +214 -0
- package/dist/tools/analysis/createTestPlan.js.map +1 -0
- package/dist/tools/analysis/generateScenarios.d.ts +21 -0
- package/dist/tools/analysis/generateScenarios.d.ts.map +1 -0
- package/dist/tools/analysis/generateScenarios.js +567 -0
- package/dist/tools/analysis/generateScenarios.js.map +1 -0
- package/dist/tools/automation/cicdIntegration.d.ts +41 -0
- package/dist/tools/automation/cicdIntegration.d.ts.map +1 -0
- package/dist/tools/automation/cicdIntegration.js +825 -0
- package/dist/tools/automation/cicdIntegration.js.map +1 -0
- package/dist/tools/automation/generateReport.d.ts +16 -0
- package/dist/tools/automation/generateReport.d.ts.map +1 -0
- package/dist/tools/automation/generateReport.js +406 -0
- package/dist/tools/automation/generateReport.js.map +1 -0
- package/dist/tools/automation/runFullAutomation.d.ts +25 -0
- package/dist/tools/automation/runFullAutomation.d.ts.map +1 -0
- package/dist/tools/automation/runFullAutomation.js +296 -0
- package/dist/tools/automation/runFullAutomation.js.map +1 -0
- package/dist/tools/detection/detectLogicErrors.d.ts +18 -0
- package/dist/tools/detection/detectLogicErrors.d.ts.map +1 -0
- package/dist/tools/detection/detectLogicErrors.js +470 -0
- package/dist/tools/detection/detectLogicErrors.js.map +1 -0
- package/dist/tools/detection/detectMemoryLeaks.d.ts +23 -0
- package/dist/tools/detection/detectMemoryLeaks.d.ts.map +1 -0
- package/dist/tools/detection/detectMemoryLeaks.js +453 -0
- package/dist/tools/detection/detectMemoryLeaks.js.map +1 -0
- package/dist/tools/execution/runScenarioTest.d.ts +34 -0
- package/dist/tools/execution/runScenarioTest.d.ts.map +1 -0
- package/dist/tools/execution/runScenarioTest.js +334 -0
- package/dist/tools/execution/runScenarioTest.js.map +1 -0
- package/dist/tools/execution/runSimulation.d.ts +17 -0
- package/dist/tools/execution/runSimulation.d.ts.map +1 -0
- package/dist/tools/execution/runSimulation.js +250 -0
- package/dist/tools/execution/runSimulation.js.map +1 -0
- package/dist/tools/execution/runStressTest.d.ts +52 -0
- package/dist/tools/execution/runStressTest.d.ts.map +1 -0
- package/dist/tools/execution/runStressTest.js +176 -0
- package/dist/tools/execution/runStressTest.js.map +1 -0
- package/dist/tools/fixing/applyFix.d.ts +44 -0
- package/dist/tools/fixing/applyFix.d.ts.map +1 -0
- package/dist/tools/fixing/applyFix.js +399 -0
- package/dist/tools/fixing/applyFix.js.map +1 -0
- package/dist/tools/fixing/confirmFix.d.ts +31 -0
- package/dist/tools/fixing/confirmFix.d.ts.map +1 -0
- package/dist/tools/fixing/confirmFix.js +136 -0
- package/dist/tools/fixing/confirmFix.js.map +1 -0
- package/dist/tools/fixing/suggestFixes.d.ts +23 -0
- package/dist/tools/fixing/suggestFixes.d.ts.map +1 -0
- package/dist/tools/fixing/suggestFixes.js +349 -0
- package/dist/tools/fixing/suggestFixes.js.map +1 -0
- package/dist/types.d.ts +322 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/codeParser.d.ts +12 -0
- package/dist/utils/codeParser.d.ts.map +1 -0
- package/dist/utils/codeParser.js +487 -0
- package/dist/utils/codeParser.js.map +1 -0
- package/package.json +68 -0
package/README.md
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# Test Genie MCP
|
|
2
|
+
|
|
3
|
+
AI-powered App Test Automation MCP Server
|
|
4
|
+
|
|
5
|
+
앱 테스트 자동화를 위한 MCP 서버입니다. 시나리오 생성부터 테스트 실행, 문제 검출, 수정 제안 및 적용까지 전체 테스트 파이프라인을 자동화합니다.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
### Phase 1: Analysis & Scenario Generation
|
|
10
|
+
- **analyze_app_structure**: 앱 코드베이스 분석 (화면, 컴포넌트, API, 상태관리)
|
|
11
|
+
- **generate_scenarios**: AI 기반 테스트 시나리오 자동 생성
|
|
12
|
+
- **create_test_plan**: 테스트 계획 수립 및 스케줄링
|
|
13
|
+
|
|
14
|
+
### Phase 2: Test Execution
|
|
15
|
+
- **run_scenario_test**: 개별 시나리오 테스트 실행
|
|
16
|
+
- **run_simulation**: 사용자 행동 시뮬레이션 (랜덤/패턴 기반)
|
|
17
|
+
- **run_stress_test**: 스트레스/부하 테스트
|
|
18
|
+
|
|
19
|
+
### Phase 3: Issue Detection
|
|
20
|
+
- **detect_memory_leaks**: 메모리 릭 감지 (힙 분석, 순환 참조)
|
|
21
|
+
- **detect_logic_errors**: 논리적 오류 검출 (레이스 컨디션, 상태 불일치)
|
|
22
|
+
|
|
23
|
+
### Phase 4: Fix Suggestions & Application
|
|
24
|
+
- **suggest_fixes**: AI 기반 수정 방안 제안
|
|
25
|
+
- **confirm_fix**: 수정 사항 사용자 확인
|
|
26
|
+
- **apply_fix**: 확인된 수정 사항 적용
|
|
27
|
+
- **rollback_fix**: 적용된 수정 롤백
|
|
28
|
+
|
|
29
|
+
### Phase 5: Full Automation
|
|
30
|
+
- **run_full_automation**: 전체 파이프라인 자동 실행
|
|
31
|
+
- **generate_report**: 상세 보고서 생성 (Markdown, HTML, JSON)
|
|
32
|
+
|
|
33
|
+
### Enhanced Analysis (v2.0)
|
|
34
|
+
- **analyze_performance**: 성능 심층 분석 (렌더링, 연산, 네트워크, 번들)
|
|
35
|
+
- **analyze_code_deep**: AST 기반 코드 분석 (복잡도, 훅, 의존성)
|
|
36
|
+
- **generate_cicd_config**: CI/CD 설정 자동 생성 (GitHub Actions, Jenkins, GitLab CI)
|
|
37
|
+
|
|
38
|
+
## Supported Platforms
|
|
39
|
+
|
|
40
|
+
| Platform | Language | Test Framework |
|
|
41
|
+
|----------|----------|----------------|
|
|
42
|
+
| iOS | Swift, Objective-C | XCTest, XCUITest |
|
|
43
|
+
| Android | Kotlin, Java | Espresso, UI Automator |
|
|
44
|
+
| Flutter | Dart | flutter_test |
|
|
45
|
+
| React Native | TypeScript, JavaScript | Detox, Jest |
|
|
46
|
+
| Web | TypeScript, JavaScript | Playwright, Puppeteer |
|
|
47
|
+
|
|
48
|
+
## Installation
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npm install -g test-genie-mcp
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Or install from source:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
git clone https://github.com/MUSE-CODE-SPACE/test-genie-mcp.git
|
|
58
|
+
cd test-genie-mcp
|
|
59
|
+
npm install
|
|
60
|
+
npm run build
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Usage with Claude Desktop
|
|
64
|
+
|
|
65
|
+
Add to your Claude Desktop config (`~/.config/claude/claude_desktop_config.json`):
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"mcpServers": {
|
|
70
|
+
"test-genie": {
|
|
71
|
+
"command": "npx",
|
|
72
|
+
"args": ["test-genie-mcp"]
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Example Usage
|
|
79
|
+
|
|
80
|
+
### Full Automation
|
|
81
|
+
```
|
|
82
|
+
User: "자동화 테스트해줘"
|
|
83
|
+
|
|
84
|
+
Claude will:
|
|
85
|
+
1. Analyze your app structure
|
|
86
|
+
2. Generate test scenarios
|
|
87
|
+
3. Execute tests
|
|
88
|
+
4. Detect issues (memory leaks, logic errors)
|
|
89
|
+
5. Suggest fixes
|
|
90
|
+
6. Wait for your confirmation
|
|
91
|
+
7. Apply approved fixes
|
|
92
|
+
8. Generate report
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Step-by-Step
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
# Analyze app
|
|
99
|
+
analyze_app_structure(projectPath: "/path/to/app")
|
|
100
|
+
|
|
101
|
+
# Generate scenarios
|
|
102
|
+
generate_scenarios(projectPath: "/path/to/app", testTypes: ["e2e", "unit"])
|
|
103
|
+
|
|
104
|
+
# Detect memory leaks
|
|
105
|
+
detect_memory_leaks(projectPath: "/path/to/app")
|
|
106
|
+
|
|
107
|
+
# Get fix suggestions
|
|
108
|
+
suggest_fixes(projectPath: "/path/to/app")
|
|
109
|
+
|
|
110
|
+
# Confirm and apply fix
|
|
111
|
+
confirm_fix(fixId: "xxx", action: "approve")
|
|
112
|
+
apply_fix(fixId: "xxx")
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Fix Confirmation Workflow
|
|
116
|
+
|
|
117
|
+
When issues are detected, Test Genie will:
|
|
118
|
+
|
|
119
|
+
1. **Suggest Fixes**: Generate AI-powered fix suggestions with confidence scores
|
|
120
|
+
2. **Show Diff**: Display exactly what will change
|
|
121
|
+
3. **Await Confirmation**: Wait for user approval
|
|
122
|
+
4. **Apply Fix**: Only apply after explicit approval
|
|
123
|
+
5. **Backup**: Automatically create backups before applying
|
|
124
|
+
|
|
125
|
+
Example confirmation prompt:
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
129
|
+
🔧 Fix Suggestion #abc123
|
|
130
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
131
|
+
|
|
132
|
+
📁 File: src/screens/HomeScreen.tsx:45
|
|
133
|
+
📝 Title: Fix: useEffect missing cleanup
|
|
134
|
+
🎯 Confidence: 90%
|
|
135
|
+
|
|
136
|
+
📄 Current Code:
|
|
137
|
+
┌──────────────────────────────────────────
|
|
138
|
+
│ useEffect(() => {
|
|
139
|
+
│ const subscription = api.subscribe();
|
|
140
|
+
│ }, []);
|
|
141
|
+
└──────────────────────────────────────────
|
|
142
|
+
|
|
143
|
+
✨ Suggested Fix:
|
|
144
|
+
┌──────────────────────────────────────────
|
|
145
|
+
│ useEffect(() => {
|
|
146
|
+
│ const subscription = api.subscribe();
|
|
147
|
+
│ return () => subscription.unsubscribe();
|
|
148
|
+
│ }, []);
|
|
149
|
+
└──────────────────────────────────────────
|
|
150
|
+
|
|
151
|
+
Actions: [✅ Approve] [❌ Reject] [✏️ Modify]
|
|
152
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Tools Reference
|
|
156
|
+
|
|
157
|
+
| Tool | Description |
|
|
158
|
+
|------|-------------|
|
|
159
|
+
| `analyze_app_structure` | Analyze codebase structure |
|
|
160
|
+
| `generate_scenarios` | Generate test scenarios |
|
|
161
|
+
| `create_test_plan` | Create test plan |
|
|
162
|
+
| `run_scenario_test` | Run single scenario |
|
|
163
|
+
| `run_simulation` | Run user simulation |
|
|
164
|
+
| `run_stress_test` | Run stress test |
|
|
165
|
+
| `detect_memory_leaks` | Detect memory leaks |
|
|
166
|
+
| `detect_logic_errors` | Detect logic errors |
|
|
167
|
+
| `suggest_fixes` | Generate fix suggestions |
|
|
168
|
+
| `confirm_fix` | Confirm/reject fix |
|
|
169
|
+
| `apply_fix` | Apply confirmed fix |
|
|
170
|
+
| `rollback_fix` | Rollback applied fix |
|
|
171
|
+
| `run_full_automation` | Run full automation pipeline |
|
|
172
|
+
| `generate_report` | Generate test report |
|
|
173
|
+
| `get_pending_fixes` | Get pending confirmations |
|
|
174
|
+
| `get_test_history` | Get test history |
|
|
175
|
+
| `analyze_performance` | Deep performance analysis |
|
|
176
|
+
| `analyze_code_deep` | AST-based code analysis |
|
|
177
|
+
| `generate_cicd_config` | Generate CI/CD configuration |
|
|
178
|
+
|
|
179
|
+
## Platform-Specific Features
|
|
180
|
+
|
|
181
|
+
### iOS
|
|
182
|
+
- XCTest, XCUITest integration
|
|
183
|
+
- Instruments profiling (Time Profiler, Allocations, Leaks)
|
|
184
|
+
- Simulator management
|
|
185
|
+
- Screenshot & video recording
|
|
186
|
+
|
|
187
|
+
### Android
|
|
188
|
+
- Gradle test integration
|
|
189
|
+
- Espresso, UI Automator support
|
|
190
|
+
- Android Profiler (CPU, Memory, Network)
|
|
191
|
+
- LeakCanary integration
|
|
192
|
+
- ADB device management
|
|
193
|
+
|
|
194
|
+
### Flutter
|
|
195
|
+
- flutter_test, integration_test
|
|
196
|
+
- Golden tests (snapshot testing)
|
|
197
|
+
- Performance profiling
|
|
198
|
+
- Memory analysis
|
|
199
|
+
|
|
200
|
+
### React Native
|
|
201
|
+
- Jest, React Native Testing Library
|
|
202
|
+
- Detox E2E testing
|
|
203
|
+
- Performance monitoring
|
|
204
|
+
- Memory leak detection
|
|
205
|
+
|
|
206
|
+
### Web
|
|
207
|
+
- Playwright, Cypress support
|
|
208
|
+
- Lighthouse performance audits
|
|
209
|
+
- Accessibility testing (axe-core)
|
|
210
|
+
- Visual regression testing
|
|
211
|
+
- Load testing (K6 integration)
|
|
212
|
+
|
|
213
|
+
## License
|
|
214
|
+
|
|
215
|
+
MIT
|
|
216
|
+
|
|
217
|
+
## Author
|
|
218
|
+
|
|
219
|
+
Yoonkyoung Gong
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Platform, ComponentInfo, ApiInfo } from '../types.js';
|
|
2
|
+
export interface FunctionInfo {
|
|
3
|
+
name: string;
|
|
4
|
+
path: string;
|
|
5
|
+
line: number;
|
|
6
|
+
parameters: {
|
|
7
|
+
name: string;
|
|
8
|
+
type: string;
|
|
9
|
+
optional: boolean;
|
|
10
|
+
}[];
|
|
11
|
+
returnType: string;
|
|
12
|
+
async: boolean;
|
|
13
|
+
complexity: number;
|
|
14
|
+
linesOfCode: number;
|
|
15
|
+
dependencies: string[];
|
|
16
|
+
calls: string[];
|
|
17
|
+
isExported: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface ClassInfo {
|
|
20
|
+
name: string;
|
|
21
|
+
path: string;
|
|
22
|
+
line: number;
|
|
23
|
+
extends?: string;
|
|
24
|
+
implements: string[];
|
|
25
|
+
properties: {
|
|
26
|
+
name: string;
|
|
27
|
+
type: string;
|
|
28
|
+
visibility: string;
|
|
29
|
+
static: boolean;
|
|
30
|
+
}[];
|
|
31
|
+
methods: FunctionInfo[];
|
|
32
|
+
isExported: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface ImportInfo {
|
|
35
|
+
module: string;
|
|
36
|
+
imports: {
|
|
37
|
+
name: string;
|
|
38
|
+
alias?: string;
|
|
39
|
+
}[];
|
|
40
|
+
isDefault: boolean;
|
|
41
|
+
isNamespace: boolean;
|
|
42
|
+
line: number;
|
|
43
|
+
}
|
|
44
|
+
export interface CodeAnalysisResult {
|
|
45
|
+
functions: FunctionInfo[];
|
|
46
|
+
classes: ClassInfo[];
|
|
47
|
+
imports: ImportInfo[];
|
|
48
|
+
exports: string[];
|
|
49
|
+
hooks: HookInfo[];
|
|
50
|
+
components: ComponentInfo[];
|
|
51
|
+
apis: ApiInfo[];
|
|
52
|
+
complexity: {
|
|
53
|
+
average: number;
|
|
54
|
+
max: number;
|
|
55
|
+
total: number;
|
|
56
|
+
};
|
|
57
|
+
issues: CodeIssue[];
|
|
58
|
+
metrics: {
|
|
59
|
+
totalLines: number;
|
|
60
|
+
codeLines: number;
|
|
61
|
+
commentLines: number;
|
|
62
|
+
blankLines: number;
|
|
63
|
+
functionCount: number;
|
|
64
|
+
classCount: number;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export interface HookInfo {
|
|
68
|
+
type: 'useState' | 'useEffect' | 'useCallback' | 'useMemo' | 'useRef' | 'useContext' | 'custom';
|
|
69
|
+
name: string;
|
|
70
|
+
line: number;
|
|
71
|
+
dependencies?: string[];
|
|
72
|
+
hasCleanup?: boolean;
|
|
73
|
+
initialValue?: string;
|
|
74
|
+
}
|
|
75
|
+
export interface CodeIssue {
|
|
76
|
+
type: 'error' | 'warning' | 'info';
|
|
77
|
+
category: 'memory' | 'performance' | 'security' | 'style' | 'logic';
|
|
78
|
+
message: string;
|
|
79
|
+
line: number;
|
|
80
|
+
column?: number;
|
|
81
|
+
file: string;
|
|
82
|
+
suggestion?: string;
|
|
83
|
+
}
|
|
84
|
+
export declare function analyzeTypeScript(filePath: string, content: string): CodeAnalysisResult;
|
|
85
|
+
export declare function analyzeProject(projectPath: string, platform: Platform): Promise<{
|
|
86
|
+
files: {
|
|
87
|
+
path: string;
|
|
88
|
+
analysis: CodeAnalysisResult;
|
|
89
|
+
}[];
|
|
90
|
+
summary: {
|
|
91
|
+
totalFiles: number;
|
|
92
|
+
totalFunctions: number;
|
|
93
|
+
totalClasses: number;
|
|
94
|
+
totalComponents: number;
|
|
95
|
+
avgComplexity: number;
|
|
96
|
+
issueCount: {
|
|
97
|
+
error: number;
|
|
98
|
+
warning: number;
|
|
99
|
+
info: number;
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
}>;
|
|
103
|
+
declare const _default: {
|
|
104
|
+
analyzeTypeScript: typeof analyzeTypeScript;
|
|
105
|
+
analyzeProject: typeof analyzeProject;
|
|
106
|
+
};
|
|
107
|
+
export default _default;
|
|
108
|
+
//# sourceMappingURL=astAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"astAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/astAnalyzer.ts"],"names":[],"mappings":"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"}
|