AI4SE_Practices/AI4SE-survey/api/schemas/test.py

113 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
测试任务相关的数据模型
"""
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