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.
djangoBlogStudy/src/owntracks/tests.py

116 lines
5.2 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.

#gjl
import json
# 导入 Django 测试框架所需的核心类和模块
from django.test import Client, RequestFactory, TestCase
# 导入项目中使用的自定义用户模型和位置日志模型,用于在测试中创建用户和验证数据
from accounts.models import BlogUser
from .models import OwnTrackLog
# Create your tests here.
# 定义一个测试类,用于测试 OwnTrackLog 相关的功能,如数据接收、地图展示、数据查询等
# 继承自 Django 的 TestCase提供数据库隔离、断言方法和测试工具
class OwnTrackLogTest(TestCase):
# gjl setUp 方法在每个测试方法执行前自动运行,用于准备测试所需的环境和对象
# gjl 本方法中初始化了测试客户端和请求工厂,便于模拟 HTTP 请求
def setUp(self):
# 创建一个 Django 测试客户端实例,用于模拟浏览器发送 GET、POST 等请求
self.client = Client()
# gjl 创建一个请求工厂实例,用于创建伪造的 HTTP 请求对象(如 HttpRequest
# gjl 适用于需要直接调用视图函数的测试场景(本测试中未直接使用,但已准备)
self.factory = RequestFactory()
# gjl test_own_track_log 是一个具体的测试用例,用于验证 OwnTrackLog 功能的正确性
# gjl 测试内容包括:接收位置数据、数据完整性、权限控制、页面响应等
def test_own_track_log(self):
# gjl 构造一个模拟的位置数据字典,包含 tid用户标识、lat纬度、lon经度
o = {
'tid': 12,
'lat': 123.123,
'lon': 134.341
}
# gjl 使用测试客户端发送一个 POST 请求到 '/owntracks/logtracks' 接口
# gjl 将位置数据 o 序列化为 JSON 字符串,并设置内容类型为 application/json
# gjl 模拟 OwnTracks 客户端上传位置信息
self.client.post(
'/owntracks/logtracks',
json.dumps(o),
content_type='application/json')
# 查询数据库中 OwnTrackLog 模型的所有记录数量
length = len(OwnTrackLog.objects.all())
# 断言:验证数据库中记录数为 1确保第一次 POST 请求成功写入一条数据
self.assertEqual(length, 1)
# 构造第二条位置数据,缺少 'lon' 字段(经度)
o = {
'tid': 12,
'lat': 123.123
}
# 再次发送 POST 请求上传不完整的位置数据
self.client.post(
'/owntracks/logtracks',
json.dumps(o),
content_type='application/json')
# 再次查询数据库中的总记录数
length = len(OwnTrackLog.objects.all())
# 断言:验证记录数仍为 1确保系统能正确处理不完整数据如忽略或拒绝未新增无效记录
self.assertEqual(length, 1)
# 发送 GET 请求访问 '/owntracks/show_maps' 页面(查看地图)
rsp = self.client.get('/owntracks/show_maps')
# 断言:检查响应状态码为 302重定向说明未登录用户访问地图页时被重定向如跳转到登录页
self.assertEqual(rsp.status_code, 302)
# gjl 创建一个超级用户,用于测试需要登录权限的功能
# gjl 使用 BlogUser 模型的 create_superuser 方法创建具有管理员权限的测试用户
user = BlogUser.objects.create_superuser(
email="liangliangyy1@gmail.com",
username="liangliangyy1",
password="liangliangyy1")
# gjl 使用测试客户端以刚创建的超级用户身份登录
# gjl 模拟用户登录过程,使后续请求具有认证状态
self.client.login(username='liangliangyy1', password='liangliangyy1')
# 手动创建一条 OwnTrackLog 记录并保存到数据库
# 直接操作模型,用于准备测试数据
s = OwnTrackLog()
s.tid = 12
s.lon = 123.234
s.lat = 34.234
s.save()
# 发送 GET 请求访问 '/owntracks/show_dates' 页面(查看日期列表)
rsp = self.client.get('/owntracks/show_dates')
# 断言:检查响应状态码为 200成功说明登录后可以正常访问该页面
self.assertEqual(rsp.status_code, 200)
# 发送 GET 请求访问 '/owntracks/show_maps' 页面(查看地图)
rsp = self.client.get('/owntracks/show_maps')
# 断言:检查响应状态码为 200成功说明登录后可以正常访问地图页面
self.assertEqual(rsp.status_code, 200)
# 发送 GET 请求访问 '/owntracks/get_datas' 接口(获取位置数据)
rsp = self.client.get('/owntracks/get_datas')
# 断言:检查响应状态码为 200成功说明数据接口正常返回
self.assertEqual(rsp.status_code, 200)
# 发送 GET 请求访问 '/owntracks/get_datas' 接口,并携带日期查询参数 date=2018-02-26
rsp = self.client.get('/owntracks/get_datas?date=2018-02-26')
# 断言:检查响应状态码为 200成功说明带参数的数据查询功能正常
self.assertEqual(rsp.status_code, 200)