Python django测试URL状态代码
你好,我为我的项目创建了一些测试,主要是为了丰富我的知识 我有一些问题 简单测试代码: test.pyPython django测试URL状态代码,python,django,testing,Python,Django,Testing,你好,我为我的项目创建了一些测试,主要是为了丰富我的知识 我有一些问题 简单测试代码: test.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.assertE
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)
url.py
url(r'^details/(?P<id>\d+)/$', views.details, name='details'),
url(r'^details-images/(?P<slug>[^\.]+)/$', views.details_images, name='details_images')
url(r'^details/(?P\d+/$),views.details,name='details'),
url(r'^details images/(?P[^\.]+)/$”,views.details\u images,name='details\u images')
所有这些代码都很好,我在这两个测试中接收通过的消息
我的问题是如何像这个例子一样测试第一种情况下id
中所有可能的正则表达式,第二种情况下slug
自动执行?首先使用path()和re_path(),我认为url()被贬低甚至删除了。查看您的正则表达式模式,看起来您已经将
id
和slug
设置为可选,这没有多大意义,但还可以。现在,您想检查
id
和slug
的所有可能的正则表达式,但可能的匹配总数是无限的,因为任何数字都将匹配id
,任何东西都将匹配slug
,因此这是不可能的。我认为对于视图中的第一种情况,您将在数据库中查找id为
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的auth):
然后在每个需要登录的测试中,首先执行以下操作:
self.client.force_login(self.user)
正如您在问题中所说,您希望检查所有可能的正则表达式匹配,但由于某些原因,如果您希望检查许多id
或slug
,您可以使用循环:
for i in range(1,n): # define n
response = self.client.get(reverse('details', args=(i,)), follow=True)
self.assertEqual(response.status_code, 200)
对我来说,这样做毫无意义,但因为我不完全了解你的应用程序是如何工作的,所以它可能会对你有所帮助
for i in range(1,n): # define n
response = self.client.get(reverse('details', args=(i,)), follow=True)
self.assertEqual(response.status_code, 200)