sql >> Database >  >> RDS >> Mysql

Codeceptie-acceptatietests binnen databasetransactie op MySQL

Er zijn altijd andere opties :).

In mijn geval was het gebruik van een dump uitgesloten omdat we ook een zeer grote database hebben (1,2 GB wanneer uitgekleed tot de essentie,> 250 GB live). In plaats daarvan heb ik een aantal .sql-bestanden die alle records verwijderen die door een specifieke test zijn ingevoegd.

Ik heb een klasse DbHelper die deze functie heeft om queries uit te voeren:

public function executeOnDatabase($path_to_sql_file)
{
    $sql = file_get_contents($path_to_sql_file);
    $dbh = $this->getModule('Db')->dbh;
    $this->debugSection('Query', $sql);
    $sth = $dbh->prepare($sql);

    return $sth->execute();
}

Werkt als een tierelier, en geen overhead meer bij het uitvoeren van de tests.

Bijwerken:

Als u te maken hebt met gebruikers en hun gerelateerde gegevens, is het meestal vrij eenvoudig om alle records te targeten die u moet verwijderen. Hoogstwaarschijnlijk zijn de gebruikersnaam en het e-mailadres uniek en kunt u deze gebruiken om de id (auto-increment primaire sleutel) van de gebruiker te krijgen. Die id wordt waarschijnlijk gebruikt in de gerelateerde tabellen. Bijvoorbeeld als volgt:

SET @user_id = (SELECT `id` FROM `users` WHERE `username` = 'rgsfdg');
SET @email = '[email protected]';
DELETE FROM `mail_queue` WHERE `send_to` = @email;
DELETE FROM `user_settings` WHERE `user_id` = @user_id;
DELETE FROM `users` WHERE `id` = @user_id;



  1. Percentage van Count(*) krijgen voor het aantal items in GROUP BY

  2. Hoe duplicaten te verwijderen uit een door de ruimte gescheiden lijst door Oracle regexp_replace?

  3. Hoe maak je een nieuwe database aan met de hstore-extensie al geïnstalleerd?

  4. SQL Server 2017 herstellen