Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Codeception-Akzeptanztests innerhalb von Datenbanktransaktionen auf MySQL

Es gibt immer andere Möglichkeiten :).

In meinem Fall kam die Verwendung eines Dumps nicht in Frage, da wir auch eine sehr große Datenbank haben (1,2 GB, wenn auf das Wesentliche reduziert,> 250 GB im Livemodus). Stattdessen habe ich eine Reihe von .sql-Dateien, die alle Datensätze entfernen die durch einen bestimmten Test eingefügt wurden.

Ich habe eine Klasse DbHelper, die diese Funktion zum Ausführen von Abfragen hat:

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();
}

Funktioniert wie ein Zauber und kein Overhead mehr für das Ausführen der Tests.

Aktualisierung:

Wenn Sie mit Benutzern und ihren zugehörigen Daten zu tun haben, ist es normalerweise ziemlich einfach, alle zu entfernenden Datensätze gezielt zu entfernen. Höchstwahrscheinlich sind der Benutzername und die E-Mail-Adresse eindeutig, und Sie können diese verwenden, um die ID (Primärschlüssel mit automatischer Erhöhung) des Benutzers abzurufen. Diese ID wird wahrscheinlich in den verwandten Tabellen verwendet. Zum Beispiel so:

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;