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
好的,我怎么知道哪个网址未通过测试? 我正在遍历所有需要登录的网址,即许多网址,如何打印未通过测试的网址?
对于简单的快速修复,您可以在断言方法的第三个参数中传递
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) |
装饰器将为每个端点生成不同的测试方法,以便它们可以彼此独立地通过/失败。
虽然此程序包的名称中包含