首页 > 解决方案 > 在 Django 中测试 Url 是否给出 500 错误

问题描述

我想测试 Urls 是否收到 500 错误。在不需要登录的正常情况下,我得到 status_code 200,但在需要登录的情况下,它给了我 302 错误。那么,如何以最佳方式测试 loginrequired 和参数化的 url。

谢谢你

所以我添加这个是因为有人将该问题链接到重复项,但这不是我的答案,为什么它不是我的答案,因为我可以使用此方法登录,但我想测试其视图已登录的 url 我可以登录但不能登录那个观点

c.post('login/', {
'username': 'nitin',
'password': 'qwerty123321'})

如果您不知道 url 的答案,那么在“views”上结帐问题如何使用 pytest 测试视图,其视图具有 LoginRequired 以及 该问题中的一些特定用户依赖项我让用户使用 Mixer.blend() 登录,这很好但在“视图”中,用户有更多与此相关的功能,只需检查一次。请帮助我谢谢。

至少告诉我该怎么做,我对此感到非常困惑。再次感谢你

网址.py

path('', event_views.dashboard_view, name='event-dashboard'),

视图.py

@login_required
def dashboard_view(request):
    # ccd = Org.objects.first()
    # print(ccd.__dict__)
    # print(request.user.)
    org = request.user.profile.org
    week_responses = day_wise_responses(7, org)
    user_org = request.user.profile.org.name
    sms_sent = org.sms_counter
    email_sent = org.email_counter
    today = datetime.today().date()
    responses_one_week = number_of_responses(7, org)
    responses_two_week = number_of_responses(14, org)
    average_rating = org_average_rating(org)
    responses_last_week = responses_two_week - responses_one_week
    if responses_last_week:
        responses_percent_change = (abs(responses_one_week - responses_last_week)/responses_last_week)*100
    else:
        responses_percent_change = responses_one_week*100
    # last n responses
    last_5_responses = last_n_responses(5, org)
    # print(last_5_responses)
    context = {'week_responses': week_responses, 'user_org': user_org, 'today': today,
               'responses_one_week': responses_one_week, 'responses_percent_change': responses_percent_change,
               'last_5_responses': last_5_responses, 'sms_sent': sms_sent, 'email_sent': email_sent,
               'average_rating': average_rating}
    return render(request, 'events/dashboard.html', context)

test_urls.py

@pytest.mark.django_db
class TestUrls(test.TestCase):
def test_event_dashboard(self):
c = Client()
c.post('login/', {
'username': 'nitin',
'password': 'qwerty123321'})
 response = c.get(reverse('event-dashboard'))
 self.assertEqual(response.status_code, 200)


标签: pythondjangopython-3.xpytestpython-unittest

解决方案


302 是因为您的用户被重定向到登录屏幕。

如果要测试需要身份验证的视图,则需要先对用户进行身份验证。

幸运的是,这很容易做到。请参阅文档

# Create a new user
User.objects.create_user(
    username='fred',
    password='secret'
)

# Start up a test client
c = Client()

# Authenticate the user on the client
c.login(username='fred', password='secret')

# Do your thing
response = c.get(reverse('event-dashboard'))
self.assertEqual(response.status_code, 200)

推荐阅读