我使用phpunit來建立一個開發數據庫。我寫了一個short script,它從實時數據庫轉儲xml數據,我使用它逐個表,將任何敏感內容刪除,並刪除我不需要的內容。我的開發數據庫架構從不改變,永遠不會重建。只有數據被丟棄並重新創建每個phpunit運行。
對於每個人來說可能都不是合適的解決方案,因爲它不會將dev同步到stage/production,但我不需要那麼做。
主要好處是我需要的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數據,以防開始出現關鍵問題。
然後,在「prisine」數據庫中使用類似於我的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
編輯種子文件以僅使用你需要的。開發數據庫的小尺寸意味着您可以通過查看數據庫與文本文件中的內容來檢查差異。更不用說數據更少,速度更快。
我很好奇這種方法,因爲我同意你的說法,開發數據庫並不需要大量的數據用...測試。主要是產品,設置等。我從來沒有聽說過phpUnit,直到這篇文章。我很好奇,如果你不介意的話,可以更多地瞭解你是如何完成這種情況的。我只想保持這種簡單而又易於管理的方式,特別是因爲我是版本控制和處理這種規模的網站的全新功能。 – 2012-02-01 14:44:29
太棒了,我非常感謝所有的幫助。在我結束幾件事情並且有時間留出餘暇之後,我會在接下來的幾天內對此做出迴應。 – 2012-02-02 16:43:02