From b584eb99686aebe6daeb7f4231ea679508993c93 Mon Sep 17 00:00:00 2001 From: ptgkifnrw <2043424546@qq.com> Date: Sun, 9 Nov 2025 22:11:35 +0800 Subject: [PATCH] ADD file via upload --- tests.py | 406 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 406 insertions(+) create mode 100644 tests.py diff --git a/tests.py b/tests.py new file mode 100644 index 0000000..9e2e6c8 --- /dev/null +++ b/tests.py @@ -0,0 +1,406 @@ +#zf:导入操作系统相关模块 +import os + +#zf:从django.conf导入settings配置 +from django.conf import settings +#zf:从django.core.files.uploadedfile导入SimpleUploadedFile用于文件上传测试 +from django.core.files.uploadedfile import SimpleUploadedFile +#zf:从django.core.management导入call_command用于调用管理命令 +from django.core.management import call_command +#zf:从django.core.paginator导入Paginator用于分页测试 +from django.core.paginator import Paginator +#zf:从django.templatetags.static导入static用于静态文件处理 +from django.templatetags.static import static +#zf:从django.test导入Client, RequestFactory, TestCase用于测试 +from django.test import Client, RequestFactory, TestCase +#zf:从django.urls导入reverse用于URL反向解析 +from django.urls import reverse +#zf:从django.utils导入timezone用于时间处理 +from django.utils import timezone + +#zf:从accounts.models导入BlogUser用户模型 +from accounts.models import BlogUser +#zf:从blog.forms导入BlogSearchForm搜索表单 +from blog.forms import BlogSearchForm +#zf:从blog.models导入Article, Category, Tag, SideBar, Links模型 +from blog.models import Article, Category, Tag, SideBar, Links +#zf:从blog.templatetags.blog_tags导入load_pagination_info, load_articletags模板标签 +from blog.templatetags.blog_tags import load_pagination_info, load_articletags +#zf:从djangoblog.utils导入get_current_site, get_sha256工具函数 +from djangoblog.utils import get_current_site, get_sha256 +#zf:从oauth.models导入OAuthUser, OAuthConfig OAuth相关模型 +from oauth.models import OAuthUser, OAuthConfig + + +#zf:创建你的测试用例 + +#zf:定义文章测试类,继承自TestCase +class ArticleTest(TestCase): + #zf:测试初始化方法 + def setUp(self): + #zf:创建测试客户端 + self.client = Client() + #zf:创建请求工厂 + self.factory = RequestFactory() + + #zf:测试验证文章功能 + def test_validate_article(self): + #zf:获取当前站点域名 + site = get_current_site().domain + #zf:创建或获取测试用户 + user = BlogUser.objects.get_or_create( + email="liangliangyy@gmail.com", + username="liangliangyy")[0] + #zf:设置用户密码 + user.set_password("liangliangyy") + #zf:设置用户为职员 + user.is_staff = True + #zf:设置用户为超级用户 + user.is_superuser = True + #zf:保存用户 + user.save() + #zf:测试获取用户绝对URL + response = self.client.get(user.get_absolute_url()) + #zf:断言响应状态码为200 + self.assertEqual(response.status_code, 200) + #zf:测试访问管理后台日志页面 + response = self.client.get('/admin/servermanager/emailsendlog/') + #zf:测试访问管理后台日志条目页面 + response = self.client.get('admin/admin/logentry/') + #zf:创建侧边栏对象 + s = SideBar() + #zf:设置侧边栏排序 + s.sequence = 1 + #zf:设置侧边栏名称 + s.name = 'test' + #zf:设置侧边栏内容 + s.content = 'test content' + #zf:设置侧边栏启用状态 + s.is_enable = True + #zf:保存侧边栏 + s.save() + + #zf:创建分类对象 + category = Category() + #zf:设置分类名称 + category.name = "category" + #zf:设置分类创建时间 + category.creation_time = timezone.now() + #zf:设置分类最后修改时间 + category.last_mod_time = timezone.now() + #zf:保存分类 + category.save() + + #zf:创建标签对象 + tag = Tag() + #zf:设置标签名称 + tag.name = "nicetag" + #zf:保存标签 + tag.save() + + #zf:创建文章对象 + article = Article() + #zf:设置文章标题 + article.title = "nicetitle" + #zf:设置文章正文 + article.body = "nicecontent" + #zf:设置文章作者 + article.author = user + #zf:设置文章分类 + article.category = category + #zf:设置文章类型 + article.type = 'a' + #zf:设置文章状态 + article.status = 'p' + + #zf:保存文章 + article.save() + #zf:断言文章标签数量为0 + self.assertEqual(0, article.tags.count()) + #zf:给文章添加标签 + article.tags.add(tag) + #zf:保存文章 + article.save() + #zf:断言文章标签数量为1 + self.assertEqual(1, article.tags.count()) + + #zf:循环创建20篇文章用于测试 + for i in range(20): + article = Article() + #zf:设置文章标题 + article.title = "nicetitle" + str(i) + #zf:设置文章正文 + article.body = "nicetitle" + str(i) + #zf:设置文章作者 + article.author = user + #zf:设置文章分类 + article.category = category + #zf:设置文章类型 + article.type = 'a' + #zf:设置文章状态 + article.status = 'p' + #zf:保存文章 + article.save() + #zf:给文章添加标签 + article.tags.add(tag) + #zf:保存文章 + article.save() + #zf:从blog.documents导入ELASTICSEARCH_ENABLED常量 + from blog.documents import ELASTICSEARCH_ENABLED + #zf:如果启用了Elasticsearch + if ELASTICSEARCH_ENABLED: + #zf:调用构建索引命令 + call_command("build_index") + #zf:测试搜索功能 + response = self.client.get('/search', {'q': 'nicetitle'}) + #zf:断言响应状态码为200 + self.assertEqual(response.status_code, 200) + + #zf:测试获取文章绝对URL + response = self.client.get(article.get_absolute_url()) + #zf:断言响应状态码为200 + self.assertEqual(response.status_code, 200) + #zf:从djangoblog.spider_notify导入SpiderNotify + from djangoblog.spider_notify import SpiderNotify + #zf:通知搜索引擎爬虫 + SpiderNotify.notify(article.get_absolute_url()) + #zf:测试获取标签绝对URL + response = self.client.get(tag.get_absolute_url()) + #zf:断言响应状态码为200 + self.assertEqual(response.status_code, 200) + + #zf:测试获取分类绝对URL + response = self.client.get(category.get_absolute_url()) + #zf:断言响应状态码为200 + self.assertEqual(response.status_code, 200) + + #zf:测试搜索功能 + response = self.client.get('/search', {'q': 'django'}) + #zf:断言响应状态码为200 + self.assertEqual(response.status_code, 200) + #zf:加载文章标签 + s = load_articletags(article) + #zf:断言结果不为None + self.assertIsNotNone(s) + + #zf:用户登录 + self.client.login(username='liangliangyy', password='liangliangyy') + + #zf:测试获取归档页面 + response = self.client.get(reverse('blog:archives')) + #zf:断言响应状态码为200 + self.assertEqual(response.status_code, 200) + + #zf:创建所有文章的分页器 + p = Paginator(Article.objects.all(), settings.PAGINATE_BY) + #zf:检查分页功能 + self.check_pagination(p, '', '') + + #zf:创建按标签筛选文章的分页器 + p = Paginator(Article.objects.filter(tags=tag), settings.PAGINATE_BY) + #zf:检查分页功能,类型为分类标签归档 + self.check_pagination(p, '分类标签归档', tag.slug) + + #zf:创建按作者筛选文章的分页器 + p = Paginator( + Article.objects.filter( + author__username='liangliangyy'), settings.PAGINATE_BY) + #zf:检查分页功能,类型为作者文章归档 + self.check_pagination(p, '作者文章归档', 'liangliangyy') + + #zf:创建按分类筛选文章的分页器 + p = Paginator(Article.objects.filter(category=category), settings.PAGINATE_BY) + #zf:检查分页功能,类型为分类目录归档 + self.check_pagination(p, '分类目录归档', category.slug) + + #zf:创建博客搜索表单实例 + f = BlogSearchForm() + #zf:执行搜索 + f.search() + #zf:从djangoblog.spider_notify导入SpiderNotify + from djangoblog.spider_notify import SpiderNotify + #zf:通知百度搜索引擎 + SpiderNotify.baidu_notify([article.get_full_url()]) + + #zf:从blog.templatetags.blog_tags导入gravatar_url, gravatar + from blog.templatetags.blog_tags import gravatar_url, gravatar + #zf:获取gravatar头像URL + u = gravatar_url('liangliangyy@gmail.com') + #zf:获取gravatar头像 + u = gravatar('liangliangyy@gmail.com') + + #zf:创建链接对象 + link = Links( + sequence=1, + name="lylinux", + link='https://wwww.lylinux.net') + #zf:保存链接 + link.save() + #zf:测试获取链接页面 + response = self.client.get('/links.html') + #zf:断言响应状态码为200 + self.assertEqual(response.status_code, 200) + + #zf:测试获取RSS订阅页面 + response = self.client.get('/feed/') + #zf:断言响应状态码为200 + self.assertEqual(response.status_code, 200) + + #zf:测试获取站点地图 + response = self.client.get('/sitemap.xml') + #zf:断言响应状态码为200 + self.assertEqual(response.status_code, 200) + + #zf:测试删除文章 + self.client.get("/admin/blog/article/1/delete/") + #zf:测试访问管理后台日志页面 + self.client.get('/admin/servermanager/emailsendlog/') + #zf:测试访问管理后台日志条目页面 + self.client.get('/admin/admin/logentry/') + #zf:测试访问管理后台日志条目修改页面 + self.client.get('/admin/admin/logentry/1/change/') + + #zf:检查分页功能的方法 + def check_pagination(self, p, type, value): + #zf:遍历所有页面 + for page in range(1, p.num_pages + 1): + #zf:加载分页信息 + s = load_pagination_info(p.page(page), type, value) + #zf:断言结果不为None + self.assertIsNotNone(s) + #zf:如果有上一页URL + if s['previous_url']: + #zf:测试访问上一页 + response = self.client.get(s['previous_url']) + #zf:断言响应状态码为200 + self.assertEqual(response.status_code, 200) + #zf:如果有下一页URL + if s['next_url']: + #zf:测试访问下一页 + response = self.client.get(s['next_url']) + #zf:断言响应状态码为200 + self.assertEqual(response.status_code, 200) + + #zf:测试图片上传功能 + def test_image(self): + #zf:导入requests模块 + import requests + #zf:获取Python官网Logo图片 + rsp = requests.get( + 'https://www.python.org/static/img/python-logo.png') + #zf:设置图片保存路径 + imagepath = os.path.join(settings.BASE_DIR, 'python.png') + #zf:将图片保存到本地 + with open(imagepath, 'wb') as file: + file.write(rsp.content) + #zf:测试未登录上传图片 + rsp = self.client.post('/upload') + #zf:断言响应状态码为403(禁止访问) + self.assertEqual(rsp.status_code, 403) + #zf:生成上传签名 + sign = get_sha256(get_sha256(settings.SECRET_KEY)) + #zf:打开图片文件 + with open(imagepath, 'rb') as file: + #zf:创建上传文件对象 + imgfile = SimpleUploadedFile( + 'python.png', file.read(), content_type='image/jpg') + #zf:构造表单数据 + form_data = {'python.png': imgfile} + #zf:测试带签名上传图片 + rsp = self.client.post( + '/upload?sign=' + sign, form_data, follow=True) + #zf:断言响应状态码为200 + self.assertEqual(rsp.status_code, 200) + #zf:删除临时图片文件 + os.remove(imagepath) + #zf:从djangoblog.utils导入save_user_avatar, send_email工具函数 + from djangoblog.utils import save_user_avatar, send_email + #zf:测试发送邮件 + send_email(['qq@qq.com'], 'testTitle', 'testContent') + #zf:测试保存用户头像 + save_user_avatar( + 'https://www.python.org/static/img/python-logo.png') + + #zf:测试错误页面 + def test_errorpage(self): + #zf:测试访问不存在的页面 + rsp = self.client.get('/eee') + #zf:断言响应状态码为404 + self.assertEqual(rsp.status_code, 404) + + #zf:测试管理命令 + def test_commands(self): + #zf:创建或获取测试用户 + user = BlogUser.objects.get_or_create( + email="liangliangyy@gmail.com", + username="liangliangyy")[0] + #zf:设置用户密码 + user.set_password("liangliangyy") + #zf:设置用户为职员 + user.is_staff = True + #zf:设置用户为超级用户 + user.is_superuser = True + #zf:保存用户 + user.save() + + #zf:创建OAuth配置对象 + c = OAuthConfig() + #zf:设置OAuth类型 + c.type = 'qq' + #zf:设置应用密钥 + c.appkey = 'appkey' + #zf:设置应用密钥 + c.appsecret = 'appsecret' + #zf:保存配置 + c.save() + + #zf:创建OAuth用户对象 + u = OAuthUser() + #zf:设置OAuth类型 + u.type = 'qq' + #zf:设置openid + u.openid = 'openid' + #zf:关联用户 + u.user = user + #zf:设置头像 + u.picture = static("/blog/img/avatar.png") + #zf:设置元数据 + u.metadata = ''' +{ +"figureurl": "https://qzapp.qlogo.cn/qzapp/101513904/C740E30B4113EAA80E0D9918ABC78E82/30" +}''' + #zf:保存OAuth用户 + u.save() + + #zf:创建另一个OAuth用户对象 + u = OAuthUser() + #zf:设置OAuth类型 + u.type = 'qq' + #zf:设置openid + u.openid = 'openid1' + #zf:设置头像URL + u.picture = 'https://qzapp.qlogo.cn/qzapp/101513904/C740E30B4113EAA80E0D9918ABC78E82/30' + #zf:设置元数据 + u.metadata = ''' + { + "figureurl": "https://qzapp.qlogo.cn/qzapp/101513904/C740E30B4113EAA80E0D9918ABC78E82/30" + }''' + #zf:保存OAuth用户 + u.save() + + #zf:从blog.documents导入ELASTICSEARCH_ENABLED常量 + from blog.documents import ELASTICSEARCH_ENABLED + #zf:如果启用了Elasticsearch + if ELASTICSEARCH_ENABLED: + #zf:调用构建索引命令 + call_command("build_index") + #zf:调用通知百度搜索引擎命令 + call_command("ping_baidu", "all") + #zf:调用创建测试数据命令 + call_command("create_testdata") + #zf:调用清除缓存命令 + call_command("clear_cache") + #zf:调用同步用户头像命令 + call_command("sync_user_avatar") + #zf:调用构建搜索词命令 + call_command("build_search_words") \ No newline at end of file