Files
zeekerWatchmen/server/api/routes/testcase.py
T
2026-05-25 15:09:42 +08:00

48 lines
1.4 KiB
Python

# 测试用例生成与导出接口
import logging
from fastapi import APIRouter, HTTPException
from fastapi.responses import Response
from server.services.testcase_engine.generator import tc_generator
from server.services.testcase_engine.exporter import tc_exporter
logger = logging.getLogger(__name__)
router = APIRouter()
@router.post("/generate")
async def generate_testcases(ir_id: str):
"""基于 IR 生成测试用例集"""
result = await tc_generator.generate(ir_id)
if "error" in result:
raise HTTPException(500, result["error"])
return {
"tc_set_id": result["tc_set_id"],
"ir_id": result["ir_id"],
"case_count": result["case_count"],
"cases": result["cases"],
"created_at": result["created_at"],
}
@router.get("/export/{format}")
async def export_testcases(tc_set_id: str, format: str):
"""导出测试用例为指定格式 (yaml/csv/json)"""
if format not in ("yaml", "csv", "json"):
raise HTTPException(400, f"Unsupported format: {format}")
try:
content, mime_type, filename = await tc_exporter.export(tc_set_id, format)
except ValueError as e:
raise HTTPException(404, str(e))
content_bytes = content.encode("utf-8") if isinstance(content, str) else content
return Response(
content=content_bytes,
media_type=mime_type,
headers={"Content-Disposition": f"attachment; filename={filename}"},
)