gpt4 book ai didi

python - django 测试 url 状态码

转载 作者:太空宇宙 更新时间:2023-11-03 11:18:28 24 4
gpt4 key购买 nike

你好,我为我的项目创建了一些测试,主要是为了丰富我的知识。

我有一些问题。

简单的测试代码:

测试.py

from django.test import Client, TestCase
class User_Form_Test(TestCase):
def test_logged_user_get_details(self):
response = self.client.get('/details/', follow=True)
self.assertEqual(response.status_code, 200)

def test_logged_user_get_details_images(self):
response = self.client.get('/details-images/', follow=True)
self.assertEqual(response.status_code, 200)

网址.py

url(r'^details/(?P<id>\d+)/$', views.details, name='details'),
url(r'^details-images/(?P<slug>[^\.]+)/$', views.details_images, name='details_images')

所有这些代码都工作正常我在这两个测试中接受了传递的消息。

我的问题是如何像这个例子一样测试第一种情况下 id 和第二种情况下的第二个 slug 的所有可能的正则表达式?

最佳答案

首先使用 path() 和 re_path(),我认为 url() 被贬低甚至被删除。
查看您的正则表达式模式,您似乎已将 idslug 设为可选,这没有多大意义,但没关系。
现在您想检查 idslug 的所有可能的正则表达式,但可能的匹配总数是无限的,因为任何数字都会匹配 id 并且任何东西都会匹配 slug,所以它不可能。
我认为对于您 View 中的第一个案例,您将在数据库中查找具有该 id 的对象,然后在您呈现的页面上显示有关它的详细信息。因此,在您的 setUp() 方法中,您应该创建一些模型对象,例如:

def setUp(self):
MyModel.objects.create(id=1)
MyModel.objects.create(id=5)
...

现在在您的测试中检查这些 id:

def test_logged_user_get_details(self):
response = self.client.get(reverse('details', args=(1,)), follow=True) # for first object
self.assertEqual(response.status_code, 200)
response = self.client.get(reverse('details', args=(5,)), follow=True) # for second object
self.assertEqual(response.status_code, 200)

同时检查不存在的 ID:

response = self.client.get(reverse('details', args=(2,)), follow=True)    # for object that doesn't exists
self.assertEqual(response.status_code, 404)

由于测试名称表明只有登录用户才能访问给定网页,因此您的设置应包含此内容(假设您使用的是 django 的身份验证):

self.user = User.objects.create_user('test', 'test@email.com', 'testtest')

然后在每个需要登录的测试中,首先这样做:

self.client.force_login(self.user)

正如你在问题中所说,你想检查所有可能的正则表达式匹配,这是不可能的,但出于某种原因,如果你想检查许多 idslug 你可以使用一个循环:

for i in range(1,n):    # define n
response = self.client.get(reverse('details', args=(i,)), follow=True)
self.assertEqual(response.status_code, 200)

对我来说,做这样的事情毫无意义,但因为我不完全了解您的应用程序是如何工作的,所以它可能对您有些用处。

关于python - django 测试 url 状态码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48069866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com