【问题标题】:Setting up and Cleanning a DB after test Postgress and PHP测试 Postgres 和 PHP 后设置和清理数据库
【发布时间】:2016-08-09 09:17:03
【问题描述】:

我正在为 API 创建测试。我想设置数据库并为每个测试清理它。问题是我的数据库非常复杂而且很大,所以我想知道是否有办法对整个测试数据库进行完整的设置和清理,而且不会太重。感谢您的建议。如果您需要更多详细信息,请告诉我。如果这有帮助,我将使用 phpunit 进行测试并使用 symphony 作为我的框架。

【问题讨论】:

  • 如何让数据库重复,每次测试后你可以用原始(其他)数据库覆盖你刚刚使用的数据库。您可以非常快速地克隆它,即从 phpMyAdmin。
  • 感谢@MilanG 的快速回复。我也想过。问题是测试也会被其他人使用,所以我也需要在测试之前进行设置。我正在寻找一种使用 php 上传整个 sql 文件的方法,并且由于数据库有很多表和大量数据,因此不会对系统造成太大影响。好吧,las 部分是相对的,但对我的系统来说很大。
  • 你可以让mysql数据库转储,然后从php调用控制台mysql命令将该转储导入数据库。所以任何时候你想“重置”你的表只需执行“exec”或一些类似的命令来调用 mysql 重新导入数据库。
  • 感谢@MilanG。我创建了一个测试数据库并通过使用 pg_restore 和 exec 调用它来“重置”它。非常感谢。现在我创建了一个控制台命令来重置所有测试数据库。谢谢
  • 对答案/cmets 投票是表示感谢的另一种方式。 :)

标签: php postgresql unit-testing symfony phpunit


【解决方案1】:

这对于模板数据库来说非常简单。
您创建并填充所需的测试数据库,我们称之为test_template
然后确保没有人可以连接:

ALTER DATABASE test_template ALLOW_CONNECTIONS false IS_TEMPLATE true;

然后用

创建你的测试数据库
CREATE DATABASE test123 TEMPLATE test_template;

为了清理,您只需删除数据库。您必须确保在删除它时没有人连接,使用函数pg_terminate_backend 来终止任何剩余的连接。

【讨论】:

  • 感谢 Laurenz,这很有帮助。我使用了这个,之后使用了 pg_restore 来维护测试数据库的清洁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 2014-04-07
  • 1970-01-01
相关资源
最近更新 更多