python - 从 UnitTest/WebTest 运行 Python/Django 管理命令

标签 python django unit-testing webtest

我们的 Django 站点中有一堆命令,有些是管理命令,有些是在我不知道如何测试的 cron 作业上运行的。它们几乎看起来像这样:

# Saved in file /app/management/commands/some_command.py
# Usage: python manage.py some_command
from django.core.management.base import NoArgsCommand
class Command(NoArgsCommand):
    def handle_noargs(self, **options):
         # Do something useful

我有一些测试,看起来像这样:

import unittest
from django.test import TestCase
from django_webtest import WebTest

class SomeTest(WebTest):
    fixtures = ['testdata.json']

    def setUp(self):
        self.open_in_browser = False
        # Set up some objects

    def test_registration(self):
        response = self.client.get('/register/')
        self.assertEqual(response.status_code, 200)
        form = self.app.get('/register/').forms[1]
        # Set up the form
        response = form.submit()
        self.assertContains(response, 'You are Registered.')
        if self.open_in_browser:
            response.showbrowser()

        # Here I'd like to run some_command to see the how it affects my new user.

在我的测试中(我有评论)我想运行我的 NoArgsCommand 来看看我的新用户会发生什么。我找不到任何有关如何完成此操作的文档或示例。另请注意,我的测试环境是我在内存中从头开始创建的 SQLlite DB,将一些固定装置和对象加载到并运行我的测试,所以我想在真实数据库中设置数据,然后运行我的从命令行命令,我不能,这太耗时了。任何想法将不胜感激。

最佳答案

Django documentation on management commands可能会有所帮助,它描述了如何从 python 代码中调用它们。

基本上你需要这样的东西:

from django.core import management
management.call_command( ... )

关于python - 从 UnitTest/WebTest 运行 Python/Django 管理命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9539441/

相关文章:

python - 无法导入 Django.shortcuts

unit-testing - 如何使用 with-redefs 模拟对同一函数的多次调用?

Python3 -m/path/to/file 给我一个错误,而 python -m/path/to/file 则没有

django - 在 View 中返回 json 文件

python - 注释 matplotlib 热图

django - 可以仅使用实例 ID 添加到 Django ManyToManyField

unit-testing - Angular 单元测试 - 如何模拟 router.url

c++ - googletest:死亡测试:单个测试中有多个 expect_exit

python - pandas - 通过添加另一个级别来扩展 DataFrame

python - JSON 加载返回 unicode 而不是字典