6

Vorremmo eseguire alcuni test di integrazione automatici di un processo che richiede l'invio di dati a una fonte esterna e quindi la convalida della corretta visualizzazione dei dati sul loro sito web.Test automatizzati .NET per processi di lunga durata

Tuttavia, potrebbero essere necessarie diverse ore prima che i dati vengano visualizzati sul sito Web.

Il problema con NUnit o MSTest tradizionale è che il test verrà sospeso per ore in attesa del risultato.

Ho visto PNUnit che potrebbe essere utilizzato - per eseguire tutti i test in parallelo, ma non mi sembra una soluzione elegante. Cosa succede se ci sono 1000 test? Questo non creerà un sacco di processi/thread sul server? E come tenere traccia di tutti loro.

Quindi qualcuno ha risolto questo problema? Hai fatto crescere a casa una soluzione, o c'è una soluzione open source a questo?

+0

Grazie per le risposte ragazzi. Buone idee Speravo di ottenere una risposta da qualcuno che avesse implementato qualcosa di simile. Sto pensando che il modo migliore per avvicinarsi a questo è quello di eliminare alcuni C# e creare qualcosa dai primi principi. Non sono sicuro che NUnit/MSTest ecc possa farlo in modo elegante. –

+1

Penso che il test sia troppo ampio e includa molte condizioni che potrebbero non funzionare nel codice. Quindi non è più un test di "unità", ma piuttosto un test di "sistema", motivo per cui è difficile trovarlo nello stampo di prova dell'unità.I test unitari dovrebbero essere piccoli pezzi di funzionalità isolati ("unità"). Spesso eseguito anche come parte di un processo di compilazione. Penso che tu stia cercando di fare più di un test di sistema e dovresti cercare strumenti come load tester o tester di simulazione del client, ecc ... Molti di questi strumenti sono costruiti per processi di lunga durata. – BenSwayne

risposta

2

Questo problema può essere facilmente risolto separando l'inserimento e la verifica dei dati di test. È sufficiente caricare tutti i dati di test disponibili sul sistema, attendere alcune ore fino al termine dell'elaborazione e quindi eseguire i test di verifica.

+0

Bella idea. Non penso che nessuna delle strutture di prova si presti a questo? Ad esempio, Nunit esegue i test e passa o fallisce. Suggerite di eseguire continuamente i test da un altro processo, quindi di utilizzare NUnit per convalidare i dati nel DB raccolti nell'ultimo giorno? –

+0

I framework "Tutti" si prestano a questa tecnica! Devi solo caricare alcuni dati di test predeterminati che cerchi in seguito, o salvare i dati del test nel tuo test "insert/upload" sul filesystem, quindi leggere quel file nel tuo test "verifica" più avanti per verificare. Il trucco è il tempismo che è il motivo per cui non penso che questo sia un test unitario appropriato in primo luogo, ma piuttosto un "test di sistema". – BenSwayne

+0

I framework dei test unitari di solito hanno la funzione "SetUp", che viene solitamente utilizzata per preparare l'ambiente per i test. Puoi usarlo per inserire dati di test sul tuo sistema. http://www.nunit.org/index.php?p=setupFixture&r=2.4 –

1

Sembra PNUnit sarebbe una buona soluzione. Se sei preoccupato per "troppi processi/thread" sul server, limitati a quanti test può essere eseguito in PNUnit contemporaneamente (ad esempio, Max N); al completamento di un test, pianificare il test successivo. Non sto affermando che PNUnit sa come farlo; potrebbe essere necessario implementare questa abitudine.

0

Martin, prima di arrivare a mia soluzione, per unità di testarlo mi sembra che vorresti testare solo ciò che puoi controllare. Quanto sopra è più simile a quello che chiamo test di regressione. Sto assumendo che il "loro" sito web sia il sito di qualcun altro. Posso chiederti cosa succede se segui le regole dell'interfaccia/integrazione ma non succede mai niente sul loro schermo, mentre potrebbe essere un problema cosa fare o potresti fare al riguardo? Inoltre, cosa succede quando cambiano il loro sito web o gli algoritmi? Finirai per aver bisogno di scrivere il codice in base a ciò che fanno che fa schifo.

Detto questo, come detto sopra, è possibile separare i test di caricamento e i test dei dati di verifica. Confesso di non sapere nulla di PNunit, ma semplicemente lanciando dei thread non risolverà la latenza di 3 ore per ogni round trip test.

se è necessario eseguire in modo sincrono, è possibile caricare tutti i dati in ClassInitialize(), quindi attendere fino al momento in cui è necessario verificare ed eseguire i test effettivi.

Se fossi in me, mi piacerebbe avere un progetto di test per le prove di carico e poi un progetto per verificare i risultati poche ore dopo. Avere la sincronia non sembra che ti compri molti benefici se non quello di garantire i passaggi preliminari prima di testare i risultati, che possono essere gestiti anche in altri modi.

+0

grazie per il suggerimento. sembra che il carico ora verifichi in seguito è popolare. il problema è che nessun framework sembra supportare questo, quindi le opzioni sono semplicemente "roll your own" o avviare un'iniziativa open source. –

+0

ho provato ad indirizzare il motivo per cui ho pensato che nessun framework lo facesse ed è probabile che l'altro sito web sia una scatola nera ei test che verificano che la scatola nera debba essere in quella soluzione e non l'applicazione che consuma, ma quella è solo la mia opinione. lungo la linea della separazione delle preoccupazioni –

Problemi correlati