我使用phpunit构建开发数据库。我编写了一个
简短的脚本,从实时数据库中转储xml数据,并逐个表格使用,修改敏感内容并删除不需要的内容。我的开发数据库模式从不改变,也不会被重建。每次运行phpunit时,只有数据会被删除和重新创建。
这可能不是每个人的正确解决方案,因为它永远不会对将开发同步到阶段/生产环境有好处,但我不需要这样做。
主要优点是我所需的开发数据库非常小。它大约有12000行xml,可以处理大约30个不同的表格。一些小的核心表格保持不变,因为我不写入它们,许多表格为空,因为我不使用它们。
该数据库是代表性的样本,非常小。足够小,可以作为文本文件进行编辑,并且每次运行测试时只需几秒钟即可填充。
以下是每个 PHPUnit 测试的顶部内容。
PHPUnit 和
DbUnit 都有很好的文档。
<?php
require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'top.php';
require_once "PHPUnit/Extensions/Database/TestCase.php";
class SomeTest extends PHPUnit_Extensions_Database_TestCase
{
public function getConnection() {
$database = MY_DB
$hostname = MY_HOST
$user = MY_USER
$password = MY_PASS
$pdo = new PDO("mysql:host=$hostname;dbname=$database", $user, $password);
return $this->createDefaultDBConnection($pdo, $database);
}
public function getDataSet() {
return $this->createXMLDataSet(dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'Tests/_files/seed.xml');
}
}
“所以,现在你只需要一个种子文件,DbUnit 从中读取并重新填充你的数据库,每次单元测试被调用时。
首先,将你的完整数据库复制两次。一个是开发数据库,另一个是你的“原始”数据库,你可以使用它来转储 XML 数据,以防出现键问题。
然后,使用类似于我的 XML 转储器对“原始”数据库进行操作,以获取你的 XML 转储,并开始构建你的种子文件。”
generate_flat_xml.php -tcatalog_product_entity -centity_id,entity_type_id,attribute_set_id,type_id,sku,has_options,required_options -oentity_id >> my_seed_file.xml
编辑种子文件,仅使用您需要的内容。由于开发数据库的大小较小,因此您可以通过查看数据库与文本文件中的内容之间的差异来检查它们。更不用说,减少数据量可以加快速度。