我正在为我的Django应用程序编写测试用例,但我使用Python中的请求包来访问状态代码,然后使用assert语句。此测试用例仅适用于员工用户:
class StaffClientServerTestCase(TestCase):
def test_login_staff(self):
User.objects.create_superuser('abc', 'abc@gmail.com', '1234')
self.client.login(username='abc', password='1234')
self.client.get('/dashboard/')
s = requests.get('http://localhost:8000/dashboard/')
print s.status_code
self.assertEqual(200, s.status_code)
只有员工用户才能访问仪表板,因此我创建了一个员工用户对象。以下一行
self.client.login(username='abc', password='1234')
将成为现实。
self.client.get('/dashboard/')
如果我打印出这一行,它会显示页面的html内容,这意味着我的员工用户可以访问dashboard
。
但是,当我使用请求模块查看dashboard
网址的状态代码时,它会显示status code = 500
,而我的测试失败。
s = requests.get('http://localhost:8000/dashboard/')
print s.status_code
谁能告诉我这里哪里出错了?即使员工用户可以访问仪表板并使用print self.client.get('/dashboard/')
打印出其内容,我的状态代码为何会显示为500。救命啊!
答案 0 :(得分:1)
你可以用其他方式测试案例:
使用装饰器保护您的观点:
@user_passes_test(lambda u: u.is_staff)
def dashboard(request, ...):
# ...
然后请求requests
查看您是否被禁止查看该页面。如果你被禁止(403禁止),那么你的观点是正常的。要验证您的视图是否适用于员工用户,请删除装饰器并再次请求,如果您通过这段时间,那么一切都很好,唯一要测试的是视图中的逻辑。
但是现在,你得到500而不是403,这意味着你有后端错误。先解决它们