48 lines
1.4 KiB
Python
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}"},
|
|
)
|