forked from Kexing/AI4SE_Practices
113 lines
3.8 KiB
Python
113 lines
3.8 KiB
Python
"""
|
||
测试任务相关的数据模型
|
||
"""
|
||
from datetime import datetime
|
||
from typing import List, Optional, Dict, Any
|
||
from enum import Enum
|
||
from pydantic import BaseModel, Field
|
||
|
||
|
||
class TestTaskType(str, Enum):
|
||
"""测试任务类型"""
|
||
TASK1_API = "task1-api"
|
||
TASK2_DEBUG = "task2-debug"
|
||
TASK3_REFACTOR = "task3-refactor"
|
||
TASK4_REQUIREMENTS = "task4-requirements"
|
||
TASK5_ARCHITECTURE = "task5-architecture"
|
||
|
||
|
||
class TestStatus(str, Enum):
|
||
"""测试状态"""
|
||
PENDING = "pending"
|
||
IN_PROGRESS = "in_progress"
|
||
COMPLETED = "completed"
|
||
FAILED = "failed"
|
||
|
||
|
||
class EfficiencyMetrics(BaseModel):
|
||
"""效率指标"""
|
||
development_time: Optional[int] = Field(None, description="开发耗时(分钟)")
|
||
interaction_count: Optional[int] = Field(None, description="交互次数")
|
||
automation_rate: Optional[float] = Field(None, description="自动化程度(%)", ge=0, le=100)
|
||
response_time: Optional[float] = Field(None, description="响应速度(秒)")
|
||
|
||
|
||
class QualityMetrics(BaseModel):
|
||
"""质量指标"""
|
||
code_accuracy: Optional[float] = Field(None, description="代码正确率(%)", ge=0, le=100)
|
||
test_pass_rate: Optional[float] = Field(None, description="测试通过率(%)", ge=0, le=100)
|
||
readability_score: Optional[int] = Field(None, description="可读性评分(1-5)", ge=1, le=5)
|
||
security_score: Optional[int] = Field(None, description="安全性评分(1-5)", ge=1, le=5)
|
||
standard_score: Optional[int] = Field(None, description="规范性评分(1-5)", ge=1, le=5)
|
||
|
||
|
||
class TestMetrics(BaseModel):
|
||
"""测试指标"""
|
||
efficiency: Optional[EfficiencyMetrics] = None
|
||
quality: Optional[QualityMetrics] = None
|
||
overall_score: Optional[float] = Field(None, description="综合评分(1-5)", ge=1, le=5)
|
||
|
||
|
||
class TestResult(BaseModel):
|
||
"""测试结果"""
|
||
id: str = Field(..., description="测试结果ID")
|
||
tool_id: str = Field(..., description="工具ID")
|
||
task_type: TestTaskType = Field(..., description="测试任务类型")
|
||
status: TestStatus = Field(default=TestStatus.PENDING, description="测试状态")
|
||
test_date: Optional[datetime] = None
|
||
environment: Optional[Dict[str, Any]] = None
|
||
original_code: Optional[str] = None
|
||
final_code: Optional[str] = None
|
||
modifications: Optional[List[Dict[str, str]]] = []
|
||
metrics: Optional[TestMetrics] = None
|
||
pros: Optional[List[str]] = []
|
||
cons: Optional[List[str]] = []
|
||
screenshots: Optional[List[str]] = []
|
||
notes: Optional[str] = None
|
||
created_at: Optional[datetime] = None
|
||
updated_at: Optional[datetime] = None
|
||
|
||
|
||
class TestResultCreate(BaseModel):
|
||
"""创建测试结果请求"""
|
||
tool_id: str
|
||
task_type: TestTaskType
|
||
environment: Optional[Dict[str, Any]] = None
|
||
original_code: Optional[str] = None
|
||
final_code: Optional[str] = None
|
||
modifications: Optional[List[Dict[str, str]]] = []
|
||
metrics: Optional[TestMetrics] = None
|
||
pros: Optional[List[str]] = []
|
||
cons: Optional[List[str]] = []
|
||
notes: Optional[str] = None
|
||
|
||
|
||
class TestResultUpdate(BaseModel):
|
||
"""更新测试结果请求"""
|
||
status: Optional[TestStatus] = None
|
||
final_code: Optional[str] = None
|
||
modifications: Optional[List[Dict[str, str]]] = None
|
||
metrics: Optional[TestMetrics] = None
|
||
pros: Optional[List[str]] = None
|
||
cons: Optional[List[str]] = None
|
||
notes: Optional[str] = None
|
||
|
||
|
||
class TestResultListResponse(BaseModel):
|
||
"""测试结果列表响应"""
|
||
total: int
|
||
results: List[TestResult]
|
||
page: int = 1
|
||
page_size: int = 20
|
||
|
||
|
||
class TestTaskInfo(BaseModel):
|
||
"""测试任务信息"""
|
||
task_type: TestTaskType
|
||
name: str
|
||
description: str
|
||
requirements: List[str]
|
||
acceptance_criteria: List[str]
|
||
initial_conditions: Optional[Dict[str, Any]] = None
|
||
|