当前位置: 首页 > 面试题库 >

如何仅在内存中运行Django的测试数据库?

东郭凯捷
2023-03-14
问题内容

我的Django单元测试需要很长时间才能运行,因此我正在寻找加快速度的方法。我正在考虑安装SSD,但我也知道它也有缺点。当然,我的代码可以做一些事情,但是我正在寻找结构上的修复方法。由于每次都需要重建/向南迁移数据库,因此即使运行单个测试也很慢。所以这是我的主意

由于我知道测试数据库总是很小,所以为什么不能仅将系统配置为始终将整个测试数据库保留在RAM中?绝对不要触摸磁盘。如何在Django中进行配置?我宁愿继续使用MySQL,因为这是我在生产中使用的方式,但是如果使用SQLite 3或其他方法可以简化这一点,我会采用这种方式。

SQLite或MySQL是否可以选择完全在内存中运行?应该可以配置RAM磁盘,然后配置测试数据库以将其数据存储在其中,但是我不确定如何告诉Django / MySQL为特定数据库使用其他数据目录,尤其是因为它不断被删除并重新创建每次运行。(我在Mac FWIW上。)


问题答案:

如果在运行测试时将数据库引擎设置为sqlite3,则Django将使用内存数据库。

settings.py在运行测试时使用类似的代码将引擎设置为sqlite:

if 'test' in sys.argv:
    DATABASE_ENGINE = 'sqlite3'

或在Django 1.2中:

if 'test' in sys.argv:
    DATABASES['default'] = {'ENGINE': 'sqlite3'}

最后在Django 1.3和1.4中:

if 'test' in sys.argv:
    DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'}

(到Django 1.3并不一定要有完整的后端路径,但是可以使设置向前兼容。)

你还可以添加以下行,以防南向迁移出现问题:

    SOUTH_TESTS_MIGRATE = False


 类似资料:
  • 问题内容: 我开始采用TDD开发态度,并为django应用程序编写单元测试。我知道固定装置,并且知道应该执行测试的方式,但是对于给定的测试,我确实需要在整个数据库上执行它,而我想处理的10百万以上行数据库的json固定装置,此外,此测试是“只读”的。 因此,问题是如何设置测试套件以在生产数据库上运行?我想这就像在某些测试的setUp方法中添加DATABASE_NAME设置一样容易。但是运行测试时,

  • 使用文档中的以下示例: 如何创建并运行针对此迁移的测试,以确认数据已正确迁移?

  • 问题内容: 我注意到我的数据库服务器支持内存数据库引擎。我想创建一个数据库,我已经使InnoDB在内存中完全运行以提高性能。 我怎么做?我浏览了PHPMyAdmin,但找不到“更改引擎”功能。 问题答案: 假设您了解注释和此处提到的使用MEMORY引擎的后果,以及通过搜索可以找到的其他一些后果(无事务安全性,锁定问题等)-您可以按照以下步骤进行操作: MEMORY表的存储方式与InnoDB的存储方

  • 如何通过不同的测试数据在Playwright测试运行测试?比如从CSV文件发送测试数据?

  • 我正在和TestNG一起学习Java中的Selenium Webdriver。我正在使用谷歌登录页面进行测试。 我在按顺序运行测试用例时遇到了麻烦。我想做的是: 运行@BeforeTest 运行测试 1(登录成功) 运行@AfterTest(关闭浏览器和驱动程序) 等到 AfterTest 方法完成,然后运行测试 2(登录失败) 但我的经历是: 运行@BeforeTest 运行测试 1(登录成功)

  • 我用spring boot创建了一个spring网络项目。想了解有关测试的实践。我需要一个内存中的嵌入式数据库,比如hsql或h2,用于具有初始schema.sql的JUnit。在主应用程序上,数据库可以是mysql或oracle 在非spring boot项目中,我们通常会有一个单独的applicationcontext.xml一个由web应用程序引用的应用程序,对于测试,我们会使用applic