Files
YunNanProject/Test/test_ruyuan_zaiyuan_interfaces.py
2025-09-12 21:31:45 +08:00

162 lines
7.2 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 unittest
import requests
class TestRuYuanZaiYuanInterfaces(unittest.TestCase):
# 配置API基础URL
BASE_URL = "http://localhost:8100" # 根据实际运行的服务地址和端口修改
def setUp(self):
# 测试前的初始化工作
pass
def tearDown(self):
# 测试后的清理工作
pass
def test_get_education_chart_config_default(self):
"""测试默认参数下的入园/招生数据接口"""
url = f"{self.BASE_URL}/RuYuanZaiYuan/school/chart"
response = requests.get(url)
self.assertEqual(response.status_code, 200)
data = response.json()
# 验证返回数据格式
self.assertIn("xAxis_data", data)
self.assertIn("series_data_0", data)
self.assertIn("series_data_1", data)
self.assertIn("series_data_2", data)
self.assertIn("series_data_3", data)
self.assertIn("series_data_4", data)
self.assertIn("education_stage", data)
# 默认应该是学前教育
self.assertEqual(data["education_stage"], "学前")
# 年份应该包含2015-2035
self.assertIn("2015", data["xAxis_data"])
self.assertIn("2024", data["xAxis_data"])
self.assertIn("2035", data["xAxis_data"])
def test_get_in_school_chart_config_default(self):
"""测试默认参数下的在园/在校数据接口"""
url = f"{self.BASE_URL}/RuYuanZaiYuan/school/inschool/chart"
response = requests.get(url)
self.assertEqual(response.status_code, 200)
data = response.json()
# 验证返回数据格式
self.assertIn("xAxis_data", data)
self.assertIn("series_data_0", data)
self.assertIn("series_data_1", data)
self.assertIn("series_data_2", data)
self.assertIn("series_data_3", data)
self.assertIn("series_data_4", data)
self.assertIn("education_stage", data)
# 默认应该是学前教育
self.assertEqual(data["education_stage"], "学前")
# 年份应该包含2015-2035
self.assertIn("2015", data["xAxis_data"])
self.assertIn("2024", data["xAxis_data"])
self.assertIn("2035", data["xAxis_data"])
def test_with_different_education_stages(self):
"""测试不同教育阶段参数"""
stages = ["preschool", "primary", "junior", "senior", "vocational"]
stage_names = {"preschool": "学前", "primary": "小学", "junior": "初中", "senior": "高中", "vocational": "中职"}
for stage in stages:
# 测试入园/招生接口
url = f"{self.BASE_URL}/RuYuanZaiYuan/school/chart?education_stage={stage}"
response = requests.get(url)
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertEqual(data["education_stage"], stage_names[stage])
# 测试在园/在校接口
url = f"{self.BASE_URL}/RuYuanZaiYuan/school/inschool/chart?education_stage={stage}"
response = requests.get(url)
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertEqual(data["education_stage"], stage_names[stage])
def test_with_different_area_names(self):
"""测试不同区域名称参数"""
# 注意:这里使用的区域名称需要在数据文件中存在,否则会返回空数据
# 以下测试假设"云南省"和"昆明市"在数据中存在
areas = ["云南省", "昆明市"]
for area in areas:
# 测试入园/招生接口
url = f"{self.BASE_URL}/RuYuanZaiYuan/school/chart?area_name={area}"
response = requests.get(url)
self.assertEqual(response.status_code, 200)
data = response.json()
# 如果区域不存在,会返回空字典
if data: # 只在数据存在时进行验证
self.assertIn("xAxis_data", data)
self.assertIn("series_data_3", data) # 总人数数据
# 测试在园/在校接口
url = f"{self.BASE_URL}/RuYuanZaiYuan/school/inschool/chart?area_name={area}"
response = requests.get(url)
self.assertEqual(response.status_code, 200)
data = response.json()
# 如果区域不存在,会返回空字典
if data: # 只在数据存在时进行验证
self.assertIn("xAxis_data", data)
self.assertIn("series_data_3", data) # 总人数数据
def test_with_invalid_parameters(self):
"""测试无效参数"""
# 测试无效的教育阶段
url = f"{self.BASE_URL}/RuYuanZaiYuan/school/chart?education_stage=invalid_stage"
response = requests.get(url)
# FastAPI会自动验证参数格式不符合pattern的参数会返回422
self.assertEqual(response.status_code, 422)
url = f"{self.BASE_URL}/RuYuanZaiYuan/school/inschool/chart?education_stage=invalid_stage"
response = requests.get(url)
self.assertEqual(response.status_code, 422)
# 测试不存在的区域名称
# 注意不存在的区域名称不会返回422而是返回空数据
url = f"{self.BASE_URL}/RuYuanZaiYuan/school/chart?area_name=不存在的区域"
response = requests.get(url)
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertEqual(data, {})
url = f"{self.BASE_URL}/RuYuanZaiYuan/school/inschool/chart?area_name=不存在的区域"
response = requests.get(url)
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertEqual(data, {})
def test_data_consistency(self):
"""测试数据一致性"""
# 测试相同参数下两次请求返回相同数据
url = f"{self.BASE_URL}/RuYuanZaiYuan/school/chart"
response1 = requests.get(url)
response2 = requests.get(url)
self.assertEqual(response1.json(), response2.json())
url = f"{self.BASE_URL}/RuYuanZaiYuan/school/inschool/chart"
response1 = requests.get(url)
response2 = requests.get(url)
self.assertEqual(response1.json(), response2.json())
def test_with_combined_parameters(self):
"""测试组合参数"""
# 同时指定教育阶段和区域名称
url = f"{self.BASE_URL}/RuYuanZaiYuan/school/chart?education_stage=primary&area_name=云南省"
response = requests.get(url)
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertEqual(data["education_stage"], "小学")
url = f"{self.BASE_URL}/RuYuanZaiYuan/school/inschool/chart?education_stage=junior&area_name=云南省"
response = requests.get(url)
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertEqual(data["education_stage"], "初中")
if __name__ == "__main__":
unittest.main()