"""JRXML 代理集成测试 - 4 个验收场景。 这些测试模拟多轮对话并验证代理管道。 需要验证服务在 8001 端口上运行。 """ import os import sys import pytest sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from dotenv import load_dotenv load_dotenv() from agent.graph import build_graph, create_initial_state @pytest.fixture def graph(): return build_graph() def run_graph(graph, initial_state): """使用给定的初始状态运行图并返回最终状态。""" final = None for event in graph.stream(initial_state): for node_name, node_state in event.items(): final = node_state return final class TestAcceptanceScenarios: def test_scenario1_simple_report_generation(self, graph): """场景 1:生成简单的员工名册 - 应该通过验证。""" state = create_initial_state() state["user_input"] = ( "Generate an employee roster report with columns: employee_id (Integer), " "full_name (String), department (String), and salary (BigDecimal). " "Query from employees table. Include a title 'Employee Roster'." ) state["stage"] = "initial_generation" final = run_graph(graph, state) assert final.get("current_jrxml"), "应该已生成 JRXML" assert final.get("status") in ("pass", "fail"), f"意外状态: {final.get('status')}" assert "= 5 or final.get("status") == "pass"