test_reporter_agent.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. """ReporterAgent 统计与报告生成的单元测试"""
  2. from src.agents.reporter_agent import ReporterAgent
  3. def _make_result(passed, name="用例", case_type="normal", status_code=200):
  4. return {
  5. "case": {"name": name, "case_type": case_type, "expected_status": 200},
  6. "result": {"success": True, "status_code": status_code, "body": None, "elapsed": 0.1, "error": None},
  7. "passed": passed,
  8. "errors": [] if passed else ["状态码不符:期望 200,实际 %s" % status_code],
  9. }
  10. # --- summarize ---
  11. def test_summarize_basic():
  12. results = [_make_result(True), _make_result(True), _make_result(False)]
  13. s = ReporterAgent().summarize(results)
  14. assert s == {"total": 3, "passed": 2, "failed": 1, "pass_rate": 66.7}
  15. def test_summarize_empty():
  16. s = ReporterAgent().summarize([])
  17. assert s == {"total": 0, "passed": 0, "failed": 0, "pass_rate": 0}
  18. # --- generate_markdown ---
  19. def test_generate_markdown_summary():
  20. md = ReporterAgent().generate_markdown([_make_result(True), _make_result(False)])
  21. assert "通过率:**50.0%**" in md
  22. assert "| 用例名称 | 类型 | 状态码 |" in md
  23. def test_generate_markdown_failed_request_no_none():
  24. # 请求失败时 status_code 是 None,报告里应显示 "-" 而不是 "None"
  25. results = [
  26. {
  27. "case": {"name": "失败用例", "case_type": "error"},
  28. "result": {"success": False, "status_code": None, "body": None, "elapsed": 0.0, "error": "请求超时"},
  29. "passed": False,
  30. "errors": ["请求失败:请求超时"],
  31. }
  32. ]
  33. md = ReporterAgent().generate_markdown(results)
  34. assert "None" not in md
  35. assert "| 失败用例 | error | - |" in md
  36. # --- generate_html ---
  37. def test_generate_html_basic():
  38. html = ReporterAgent().generate_html([_make_result(True)])
  39. assert "API 测试报告" in html
  40. assert "100.0%" in html
  41. def test_generate_html_no_crash_on_empty():
  42. html = ReporterAgent().generate_html([])
  43. assert "API 测试报告" in html