Django测试打印或日志失败

Django test print or log failure

我有一个django_rest_framework测试(问题与常规django测试相同),如下所示:

1
2
3
4
5
6
7
8
9
10
from rest_framework.test import APITestCase

class APITests(APITestCase):

    # tests for unauthorized access
    def test_unauthorized(self):
        ...
        for api in apipoints:
            response = self.client.options(api)
            self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

我有一个失败的网址,终端显示:

FAIL: test_unauthorized (app.misuper.tests.APITests)
---------------------------------------------------------------------- Traceback (most recent call last): File
"/home/alejandro/...",

line 64, in test_unauthorized

self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) AssertionError: 200 != 403

好的,我怎么知道哪个网址未通过测试? 我正在遍历所有需要登录的网址,即许多网址,如何打印未通过测试的网址?


对于简单的快速修复,您可以在断言方法的第三个参数中传递apipoint

1
2
3
>>> from unittest import TestCase
>>> TestCase('__init__').assertEqual(1, 2, msg='teh thing is b0rked')
AssertionError: teh thing is b0rked

根据单元测试的精神,这些应该是每种不同的测试方法,而不是只有一种测试方法。 查看nose_parameterized以获得更多DRY的帮助。 你会像这样装饰测试方法:

1
2
3
4
5
6
from nose_parameterized import parameterized

@parameterized.expand(apipoints)
def test_unauthorized(self, apipoint):
    response = self.client.options(apipoint)
    self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

装饰器将为每个端点生成不同的测试方法,以便它们可以彼此独立地通过/失败。

虽然此程序包的名称中包含nose,但它也与其他运行程序(如unittestpy.test)兼容。