You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DjangoBlog/tests.py

84 lines
6.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 导入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表示请求成功