Recentemente ho riscontrato un problema su un'applicazione live. Mi sono reso conto che avevo sempre più eccezioni e blocchi di concorrenza con un database.Come test unitario di lettura/scrittura simultanea con PHPUnit?
Fondamentalmente avvio una transazione che richiede un SELECT
e un INSERT
sulla stessa tabella da impegnare.
Ma poiché il carico è veramente pesante, ogni transazione blocca la tabella, nella maggior parte dei casi è così veloce da non causare problemi, ma c'è un punto in cui i blocchi iniziano ad attendere sempre di più.
Sono stato in grado di risolvere questo problema in qualche modo modificando le query.
Anche se, ora, mi piacerebbe scrivere alcuni test con PHPUnit per convalidare la mia correzione ed evitare eventuali regressioni.
Non sono stato in grado di trovare alcun materiale su come farlo.
Poiché PHP non è multi-thread, non ho idea di come sia possibile eseguire query concorrenti in un singolo test per la convalida.
Fondamentalmente, mi piacerebbe essere in grado di eseguire più chiamate in un singolo test per garantire che tutto sia ok.
So che potrei provare a fare alcuni test di alto livello interrogando direttamente il server http e caricare l'intera applicazione, ma dal momento che il mio problema proviene da una libreria standalone, vorrei piuttosto testarlo contro se stesso.
Qualche idea?
Avere la stessa domanda – XuDing
Non è possibile testare simultaneamente la concorrenza. Le uniche cose che puoi fare sono a) stress test e b) far rispettare le condizioni alle quali pensi che l'anomalia dovrebbe accadere (se possibile). Fondamentalmente non dovresti testare affatto il database, dovresti assicurarti che i white paper affermino che i tuoi algoritmi sono sicuri e, se vuoi essere ultra-sicuro, aggiungi test di stress specifici al più alto livello di test (al di fuori dell'applicazione). Per rispondere alla domanda specifica, è sempre possibile utilizzare più processi per eseguire operazioni simultanee, pertanto è consigliabile utilizzare biforcazioni manuali o librerie come kirsswallsmith/spork. – Etki