eri*_*kcw 15 django unit-testing mocking
我有一个带有由django-storages的S3Boto支持的ImageField的模型.我测试了练习"上传图片"视图,但是它将图像上传到S3的事实正在减慢我的测试套件.
为了加速我的测试,处理这个问题的最佳做法是什么?我应该嘲笑S3Boto吗?也许有一个内存支持的存储后端适用于测试(自动清理会很好!)?
mes*_*shy 14
我也遇到了这个问题.我通过使用获得了更快的测试dj-inmemorystorage.
快速设置方法是test_settings.py在与设置相同的文件夹中创建:
from settings import *
DEFAULT_FILE_STORAGE = 'inmemorystorage.InMemoryStorage'
Run Code Online (Sandbox Code Playgroud)
...并呼吁./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',
)
Run Code Online (Sandbox Code Playgroud)
注意:这也设置了PASSWORD_HASHER,因为它显着User缩短了创建时间.这不应该在生产中设置.
在project/settings.py:
TEST_RUNNER = 'project.test_runner.FastTestRunner'
Run Code Online (Sandbox Code Playgroud)
要求:
pip install dj-inmemorystorage
Run Code Online (Sandbox Code Playgroud)
更新:从django-inmemorystorage改为dj-inmemorystorage.
更新2:删除django-discover-runner,因为它现在是django中的默认测试运行器,并修复了PASSWORD_HASHER相关博客文章的链接.
我也使用 S3Boto,但为了测试,我更喜欢使用自定义设置,其中包括使用文件系统存储。您可以在文件中声明自定义设置,然后可以在测试用例中导入并使用该设置。即使如此,您也可以模拟文件存储,以便文件实际上不会写入磁盘。
这是一个示例test_settings.py
# myproject/myproject/test_settings.py
from django.test import override_settings
common_settings = override_settings(
DEFAULT_FILE_STORAGE='django.core.files.storage.FileSystemStorage',
PASSWORD_HASHERS=(
'django.contrib.auth.hashers.UnsaltedMD5PasswordHasher',
),
)
Run Code Online (Sandbox Code Playgroud)
用法:
from django.test import TestCase
from myproject.test_settings import common_settings
@common_settings
class MyTestCase(TestCase):
"""Tests go here"""
Run Code Online (Sandbox Code Playgroud)
关于模拟文件系统存储,您可以在此处查看我的答案SO。
| 归档时间: |
|
| 查看次数: |
2454 次 |
| 最近记录: |