test_preview.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #!/usr/bin/env python
  2. """测试模板预览功能"""
  3. import sys
  4. from pathlib import Path
  5. # 添加后端路径
  6. sys.path.insert(0, str(Path(__file__).parent.parent / "backend"))
  7. from app.services.renderer import renderer
  8. # 测试用例1:简单模板
  9. test_template_1 = """
  10. {% set greeting = ["嗨", "哈喽"] %}
  11. {{ greeting | random }},我是你的洗衣小助手!
  12. """
  13. # 测试用例2:带程序名称的模板
  14. test_template_2 = """
  15. {% set program_id = program_id | string | trim %}
  16. {% set program_name = program_name_map.get(program_id, "智慧洗") %}
  17. 推荐使用{{ program_name }}程序,洗衣更省心!
  18. """
  19. # 测试用例3:X11 真实 common 模板片段
  20. test_template_3 = """
  21. {% set greeting = ["嗨", "哈喽"] %}
  22. {% set assistant1 = ["小优来啦", "你的洗护小管家来啦"] %}
  23. {% set assistant2 = ["洗衣推荐来啦", "洗衣小贴士来啦"] %}
  24. {{ greeting | random }},{{ assistant1 | random }},{{ assistant2 | random }}
  25. """
  26. # 测试用例4:带条件分支
  27. test_template_4 = """
  28. {% if rerank_reason == "PIN_CONSECUTIVE" %}
  29. 发现你连续使用了{{ program_name }}程序,这个程序很适合日常使用哦!
  30. {% elif rerank_reason == "POPULAR" %}
  31. 为你推荐人气程序{{ program_name }},很多用户都喜欢用!
  32. {% else %}
  33. 为您推荐{{ program_name }}程序!
  34. {% endif %}
  35. """
  36. def test_preview(template_body, name, params=None):
  37. print(f"\n{'='*60}")
  38. print(f"测试: {name}")
  39. print(f"{'='*60}")
  40. try:
  41. params = params or {}
  42. result = renderer.preview(type('obj', (object,), {
  43. 'template_body': template_body,
  44. 'parameters': params
  45. })())
  46. print(f"✅ 成功")
  47. print(f"\n生成结果:\n{result}")
  48. return True
  49. except Exception as e:
  50. print(f"❌ 失败: {e}")
  51. return False
  52. if __name__ == "__main__":
  53. print("开始测试模板预览功能...")
  54. all_passed = True
  55. # 测试1:简单模板
  56. all_passed &= test_preview(test_template_1, "简单模板")
  57. # 测试2:带程序名称
  58. all_passed &= test_preview(test_template_2, "带程序名称", {
  59. 'program_id': '15'
  60. })
  61. # 测试3:X11 真实模板
  62. all_passed &= test_preview(test_template_3, "X11 common模板")
  63. # 测试4:条件分支(无参数时应触发默认值)
  64. all_passed &= test_preview(test_template_4, "条件分支模板", {
  65. 'program_name': '速洗'
  66. })
  67. # 测试5:缺失参数(应自动填充默认值)
  68. all_passed &= test_preview(test_template_4, "条件分支-缺失参数自动填充")
  69. print(f"\n{'='*60}")
  70. if all_passed:
  71. print("✅ 所有测试通过!")
  72. else:
  73. print("❌ 部分测试失败")
  74. print(f"{'='*60}")