import json import httpx import os # --- 配置 --- SERVER_URL = "http://localhost:8000" GRAPH_EXECUTE_ENDPOINT = f"{SERVER_URL}/execute_graph" GRAPH_FILE_PATH = os.path.join(os.path.dirname(__file__), "assets", "complex_remote_graph.json") def run_test(): """ 执行端到端远程调用测试。 使用方法: 1. 确保 remote_test_server.py 正在运行 (uvicorn server.remote_test_server:app --reload --port 8000) 2. 确保 test_complex_remote_client.py 正在运行 (python tests/test_complex_remote_client.py) 3. 运行此脚本 (python tests/run_remote_test.py) """ print("--- Running End-to-End Remote Execution Test ---") # 1. 加载图JSON文件 try: with open(GRAPH_FILE_PATH, 'r', encoding='utf-8') as f: graph_data = json.load(f) print(f"Successfully loaded graph from: {GRAPH_FILE_PATH}") except FileNotFoundError: print(f"ERROR: Graph file not found at {GRAPH_FILE_PATH}") return # 2. 准备初始输入 # 根据 complex_remote_graph.json 的 "interface" 定义 initial_inputs = { "main_text": "hello_remote_world", "main_num": 5 } print(f"Initial inputs: {initial_inputs}") # 3. 构建请求体 request_payload = { "graph_data": graph_data, "initial_inputs": initial_inputs } # 4. 发送HTTP请求到服务器 print(f"Sending POST request to {GRAPH_EXECUTE_ENDPOINT}...") try: with httpx.Client(timeout=60.0) as client: response = client.post(GRAPH_EXECUTE_ENDPOINT, json=request_payload) response.raise_for_status() # 如果状态码不是 2xx,则会引发异常 result = response.json() print("\n--- Test Result ---") print("Request successful!") print("Server response:") # 使用json.dumps美化输出 print(json.dumps(result, indent=2, ensure_ascii=False)) # 预期结果计算: # 1. main_text "hello_remote_world" 长度为 18 # 2. 子图接收 sub_in_1=18, sub_in_2=5 # 3. 子图内本地相加: 18 + 5 = 23 # 4. 子图内远程计算比率: 23 / 10.0 = 2.3 # 5. 主图接收到最终结果 2.3 expected_ratio = 2.3 final_ratio = result.get("outputs", {}).get("final_ratio", {}).get("value") print("\n--- Verification ---") print(f"Expected final_ratio: {expected_ratio}") print(f"Actual final_ratio: {final_ratio}") assert final_ratio == expected_ratio, "Test assertion failed!" print("✅ Test Passed Successfully!") except httpx.RequestError as e: print("\n--- TEST FAILED ---") print(f"ERROR: Could not connect to the server at {SERVER_URL}.") print("Please ensure the 'remote_test_server.py' is running.") print(f"Details: {e}") except httpx.HTTPStatusError as e: print("\n--- TEST FAILED ---") print(f"ERROR: Server returned a non-200 status code: {e.response.status_code}") print("Server response:") try: # 尝试打印JSON错误详情 print(json.dumps(e.response.json(), indent=2, ensure_ascii=False)) except json.JSONDecodeError: print(e.response.text) if __name__ == "__main__": run_test()