Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django测试URL状态代码_Python_Django_Testing - Fatal编程技术网

Python django测试URL状态代码

Python 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

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

我有一些问题

简单测试代码:

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.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)