From ef51e9cc822f0505d49546bc0c1360a54a9833ec Mon Sep 17 00:00:00 2001 From: pmluby46i <2768183283@qq.com> Date: Sun, 9 Nov 2025 21:44:06 +0800 Subject: [PATCH] ADD file via upload --- tests.py | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 tests.py diff --git a/tests.py b/tests.py new file mode 100644 index 0000000..051aff2 --- /dev/null +++ b/tests.py @@ -0,0 +1,83 @@ +# 导入json模块用于处理JSON数据 #zqx: 引入json模块,用于处理JSON格式数据的编码和解码 +import json + +# 从Django测试模块导入测试客户端、请求工厂和测试用例基类 #zqx: 从django.test导入Client(测试客户端)、RequestFactory(请求工厂)和TestCase(测试用例基类) +from django.test import Client, RequestFactory, TestCase + +# 从accounts应用导入BlogUser模型 #zqx: 从accounts应用的models模块导入BlogUser用户模型 +from accounts.models import BlogUser +# 从当前应用导入OwnTrackLog模型 #zqx: 从当前应用(.)的models模块导入OwnTrackLog模型 +from .models import OwnTrackLog + +# Create your tests here. #zqx: Django测试文件的标准注释,标记测试代码区域开始 + +# 定义OwnTrackLogTest测试类,继承自Django的TestCase #zqx: 定义OwnTrackLogTest测试类,继承Django的TestCase类,用于测试OwnTrackLog相关功能 +class OwnTrackLogTest(TestCase): + # 测试初始化方法,在每个测试方法执行前运行 #zqx: setUp方法,在每个测试方法执行前自动调用,用于初始化测试环境 + def setUp(self): + # 创建测试客户端实例 #zqx: 创建Client实例,用于模拟HTTP请求 + self.client = Client() + # 创建请求工厂实例 #zqx: 创建RequestFactory实例,用于创建测试请求对象 + self.factory = RequestFactory() + + # 测试owntracks功能的主要测试方法 #zqx: 定义test_own_track_log测试方法,用于测试owntracks功能 + def test_own_track_log(self): + # 创建包含完整位置信息的测试数据 #zqx: 创建包含tid、lat、lon字段的字典对象,作为完整位置信息测试数据 + o = { + 'tid': 12, #zqx: 用户ID字段,值为12 + 'lat': 123.123, #zqx: 纬度字段,值为123.123 + 'lon': 134.341 #zqx: 经度字段,值为134.341 + } + + # 使用客户端发送POST请求,将位置数据以JSON格式发送到/logtracks端点 #zqx: 使用client.post方法向/owntracks/logtracks路径发送POST请求,数据为JSON格式 + self.client.post( + '/owntracks/logtracks', #zqx: 请求的目标URL路径 + json.dumps(o), #zqx: 将字典o转换为JSON字符串 + content_type='application/json') #zqx: 设置请求的内容类型为application/json + # 检查数据库中OwnTrackLog记录数量是否为1 #zqx: 查询OwnTrackLog模型的所有记录,检查记录数量是否为1 + length = len(OwnTrackLog.objects.all()) #zqx: 获取OwnTrackLog所有对象的数量 + self.assertEqual(length, 1) #zqx: 断言记录数量等于1 + + # 创建不完整的位置数据(缺少经度) #zqx: 创建缺少lon字段的字典对象,作为不完整位置信息测试数据 + o = { + 'tid': 12, #zqx: 用户ID字段,值为12 + 'lat': 123.123 #zqx: 纬度字段,值为123.123 + } + + # 再次发送POST请求 #zqx: 使用client.post方法再次发送POST请求,数据为不完整的JSON格式 + self.client.post( + '/owntracks/logtracks', #zqx: 请求的目标URL路径 + json.dumps(o), #zqx: 将不完整的字典o转换为JSON字符串 + content_type='application/json') #zqx: 设置请求的内容类型为application/json + # 检查数据库记录数量是否仍为1(不完整数据应该不被保存) #zqx: 查询OwnTrackLog模型的所有记录,检查记录数量是否仍为1 + length = len(OwnTrackLog.objects.all()) #zqx: 获取OwnTrackLog所有对象的数量 + self.assertEqual(length, 1) #zqx: 断言记录数量仍等于1,验证不完整数据未被保存 + + # 测试未登录用户访问/show_maps端点,应该返回302重定向 #zqx: 测试未登录用户访问/show_maps端点的行为 + rsp = self.client.get('/owntracks/show_maps') #zqx: 使用client.get方法向/owntracks/show_maps路径发送GET请求 + self.assertEqual(rsp.status_code, 302) #zqx: 断言响应状态码为302,表示重定向 + + # 创建超级用户用于测试 #zqx: 使用create_superuser方法创建超级用户用于后续测试 + user = BlogUser.objects.create_superuser( #zqx: 调用BlogUser模型的create_superuser方法 + email="liangliangyy1@gmail.com", #zqx: 设置用户邮箱 + username="liangliangyy1", #zqx: 设置用户名 + password="liangliangyy1") #zqx: 设置用户密码 + + # 使用创建的用户登录 #zqx: 使用client.login方法以创建的用户身份登录 + self.client.login(username='liangliangyy1', password='liangliangyy1') #zqx: 使用用户名和密码登录 + # 手动创建并保存一个OwnTrackLog实例 #zqx: 手动创建OwnTrackLog对象并保存到数据库 + s = OwnTrackLog() #zqx: 创建OwnTrackLog实例 + s.tid = 12 #zqx: 设置tid属性为12 + s.lon = 123.234 #zqx: 设置lon属性为123.234 + s.lat = 34.234 #zqx: 设置lat属性为34.234 + s.save() #zqx: 保存对象到数据库 + + # 测试已登录用户访问各个端点,都应该返回200成功状态码 #zqx: 测试已登录用户访问不同端点的响应状态 + rsp = self.client.get('/owntracks/show_dates') #zqx: 向/owntracks/show_dates路径发送GET请求 + self.assertEqual(rsp.status_code, 200) #zqx: 断言响应状态码为200,表示请求成功 + rsp = self.client.get('/owntracks/show_maps') #zqx: 向/owntracks/show_maps路径发送GET请求 + self.assertEqual(rsp.status_code, 200) #zqx: 断言响应状态码为200,表示请求成功 + rsp = self.client.get('/owntracks/get_datas') #zqx: 向/owntracks/get_datas路径发送GET请求 + self.assertEqual(rsp.status_code, 200) #zqx: 断言响应状态码为200,表示请求成功 + rsp = self.client.get('/owntracks/get_datas?date=2018-02-26') #zqx: 向带日期参数的/owntracks/get_datas路径发送GET请求 + self.assertEqual(rsp.status_code, 200) #zqx: 断言响应状态码为200,表示请求成功