如何使用自定义设置从Django中获取python单元测试的结果

时间:2016-07-28 18:05:52

标签: python django unit-testing python-unittest

我正在尝试从Django中的单元测试生成报告。 为了运行测试并检索结果,我使用的是自定义的TestResult类,它可以正常工作:

results = TestResult()
loader = unittest.TestLoader()
suites = loader.discover('test_folder')
for suite in suites:
    suite(results)

我唯一的问题是我无法覆盖在内存数据库中使用的设置文件。我使用 django.test 中的 override_settings 修饰了我的测试用例,这只适用于我的命令行。当我使用加载器运行它时,它使用my_app.settings文件,但看起来它被覆盖了:

>>> from django.conf import settings   
>>> settings.DATABASES   
{'default': {'TEST_CHARSET': 'UTF8', 'NAME': ':memory:', 'ENGINE': 'django.db.backends.sqlite3', 'TEST_NAME': ':memory:'}}

我还创建了自己的override_settings文件来覆盖项目中的任何函数,结果是一样的。我试图覆盖os.environ中的 DJANGO_SETTINGS_MODULE ,但仍然遇到同样的问题。也许我错过了一些django.setup()函数来重新加载设置文件。

我希望能够:

  • 从单元测试中获得结果
  • 使用自定义设置
  • 加载特定测试模块(就像 loader.discover(start_dir)一样)

TestCase示例:

from rest_framework import status  
from rest_framework.test import APITestCase  

class TestCase(APITestCase):  
    fixtures = ('dump',)
    url = '/api/post'

    def test_post(self):
         # returns post from existing database not from fixture
         post = Post.objects.get(pk=3)
         data = {
            'name': 'test',
            'post': post.content
        }
        response = self.client.post(self.url + '/1', data=data)
        self.assertEquals(response.status_code, status.HTTP_201_CREATED)

使用:

  • Python 3.4
  • Django 1.9

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

好吧,如果你使用命令./manage.py test,那么你可以解析命令行参数,看看它是否test,然后在你的if语句中{1}}:

settings.py