Mar*_*Mar 5 python testing django
你好,我为我的项目创建了一些测试,主要是为了丰富我的知识。
我有一些问题。
简单的测试代码:
测试文件
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)
Run Code Online (Sandbox Code Playgroud)
网址.py
url(r'^details/(?P<id>\d+)/$', views.details, name='details'),
url(r'^details-images/(?P<slug>[^\.]+)/$', views.details_images, name='details_images')
Run Code Online (Sandbox Code Playgroud)
所有这些代码工作正常我在这两个测试中传递了消息。
我的问题是如何像这个例子一样测试id第一种情况下所有可能的正则表达式slug,第二种情况下的第二个自动化?
首先使用path()和re_path(),我认为url()已经贬值甚至被删除了。
查看您的正则表达式模式看起来像是您已制作id且slug可选的,这没有多大意义,但没关系。
现在您想要检查idand的所有可能的正则表达式slug,但可能的匹配总数是无限的,因为任何数字都会匹配id,任何内容都会匹配slug,所以这是不可能的。
我认为对于您视图中的第一个案例,您将在数据库中查找一个对象id,然后在您呈现的页面上显示有关它的详细信息。因此,在 setUp() 方法中,您应该创建模型的一些对象,例如:
def setUp(self):
MyModel.objects.create(id=1)
MyModel.objects.create(id=5)
...
Run Code Online (Sandbox Code Playgroud)
现在在您的测试中检查这些 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)
Run Code Online (Sandbox Code Playgroud)
还要检查是否存在不存在的 id:
response = self.client.get(reverse('details', args=(2,)), follow=True) # for object that doesn't exists
self.assertEqual(response.status_code, 404)
Run Code Online (Sandbox Code Playgroud)
由于测试名称表明只有登录的用户才能访问给定的网页,因此您的设置应该包含此内容(假设您正在使用 django 的身份验证):
self.user = User.objects.create_user('test', 'test@email.com', 'testtest')
Run Code Online (Sandbox Code Playgroud)
然后在每个需要登录的测试中,首先执行以下操作:
self.client.force_login(self.user)
Run Code Online (Sandbox Code Playgroud)
正如您在问题中所说,您想要检查所有可能的正则表达式匹配,这是不可能的,但出于某种原因,如果您想检查很多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)
Run Code Online (Sandbox Code Playgroud)
对我来说,做这样的事情没有任何意义,但由于我不完全了解你的应用程序是如何工作的,它可能对你有一些用处。
| 归档时间: |
|
| 查看次数: |
3374 次 |
| 最近记录: |