Files
YunNanProject/Test/test_ruyuan_zaiyuan_interfaces.py

162 lines
7.2 KiB
Python
Raw Normal View History

2025-09-12 21:31:45 +08:00
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()