You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pytest-django在Heroku上针对现有数据库运行Django测试?

我之前在Heroku上折腾过pytest-django的测试部署,刚好能给你两个可行的方案参考:

方案一:直接使用现有数据库运行测试(不推荐,但应急可用)

首先必须强调:直接在生产数据库上跑测试风险极高,测试用例可能会修改、删除数据,哪怕有事务回滚也难保不出意外。如果一定要这么做,务必先给数据库做完整备份,最好是用生产库的副本而非原库。

具体配置步骤:

  • 在项目根目录创建或修改pytest.ini文件,添加以下配置:
    [pytest]
    django_settings_module = 你的项目名.settings
    django_db_createdb = False
    django_db_keepdb = True
    
    这里django_db_createdb = False会告诉pytest-django不要自动创建新的测试数据库,django_db_keepdb = True则避免测试后删除现有数据库。
  • 确保你的Django配置中,DATABASES指向目标数据库(生产库或其副本)。如果是在Heroku上,直接用环境变量里的DATABASE_URL即可。
  • 额外提醒:默认情况下Django测试会用事务包裹测试用例并在结束后回滚,但如果你的测试涉及到非事务性操作(比如信号、第三方API调用),可能还是会污染数据,一定要谨慎。
方案二:在Heroku上自动创建测试数据库(更安全的推荐方案)

其实Heroku是支持创建临时测试数据库的,只是需要调整配置来适配pytest-django:

  1. 准备测试数据库资源
    首先确认你的Heroku Postgres计划支持创建额外数据库(大部分付费计划都可以,免费计划可能有额度限制)。你可以通过Heroku CLI提前创建测试库:

    heroku pg:create TEST_DATABASE --app 你的应用名
    

    之后Heroku会自动给你生成对应的环境变量(比如HEROKU_POSTGRESQL_XXX_URL)。

  2. 配置pytest-django动态使用测试库
    在项目根目录的conftest.py中添加以下代码,让pytest自动切换到测试数据库:

    import os
    import django
    from django.conf import settings
    from django.db.utils import parse_db_url
    
    def pytest_configure(config):
        # 获取Heroku提供的测试数据库URL,没有则自动从生产库URL生成
        test_db_url = os.environ.get('TEST_DATABASE_URL') or os.environ.get('DATABASE_URL').replace('/prod_db_name', '/prod_db_name_test')
        # 解析URL并更新Django数据库配置
        test_db_config = parse_db_url(test_db_url)
        settings.DATABASES['default'] = test_db_config
        # 明确告知Django要创建测试库(如果不存在的话)
        settings.TEST['DATABASES']['default'] = {
            **test_db_config,
            'TEST': {'CREATE_DB': True}
        }
    
  3. 在Heroku上运行测试
    你可以把测试命令加到Heroku的Procfile或者用heroku run直接执行:

    heroku run pytest --app 你的应用名
    

    pytest-django会自动识别配置,创建并使用测试数据库,测试完成后也可以选择保留或删除测试库(如果想保留可以加--keepdb参数)。

  4. 进阶:用临时测试环境隔离
    更稳妥的方式是用Heroku Pipelines创建临时测试应用,把代码部署到临时应用后再运行测试,测试完成后销毁临时应用即可,完全不会影响生产环境。

内容的提问来源于stack exchange,提问作者lmr2391

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:08:50