| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- """ExecutorAgent 路径参数替换与 URL 拼接的单元测试"""
- from src.agents.executor_agent import ExecutorAgent
- def _executor():
- return ExecutorAgent()
- # --- _replace_path_params ---
- def test_replace_path_params_basic():
- path, params = _executor()._replace_path_params("/status/{codes}", {"codes": "200"})
- assert path == "/status/200"
- assert params == {}
- def test_replace_path_params_keeps_query_params():
- path, params = _executor()._replace_path_params("/users/{id}", {"id": 1, "page": 2})
- assert path == "/users/1"
- assert params == {"page": 2}
- def test_replace_path_params_missing_value_keeps_placeholder():
- # error 用例缺少参数时,占位符应保留原样
- path, params = _executor()._replace_path_params("/status/{codes}", {})
- assert path == "/status/{codes}"
- assert params == {}
- def test_replace_path_params_multiple():
- path, _ = _executor()._replace_path_params("/x/{a}/y/{b}", {"a": 1, "b": 2})
- assert path == "/x/1/y/2"
- # --- execute_one:URL 拼接 ---
- def test_execute_one_url_join_and_param_removal():
- class FakeClient:
- def request(self, method, url, headers=None, params=None, body=None,
- files=None, content_type="application/json"):
- return {"method": method, "url": url, "params": params, "body": body}
- ex = _executor()
- ex.http_client = FakeClient()
- case = {"path": "/status/{codes}", "method": "GET", "params": {"codes": "200"}}
- out = ex.execute_one(case, "https://httpbin.org/")
- assert out["case"] is case
- assert out["result"]["url"] == "https://httpbin.org/status/200"
- assert out["result"]["params"] == {}
- assert out["result"]["method"] == "GET"
- def test_execute_one_passes_headers_and_files():
- """执行时全局认证头与 multipart 文件要原样透传给工具"""
- captured = {}
- class FakeClient:
- def request(self, method, url, headers=None, params=None, body=None,
- files=None, content_type="application/json"):
- captured["headers"] = headers
- captured["files"] = files
- captured["content_type"] = content_type
- return {"method": method, "url": url}
- ex = _executor()
- ex.http_client = FakeClient()
- case = {
- "path": "/api/files/images",
- "method": "POST",
- "params": {},
- "body": {},
- "files": {"file": ("a.png", b"x", "image/png")},
- "content_type": "multipart/form-data",
- }
- ex.execute_one(case, "http://x", headers={"Authorization": "Bearer token"})
- assert captured["headers"] == {"Authorization": "Bearer token"}
- assert captured["files"] == {"file": ("a.png", b"x", "image/png")}
- assert captured["content_type"] == "multipart/form-data"
|