我有一个由 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/