Я использую phpunit для создания базы данных разработчиков. Я написал короткий сценарий , который выгружает данные xml из действующей базы данных, и использовал их по таблицам, разбрасывая все что угодно и удаляя ненужные мне данные. Схема для моей базы данных dev никогда не меняется и никогда не перестраивается. Только данные удаляются и воссоздаются при каждом запуске phpunit.
Возможно, это не правильное решение для всех, потому что оно никогда не подойдет для синхронизации dev до стадии / производства, но мне не нужно этого делать.
Основным преимуществом является то, как мало данных мне нужно для разработки базы данных. Это около 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
{
/**
* @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
*/
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);
}
/**
* @return PHPUnit_Extensions_Database_DataSet_IDataSet
*/
public function getDataSet() {
return $this->createXMLDataSet(dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'Tests/_files/seed.xml');
}
}
Итак, теперь вам просто нужен начальный файл, из которого DbUnit считывает данные для повторного заполнения базы данных каждый раз, когда запускаются юнит-тесты.
Начните с копирования вашей полной базы данных дважды. Одна из них будет вашей базой данных для разработчиков, а вторая - вашей «нетронутой» базой данных, которую вы можете использовать для выгрузки данных XML в случае возникновения ключевых проблем.
Затем используйте что-то вроде моего xml-дампера снова в базе данных "prisine", чтобы получить свои 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
Отредактируйте начальный файл, чтобы использовать только то, что вам нужно. Небольшой размер базы данных dev означает, что вы можете исследовать различия, просто посмотрев на вашу базу данных в сравнении с тем, что в текстовых файлах. Не говоря уже о том, что при наличии меньшего количества данных это происходит намного быстрее.