162 lines
7.2 KiB
Python
162 lines
7.2 KiB
Python
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() |