test_tencent_api.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. """
  2. 腾讯广告平台 API 接口测试脚本
  3. 测试内容:
  4. 1. 环境变量检查
  5. 2. API 连接测试(获取账户信息)
  6. 3. 广告列表查询测试
  7. 4. 数据报表查询测试
  8. 使用方法:
  9. cd /Users/liulidong/project/agent/Agent
  10. python3 examples/auto_put_ad_mini/test_tencent_api.py
  11. """
  12. import asyncio
  13. import os
  14. import sys
  15. from pathlib import Path
  16. # 添加项目根目录到 Python 路径
  17. sys.path.insert(0, str(Path(__file__).parent.parent.parent))
  18. from dotenv import load_dotenv
  19. load_dotenv()
  20. # 导入腾讯广告 API 工具
  21. from examples.auto_put_ad_mini.tools.ad_api import (
  22. account_get_info,
  23. ad_get_list,
  24. ad_get_report,
  25. )
  26. def check_env_vars():
  27. """检查必需的环境变量"""
  28. print("=" * 70)
  29. print("【1/4】环境变量检查")
  30. print("=" * 70)
  31. required_vars = {
  32. "TENCENT_AD_ACCESS_TOKEN": "腾讯广告 OAuth2 访问令牌",
  33. "TENCENT_AD_ACCOUNT_ID": "腾讯广告账户 ID",
  34. }
  35. optional_vars = {
  36. "TENCENT_AD_BASE_URL": f"API 基础 URL (默认: https://api.e.qq.com/v3.0)",
  37. }
  38. missing = []
  39. # 检查必需变量
  40. for var, desc in required_vars.items():
  41. value = os.getenv(var)
  42. if value:
  43. # 脱敏显示
  44. if "TOKEN" in var:
  45. display_value = value[:10] + "..." if len(value) > 10 else "***"
  46. else:
  47. display_value = value
  48. print(f"✅ {var}: {display_value}")
  49. print(f" {desc}")
  50. else:
  51. print(f"❌ {var}: 未设置")
  52. print(f" {desc}")
  53. missing.append(var)
  54. # 检查可选变量
  55. print("\n可选配置:")
  56. for var, desc in optional_vars.items():
  57. value = os.getenv(var)
  58. if value:
  59. print(f"✅ {var}: {value}")
  60. else:
  61. print(f"⚪ {var}: 未设置 (将使用默认值)")
  62. print(f" {desc}")
  63. if missing:
  64. print(f"\n❌ 缺少必需环境变量: {', '.join(missing)}")
  65. print("\n请在 .env 文件中配置:")
  66. print("-" * 70)
  67. for var in missing:
  68. print(f"{var}=your_value_here")
  69. print("-" * 70)
  70. return False
  71. print("\n✅ 环境变量检查通过")
  72. return True
  73. async def test_account_info():
  74. """测试获取账户信息"""
  75. print("\n" + "=" * 70)
  76. print("【2/4】账户信息查询测试")
  77. print("=" * 70)
  78. try:
  79. result = await account_get_info()
  80. if "失败" in result.title:
  81. print(f"❌ 测试失败: {result.title}")
  82. print(f" 错误信息: {result.output}")
  83. return False
  84. else:
  85. print(f"✅ {result.title}")
  86. print(result.output)
  87. return True
  88. except Exception as e:
  89. print(f"❌ 测试异常: {e}")
  90. import traceback
  91. traceback.print_exc()
  92. return False
  93. async def test_ad_list():
  94. """测试查询广告列表"""
  95. print("\n" + "=" * 70)
  96. print("【3/4】广告列表查询测试")
  97. print("=" * 70)
  98. try:
  99. # 查询前 5 个广告
  100. result = await ad_get_list(page=1, page_size=5)
  101. if "失败" in result.title:
  102. print(f"❌ 测试失败: {result.title}")
  103. print(f" 错误信息: {result.output}")
  104. return False
  105. else:
  106. print(f"✅ {result.title}")
  107. print(result.output)
  108. # 显示更多统计信息
  109. if result.metadata and "list" in result.metadata:
  110. ads = result.metadata["list"]
  111. if ads:
  112. print(f"\n📊 统计信息:")
  113. print(f" - 广告数量: {len(ads)}")
  114. statuses = {}
  115. for ad in ads:
  116. status = ad.get("configured_status", "UNKNOWN")
  117. statuses[status] = statuses.get(status, 0) + 1
  118. print(f" - 状态分布: {statuses}")
  119. return True
  120. except Exception as e:
  121. print(f"❌ 测试异常: {e}")
  122. import traceback
  123. traceback.print_exc()
  124. return False
  125. async def test_report():
  126. """测试查询数据报表"""
  127. print("\n" + "=" * 70)
  128. print("【4/4】数据报表查询测试")
  129. print("=" * 70)
  130. try:
  131. from datetime import datetime, timedelta
  132. # 查询最近 7 天的数据
  133. end_date = datetime.now()
  134. start_date = end_date - timedelta(days=6)
  135. date_range = {
  136. "start_date": start_date.strftime("%Y-%m-%d"),
  137. "end_date": end_date.strftime("%Y-%m-%d"),
  138. }
  139. print(f"查询日期范围: {date_range['start_date']} ~ {date_range['end_date']}")
  140. result = await ad_get_report(
  141. date_range=date_range,
  142. level="adgroup",
  143. page=1,
  144. page_size=5,
  145. )
  146. if "失败" in result.title:
  147. print(f"❌ 测试失败: {result.title}")
  148. print(f" 错误信息: {result.output}")
  149. return False
  150. else:
  151. print(f"✅ {result.title}")
  152. print(result.output)
  153. return True
  154. except Exception as e:
  155. print(f"❌ 测试异常: {e}")
  156. import traceback
  157. traceback.print_exc()
  158. return False
  159. async def main():
  160. """主测试流程"""
  161. print("\n" + "=" * 70)
  162. print("腾讯广告平台 API 接口测试")
  163. print("=" * 70)
  164. print()
  165. # 1. 检查环境变量
  166. if not check_env_vars():
  167. print("\n❌ 测试中止: 环境变量未配置")
  168. return
  169. # 2. 测试账户信息
  170. test1 = await test_account_info()
  171. # 3. 测试广告列表
  172. test2 = await test_ad_list()
  173. # 4. 测试数据报表
  174. test3 = await test_report()
  175. # 总结
  176. print("\n" + "=" * 70)
  177. print("测试结果汇总")
  178. print("=" * 70)
  179. results = {
  180. "环境变量检查": "✅ 通过",
  181. "账户信息查询": "✅ 通过" if test1 else "❌ 失败",
  182. "广告列表查询": "✅ 通过" if test2 else "❌ 失败",
  183. "数据报表查询": "✅ 通过" if test3 else "❌ 失败",
  184. }
  185. for test_name, status in results.items():
  186. print(f"{status} {test_name}")
  187. all_passed = all([test1, test2, test3])
  188. if all_passed:
  189. print("\n🎉 所有测试通过! 腾讯广告平台接口可用")
  190. else:
  191. print("\n⚠️ 部分测试失败,请检查:")
  192. print(" 1. ACCESS_TOKEN 是否有效")
  193. print(" 2. ACCOUNT_ID 是否正确")
  194. print(" 3. 网络连接是否正常")
  195. print(" 4. 账户权限是否充足")
  196. if __name__ == "__main__":
  197. asyncio.run(main())