【问题标题】:What's the best way to optimise the fixture-loading part of Django tests?优化 Django 测试的夹具加载部分的最佳方法是什么?
【发布时间】:2011-02-17 13:16:08
【问题描述】:

我的 Django 测试运行得很慢,但这不是测试的错。

目前,整个过程需要 14 秒,但其中只有 0.1 秒在运行测试。前几秒是创建表和索引,其余的是应用项目的许多fixtures

解决这个问题的最佳方法是什么?我认为有一种方法可以指定在每个测试中加载哪个fixtures,但我需要它们中的大多数来完成大多数测试......

我认为可行的解决方案是,如果测试在每次运行后都没有删除表,这样就不需要在每次运行测试时创建和填充数据库。大多数测试甚至不写入数据库。

优化 Django 测试的fixture-loading 部分的最佳方法是什么? 谢谢!

(我使用的是nose,但除此之外只是普通的Django 和sqlite

编辑:我应该提到我正在使用内存中的 sqlite 数据库。我正在寻找的 - 具体来说 - 是对测试的夹具加载部分的优化。

【问题讨论】:

  • 您可以尝试将夹具加载包装在事务中以加快速度。如果您将 MySQL 与 InnoDB 表一起使用,那应该会有很大的不同。
  • 我已经在使用内存中的 sqlite 数据库了,我不认为可以进一步优化吗?

标签: python django testing performance fixtures


【解决方案1】:

“但我需要他们中的大多数来做大多数测试”......

对此感到抱歉,但要加快速度,您将不得不进行一些思考

“我认为有一种方法可以指定在每个测试中加载哪些夹具”

这是一件令人不安的事情。您最近是否查看您的测试?

您的测试确实——特别是——列出了固定装置。您需要最小化该列表。

【讨论】:

  • 我不听你的回答,哇,我要最小化灯具列表吗?
  • @Oatman: 1. 你看看列表。 2.你考虑考试。 3. 你移除了测试不需要的夹具。 4. 您从测试不需要的夹具中删除数据项。您思考每个测试的作用。您最小化每个测试的固定装置列表。
  • 如何移除测试不需要的夹具?在我的测试运行之前加载 initial_data.json 文件...
  • 虽然你的回答和cmets的语气非常煽动和傲慢,但你确实引导我找到了正确的答案,谢谢!
  • 很嚣张,好一点也无妨,人家更感谢你的帮助。
【解决方案2】:

您可以使用 sqlite 内存数据库进行测试 - 速度非常快

【讨论】:

  • 谢谢,但不是几兆的灯具!我已经在使用内存数据库了:-(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 2023-03-15
  • 2019-12-21
相关资源
最近更新 更多