Files
YunNanProject/Test/test_population_data_interface.py
2025-09-11 21:34:02 +08:00

124 lines
5.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import requests
import json
import time
# API基础URL
EDUCATION_DATA_BASE_URL = "http://localhost:8100/EducationData"
# 测试年份
test_years = [2023, 2022, 2024]
def test_population_data_by_year():
"""测试获取指定年份人口数据接口"""
print("\n===== 测试 /EducationData/populationByYear 接口 =====")
# 测试不同年份的数据
for year in test_years:
url = f"{EDUCATION_DATA_BASE_URL}/populationByYear?year={year}"
print(f"\n测试 {year} 年人口数据:")
try:
response = requests.get(url)
response.raise_for_status() # 如果状态码不是200抛出异常
data = response.json()
print(f"响应状态码: {response.status_code}")
print(f"响应数据: {json.dumps(data, ensure_ascii=False, indent=2)}")
# 验证返回数据的基本结构
assert "code" in data, "返回数据缺少code字段"
assert "message" in data, "返回数据缺少message字段"
assert "data" in data, "返回数据缺少data字段"
assert data["code"] == 200, f"状态码不匹配,期望: 200实际: {data['code']}"
# 验证数据内容
if data["data"]:
# 检查数据项的结构
population_data = data["data"]
assert "year" in population_data, "数据缺少year字段"
assert "total_population" in population_data, "数据缺少total_population字段"
assert "birth_population" in population_data, "数据缺少birth_population字段"
assert "urban_population" in population_data, "数据缺少urban_population字段"
assert "rural_population" in population_data, "数据缺少rural_population字段"
assert "urbanization_rate" in population_data, "数据缺少urbanization_rate字段"
# 检查数值类型
assert isinstance(population_data["year"], int), "year应为整数类型"
assert isinstance(population_data["total_population"], (int, float)), "total_population应为数值类型"
assert isinstance(population_data["birth_population"], (int, float)), "birth_population应为数值类型"
assert isinstance(population_data["urban_population"], (int, float)), "urban_population应为数值类型"
assert isinstance(population_data["rural_population"], (int, float)), "rural_population应为数值类型"
assert isinstance(population_data["urbanization_rate"], (int, float)), "urbanization_rate应为数值类型"
# 检查年份是否匹配
assert population_data["year"] == year, f"年份不匹配,期望: {year},实际: {population_data['year']}"
print(f"{year} 年人口数据验证通过")
else:
print(f"⚠️ {year} 年未返回人口数据")
except requests.exceptions.RequestException as e:
print(f"❌ 请求失败: {e}")
except AssertionError as e:
print(f"❌ 数据验证失败: {e}")
# 添加短暂延迟,避免请求过于频繁
time.sleep(0.5)
# 测试边界值
print("\n===== 测试边界值 =====")
# 测试最小值年份
min_year = 2015
url = f"{EDUCATION_DATA_BASE_URL}/populationByYear?year={min_year}"
print(f"\n测试最小值年份 {min_year}:")
try:
response = requests.get(url)
response.raise_for_status()
data = response.json()
print(f"响应状态码: {response.status_code}")
if data["code"] == 200 or data["code"] == 404:
print(f"✅ 最小值年份测试通过")
else:
print(f"❌ 状态码异常: {data['code']}")
except requests.exceptions.RequestException as e:
print(f"❌ 请求失败: {e}")
# 测试最大值年份
max_year = 2028
url = f"{EDUCATION_DATA_BASE_URL}/populationByYear?year={max_year}"
print(f"\n测试最大值年份 {max_year}:")
try:
response = requests.get(url)
response.raise_for_status()
data = response.json()
print(f"响应状态码: {response.status_code}")
if data["code"] == 200 or data["code"] == 404:
print(f"✅ 最大值年份测试通过")
else:
print(f"❌ 状态码异常: {data['code']}")
except requests.exceptions.RequestException as e:
print(f"❌ 请求失败: {e}")
# 测试超出范围的年份
invalid_year = 2030
url = f"{EDUCATION_DATA_BASE_URL}/populationByYear?year={invalid_year}"
print(f"\n测试超出范围的年份 {invalid_year}:")
try:
response = requests.get(url)
if response.status_code == 422: # FastAPI的验证错误状态码
print(f"响应状态码: {response.status_code}")
print(f"✅ 超出范围年份正确返回验证错误")
else:
data = response.json()
print(f"响应状态码: {response.status_code}")
print(f"响应数据: {json.dumps(data, ensure_ascii=False, indent=2)}")
print(f"❌ 期望状态码422实际: {response.status_code}")
except requests.exceptions.RequestException as e:
print(f"❌ 请求失败: {e}")
if __name__ == "__main__":
# 测试新添加的人口数据接口
test_population_data_by_year()