django - 模拟 Django 存储模型 ImageField 后端 S3

标签 django unit-testing mocking

我有一个由 django-storages 的 S3Boto 支持的带有 ImageField 的模型。我对“上传图像” View 的练习进行了测试,但是它将图像上传到 S3 的事实正在减慢我的测试套件的速度。

为了加快我的测试速度,处理这个问题的最佳实践是什么?我应该模拟 S3Boto 吗?也许有一个内存支持的存储后端非常适合测试(自动清理会很好!)?

最佳答案

我也刚遇到这个问题。通过使用 dj-inmemorystorage ,我得到了更快的测试。 .

快捷方式设置的方法是创建一个 test_settings.py在与您的设置相同的文件夹中:

from settings import *
DEFAULT_FILE_STORAGE = 'inmemorystorage.InMemoryStorage'

...并调用 ./manage.py test --settings=project.test_settings运行测试。

我的首选方式是设置一个自定义测试运行器:

project/test_runner.py :
from django.conf import settings
from django.test.runner import DiscoverRunner

class FastTestRunner(DiscoverRunner):
    def setup_test_environment(self):
        super(FastTestRunner, self).setup_test_environment()
        # Don't write files
        settings.DEFAULT_FILE_STORAGE = 'inmemorystorage.InMemoryStorage'
        # Bonus: Use a faster password hasher. This REALLY helps.
        settings.PASSWORD_HASHERS = (
            'django.contrib.auth.hashers.MD5PasswordHasher',
        )

注意:这也设置了 PASSWORD_HASHER , 因为它 significantly improves User creation time .这不应该在生产中设置。

project/settings.py :
TEST_RUNNER = 'project.test_runner.FastTestRunner'

要求:
pip install dj-inmemorystorage

更新 :从 django-inmemorystorage 更改至 dj-inmemorystorage .

更新 2 : 删除 django-discover-runner ,因为它现在是 django 中的默认测试运行程序,并修复了指向 PASSWORD_HASHER 的链接相关博文。

关于django - 模拟 Django 存储模型 ImageField 后端 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12150169/

相关文章:

swift - 快速测试是否支持泛型?

unit-testing - 如何参数化 TestFixtureSetUp (NUnit)

python - 如何模拟 zip 文件

能够模拟非虚拟方法和 C 函数的 C++ 模拟框架

python - 测试 Django 国际化 - 模拟 gettext

mysql - 如何在设定的到期日期后隐藏数据库条目?

Django动态表单ValidationErorr

python - 迁移: Creating UserProfile in Django/MySQL

python - 创建时显示 ModelForm 中的字段,但更新时隐藏它

unit-testing - Jest - 'child_process' 包中的模拟函数