# 测试用例生成与导出接口 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}"}, )