Mysql
 sql >> Database >  >> RDS >> Mysql

Test di accettazione della codeception all'interno della transazione del database su MySQL

Ci sono sempre altre opzioni :).

Nel mio caso, l'uso di un dump era fuori questione perché abbiamo anche un database molto grande (1,2 GB quando ridotto all'essenziale,> 250 GB in tempo reale). Invece, ho un sacco di file .sql che rimuovono tutti i record che sono stati inseriti da un test specifico.

Ho una classe DbHelper che ha questa funzione per eseguire query:

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

Funziona come un incantesimo e non è più necessario eseguire i test.

Aggiornamento:

Se hai a che fare con utenti e dati correlati, di solito è abbastanza facile scegliere come target tutti i record che devi rimuovere. Molto probabilmente il nome utente e l'e-mail sono univoci e puoi usarli per ottenere l'id (chiave primaria di incremento automatico) dell'utente. Quell'id è probabilmente usato nelle tabelle correlate. Ad esempio in questo modo:

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;