gpt4 book ai didi

python - 针对生产数据库的 Django 单元测试查询

转载 作者:太空宇宙 更新时间:2023-11-03 16:16:25 25 4
gpt4 key购买 nike

我正在尝试在 Django 应用程序中为异步方法编写一些单元测试。本质上,当用户执行某个 POST 时,会启动此方法,因此应用程序不会挂起。我想测试的是在请求运行时取消该请求的能力(在本例中是通过 celery)。这样做的唯一问题是因为 Celery 独立于 Web 应用程序运行,它将结果推送到真实数据库,而不是 Django 单元测试创​​建的测试数据库。所以我想知道我怎样才能做类似的事情

Results.objects.get(id=some_id)

并告诉它指向实际的数据库。我已经尝试过以下操作:

Results.objects.using('default').get(id=some_id)

认为也许这可以解决问题,但它没有找到结果(同样是因为它将信息推送到实际数据库,而不是测试数据库)。我做了一些搜索并找到了这个链接: How do I run a unit test against the production database?但这里的答案说的是“你不应该针对生产进行测试”。我完全理解这不是一个好的做法,但我需要访问实时数据库。一切都在虚拟机上运行,​​所以无论如何它都是一个测试数据库。有谁知道如何访问真实数据库?

谢谢

最佳答案

我们能做的只有一件事,那就是肮脏的把戏!

  • 在使用 say 的设置上运行 celery 工作线程和调度程序“new_one”数据库。
  • 你应该有一个像这样的settings.py -

    DATABASES = {
    'default': {
    'TEST': {
    'NAME': 'new_one',
    },
    }
    }
    db_from_env = dj_database_url.config(default=config('DATABASE_URL'))
    DATABASES['default'].update(db_from_env)
  • 之后在另一个数据库上运行 django 服务器
    '另一个新的'。

  • 运行您的测试用例,它们会通过。为什么?测试用例正在使用'new_one' 数据库,celery 也使用 'new_one' 数据库,你的django 服务器使用“another_new_one”。干杯!
  • 我尝试为测试和生产提供相同的名称数据库,但运行测试“数据库”时出现错误已经被其他人使用',其他人是 django服务器。所以需要两个不同的数据库,1-new_one 2-another_new_one

      Note- I have used .env file to use config(), where I have my production database name host user password etc. It can change according to what you use. Just use two different databases and do this dirty trick, it will work. As it worked for me.

关于python - 针对生产数据库的 Django 单元测试查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38923002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com