123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- """
- 单元分类功能集成测试
- 该测试文件用于验证单元分类功能是否正确集成到项目中
- """
- import requests
- import json
- from typing import Dict, Any
- def test_unit_grouping_api():
- """
- 测试单元分类API接口
- """
- base_url = "http://localhost:8000"
-
- print("=" * 60)
- print("单元分类功能集成测试")
- print("=" * 60)
-
- # 测试1: 获取单元h_xtfx分类结果
- print("\n1. 测试获取单元h_xtfx分类结果")
- print("-" * 40)
-
- try:
- response = requests.get(f"{base_url}/api/unit-grouping/h_xtfx")
-
- if response.status_code == 200:
- data = response.json()
- print(f"✓ 请求成功")
- print(f"✓ 成功状态: {data.get('success', False)}")
-
- if data.get('success', False):
- statistics = data.get('statistics', {})
- print(f"✓ 总单元数: {statistics.get('total_units', 0)}")
- print(f"✓ 有数据的单元数: {statistics.get('units_with_data', 0)}")
- print(f"✓ 无数据的单元数: {statistics.get('units_without_data', 0)}")
-
- category_dist = statistics.get('category_distribution', {})
- print(f"✓ 类别分布:")
- for category, count in category_dist.items():
- print(f" - {category}: {count}")
-
- # 显示前5个单元的结果
- unit_data = data.get('data', {})
- if unit_data:
- print(f"✓ 前5个单元结果样例:")
- for i, (unit_id, h_xtfx) in enumerate(list(unit_data.items())[:5]):
- print(f" - 单元 {unit_id}: {h_xtfx}")
- else:
- print(f"✗ 服务返回失败: {data.get('error', 'Unknown error')}")
- else:
- print(f"✗ 请求失败,状态码: {response.status_code}")
- print(f"✗ 错误信息: {response.text}")
-
- except requests.exceptions.ConnectionError:
- print("✗ 连接失败,请确保服务正在运行 (uvicorn main:app --reload)")
- except Exception as e:
- print(f"✗ 测试异常: {str(e)}")
-
- # 测试2: 获取统计信息
- print("\n2. 测试获取统计信息")
- print("-" * 40)
-
- try:
- response = requests.get(f"{base_url}/api/unit-grouping/statistics")
-
- if response.status_code == 200:
- data = response.json()
- print(f"✓ 请求成功")
- print(f"✓ 成功状态: {data.get('success', False)}")
-
- if data.get('success', False):
- statistics = data.get('statistics', {})
- print(f"✓ 统计信息获取成功")
- print(f" - 总单元数: {statistics.get('total_units', 0)}")
- print(f" - 有数据的单元数: {statistics.get('units_with_data', 0)}")
- print(f" - 无数据的单元数: {statistics.get('units_without_data', 0)}")
- else:
- print(f"✗ 请求失败,状态码: {response.status_code}")
- print(f"✗ 错误信息: {response.text}")
-
- except requests.exceptions.ConnectionError:
- print("✗ 连接失败,请确保服务正在运行")
- except Exception as e:
- print(f"✗ 测试异常: {str(e)}")
-
- # 测试3: 获取特定单元的h_xtfx值
- print("\n3. 测试获取特定单元的h_xtfx值")
- print("-" * 40)
-
- try:
- # 首先获取一个存在的单元ID
- response = requests.get(f"{base_url}/api/unit-grouping/h_xtfx")
- if response.status_code == 200:
- data = response.json()
- if data.get('success', False):
- unit_data = data.get('data', {})
- if unit_data:
- # 取第一个单元进行测试
- test_unit_id = list(unit_data.keys())[0]
-
- # 测试获取特定单元
- response = requests.get(f"{base_url}/api/unit-grouping/unit/{test_unit_id}")
-
- if response.status_code == 200:
- unit_result = response.json()
- print(f"✓ 请求成功")
- print(f"✓ 单元 {test_unit_id} 的h_xtfx值: {unit_result.get('h_xtfx')}")
- else:
- print(f"✗ 请求失败,状态码: {response.status_code}")
- else:
- print("✗ 没有可用的单元数据进行测试")
- else:
- print("✗ 无法获取单元数据进行测试")
- else:
- print("✗ 无法获取单元数据进行测试")
-
- except requests.exceptions.ConnectionError:
- print("✗ 连接失败,请确保服务正在运行")
- except Exception as e:
- print(f"✗ 测试异常: {str(e)}")
-
- print("\n" + "=" * 60)
- print("测试完成")
- print("=" * 60)
-
- # 测试4: 测试新的ORM接口
- print("\n4. 测试新的ORM接口功能")
- print("-" * 40)
-
- # 测试点位统计信息
- try:
- response = requests.get(f"{base_url}/api/unit-grouping/points/statistics")
-
- if response.status_code == 200:
- data = response.json()
- print(f"✓ 点位统计信息获取成功")
- distribution = data.get('distribution', {})
- print(f"✓ 总点位数: {data.get('total_points', 0)}")
- for category, stats in distribution.items():
- print(f" - {category}: {stats['count']} ({stats['percentage']}%)")
- else:
- print(f"✗ 获取点位统计信息失败,状态码: {response.status_code}")
- except Exception as e:
- print(f"✗ 测试点位统计信息异常: {str(e)}")
-
- # 测试数据库摘要信息
- try:
- response = requests.get(f"{base_url}/api/unit-grouping/database/summary")
-
- if response.status_code == 200:
- data = response.json()
- print(f"✓ 数据库摘要信息获取成功")
- summary = data.get('summary', {})
- print(f" - 总单元数: {summary.get('total_units', 0)}")
- print(f" - 总点位数: {summary.get('total_points', 0)}")
- print(f" - h_xtfx分类数: {summary.get('h_xtfx_categories', 0)}")
- else:
- print(f"✗ 获取数据库摘要信息失败,状态码: {response.status_code}")
- except Exception as e:
- print(f"✗ 测试数据库摘要信息异常: {str(e)}")
-
- # 测试批量获取单元信息
- try:
- response = requests.get(f"{base_url}/api/unit-grouping/units/batch?unit_ids=1&unit_ids=2&unit_ids=3")
-
- if response.status_code == 200:
- data = response.json()
- print(f"✓ 批量获取单元信息成功")
- print(f" - 请求数量: {data.get('total_requested', 0)}")
- print(f" - 找到数量: {data.get('total_found', 0)}")
- else:
- print(f"✗ 批量获取单元信息失败,状态码: {response.status_code}")
- except Exception as e:
- print(f"✗ 测试批量获取单元信息异常: {str(e)}")
-
- # 输出使用说明
- print("\n使用说明:")
- print("1. 启动服务: uvicorn main:app --reload")
- print("2. 访问API文档: http://localhost:8000/docs")
- print("3. 主要接口:")
- print(" - GET /api/unit-grouping/h_xtfx - 获取所有单元的h_xtfx分类结果")
- print(" - GET /api/unit-grouping/statistics - 获取统计信息")
- print(" - GET /api/unit-grouping/unit/{unit_id} - 获取特定单元的h_xtfx值")
- print(" - GET /api/unit-grouping/points/statistics - 获取点位统计信息(ORM)")
- print(" - GET /api/unit-grouping/database/summary - 获取数据库摘要信息(ORM)")
- print(" - GET /api/unit-grouping/units/batch - 批量获取单元信息(ORM)")
- print(" - GET /api/unit-grouping/points/by-area - 按区域获取点位数据(ORM)")
- if __name__ == "__main__":
- test_unit_grouping_api()
|