Mysql
 sql >> Base de données >  >> RDS >> Mysql

Tests d'acceptation de codeception dans la transaction de base de données sur MySQL

Il y a toujours d'autres options :).

Dans mon cas, il était hors de question d'utiliser un vidage car nous avons également une très grande base de données (1,2 Go lorsqu'il est réduit à l'essentiel,> 250 Go en direct). Au lieu de cela, j'ai un tas de fichiers .sql qui suppriment tous les enregistrements qui ont été insérés par un test spécifique.

J'ai une classe DbHelper qui a cette fonction pour exécuter des requêtes :

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

Fonctionne comme un charme, et plus de frais généraux lors de l'exécution des tests.

Mise à jour :

Si vous traitez avec des utilisateurs et leurs données associées, il est généralement assez facile de cibler tous les enregistrements que vous devez supprimer. Très probablement, le nom d'utilisateur et l'e-mail sont uniques, et vous pouvez les utiliser pour obtenir l'identifiant (clé primaire d'incrémentation automatique) de l'utilisateur. Cet identifiant est probablement utilisé dans les tables associées.Par exemple :

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;