2011-09-28 14 views
9

Ho un'applicazione client/server scritta in C# /. NET 3.5 su cui voglio eseguire un po 'di test delle prestazioni. Stavo cercando una struttura generica per aiutarmi ma non ho avuto molta fortuna. Vorrei qualcosa in grado di gestire un insieme di client ed eseguire azioni casuali per loro in base ad alcune impostazioni. Vorrei anche registrare alcuni dati relativi a questo per aiutarmi a superare le soglie di massima per il mio sistema, ad es. Posso supportare n utenti che eseguono x azioni al secondo.Framework di testing delle prestazioni generico per .NET

vorrei scrivere codice specifico per la mia applicazione per eseguire operazioni quali:

  • login/logout di un client.
  • Invia messaggi al server per eseguire varie azioni.
  • Registrare conferme e altri messaggi dal server.
  • Misura le statistiche specifiche del sistema.

spero quadro sarà quindi in grado di prendere una serie di parametri per descrivere uno scenario di test come ad esempio:

  • Numero di clienti registrato in un dato momento.
  • Esegui un dato numero di azioni al secondo per ciascun cliente.

Avrebbe quindi eseguito lo scenario, gestire e tenere traccia di tutti gli utenti e le azioni e raccogliere tutti i dati. (Questo è il bit noioso che sto cercando di evitare di codificarmi ...) Idealmente avrebbe integrato alcune misure generali, ad es. tempo tra l'invio di un messaggio e la ricezione di una risposta, ma potrei codificarlo da solo se non lo sono.

Non voglio fare alcuna profilazione del mio codice; Posso sempre collegare un profiler mentre eseguo questi test in seguito. Invece voglio fare alcune conclusioni approssimative sul mio sistema, cioè quanti utenti posso lanciarlo prima che si rompa. (Se c'è un termine migliore per questo di 'test delle prestazioni' per favore fatemi sapere ... Stress test forse?)

Mi rendo conto che non sto dando molte specifiche sul sistema qui. Mi sembra una situazione abbastanza generale - sono sicuro che ci sono molti sistemi client/server là fuori che le persone devono fare test simili. Ho trovato molti framework basati sul web per fare cose simili, ma sembrano essere molto radicati nel web e non si prestano facilmente a sistemi non basati su HTTP.

Qualcuno sa di tutto ciò che potrebbe essere d'aiuto? La mia ricerca non ha ancora trovato nulla. Devo sottolineare che sono rimasto bloccato con Visual Studio 2008 Professional per il futuro prevedibile, quindi se il 2010 può farlo è fuori dai limiti per me. Suppongo che non debba essere un framework .NET, a patto che riesca ancora a collegare il mio codice .NET abbastanza facilmente.

EDIT Per essere chiari, la mia applicazione non è un sito Web, è un'applicazione client Windows Form che si collega tramite un protocollo personalizzato a un servizio .NET. Posso scrivere codice per eseguire le azioni client rilevanti, ho solo bisogno di un framework per inserirlo.

+0

Hai guardato questa domanda su. Profiler Net? http://stackoverflow.com/questions/3927/what-are-some-good-net-profilers – TheLukeMcCarthy

+0

Non voglio fare il profiling, posso farlo più tardi se risolvo se ho un problema. Sono più interessato a misurare il numero di utenti che il mio sistema può assumere. – MrKWatkins

risposta

6

La parola chiave che stai cercando è "Test distribuito".

Smart Bear ha un prodotto chiamato TestComplete che supporta distributed testing. Non penso che possa eseguire più istanze del tuo client su una singola macchina (forse è possibile, ma suppongo che non sia una buona idea in nessun modo dato che potrebbe avere un impatto sui risultati delle prestazioni).

Hanno anche un progetto open source chiamato LoadUI, è stato progettato per l'integrazione con SoapUI, tuttavia è possibile collegarlo al proprio strumento di test del client. Non ho idea di quanto sforzo costerebbe.

Questi sono gli strumenti che conosco, ma ci sono gli strumenti di test distribuiti many more. Sebbene la maggior parte di essi sia effettivamente destinata ai test delle basi web, spesso sono abbastanza estensibili per dare il via a un diverso framework di test (basato su GUI) (il mio preferito è QAliber) che esegue i test sull'app client.

+0

Eccellente - molto più facile trovare le cose ora conosco un termine migliore per questo! dare un'occhiata a TestComplete - sembra che possa fare quello che voglio dal blurb sul loro sito Web. – MrKWatkins

+0

Sembra che TestComplete potrebbe non essere l'ideale per me, in quanto sembra più orientato per comprando clic e simili, mentre ho bisogno di alcuni client per connettersi tramite un'API. Continuerà a cercare ma probabilmente tornerà a scrivere il mio ... Ancora grazie per la risposta - ha colpito il chiodo proprio sulla testa. – MrKWatkins

1

Si prega di controllare al seguente link.Questo può aiutare. http://msdn.microsoft.com/en-us/library/aa337591.aspx

Immagino che otterrete la funzione anche in VS2008 ma per l'ultima edizione.

+0

Il link che hai inviato è solo per test delle prestazioni Web - la mia applicazione non è un sito web. – MrKWatkins

+0

Controlla se questo help.http: //msdn.microsoft.com/en-us/library/ms243153.aspx qui è un esempio del framework in uso: http://blogs.msdn.com/b/edglas /archive/2006/02/06/525614.aspx –

+1

Non ho nemmeno Ultimate Edition. :( – MrKWatkins

1

non posso davvero dire se c'è un ambiente di test per uno scopo così specifico, ma forse si potrebbe utilizzare una semplice applicazione console (dal momento che l'idea principale è quello di testare le prestazioni del server)? È possibile effettuare più chiamate al server in thread diversi e utilizzare, ad esempio, la classe Stopwatch per misurare i tempi di risposta.

Oppure, è possibile provare a sovraccaricare il servizio semplicemente aumentando il numero di chiamate (probabilmente il servizio rallenterà prima che il threadpool esaurisca i thread?).

+0

Posso scrivere qualcosa per fare le misurazioni da solo, ma speravo che esistesse un framework che già lo fa – MrKWatkins

4

A mia conoscenza, tale framework non esiste attualmente (ed è probabile che non esisterà perché tutti gli scenari sono così diversi). Perché "Performance" significa cose diverse per persone diverse e progetti diversi, di solito devi girare il tuo. Fortunatamente, con l'avvento di .NET4 e del TPL questo è diventato più facile che mai.

ci sono tre aspetti di un test delle prestazioni deve coprire:

  1. Definire "Load"
  2. Misura "Performance"
  3. valutare i risultati

Come potete immaginare, sia di queste sono definizioni totalmente lassiste. Il carico può essere misurato in Richieste al secondo, Utenti connessi, ecc ... Le prestazioni possono essere misurate in Tempo di risposta, Utilizzo memoria ... si ottiene l'immagine.

Quindi il primo passo è definire un "carico unitario", che puoi facilmente scalare. Ad esempio, è possibile creare una classe ClientUnitLoad, che simula un client e esegue periodicamente azioni contro il proprio servizio. Lo TPL semplifica la scalatura del tuo ClientUnitLoad (eccetto ovviamente il vincolo di vincoli hardware).

Il passaggio successivo consiste nel misurare le prestazioni. Il modo in cui si misura molto dipende dalla metrica che si desidera raccogliere: il cronometro semplice è valido per il 90% dei casi ma può misurare solo il tempo. La creazione di un'infrastruttura di raccolta di traccie e metriche personalizzata ne vale sicuramente la pena, in quanto sarà necessario anche in produzione per verificare che il sistema funzioni come previsto nel mondo reale.

L'ultimo passaggio consiste nel valutare le metriche. Il problema più grande con Performance Test è che: a) sono lenti e b) inaffidabili. Non c'è modo intorno a questo. In generale, sono necessarie ampie dimensioni del campione (ripetute corse di prova) e una sorta di analisi statistica sulle metriche per ignorare i valori anomali. I risultati elaborati dovrebbero quindi essere confrontati con una previsione di prestazione configurabile.

A seconda del livello di sofisticazione desiderato, tale baseline delle prestazioni può avere semplici criteri di accettazione (come: Repsonse Time under 100ms) o criteri specifici avanzati (come ad esempio: Repsonse Time non diminuisce di oltre il 10% quando il la quantità di utenti registrati è 10 vs 1).

+0

Purtroppo è tutto ciò che sto provando per evitare di scrivere! (Sono pigro, lo so ...) Dato il numero di framework web in cui è possibile inserire codice specifico per le tue applicazioni, speravo che ci sarebbe stato un framework non web da usare che potesse fare molto la gamba funziona per me. – MrKWatkins

1

http://blog.maartenballiauw.be/post/2008/02/code-performance-analysis-in-visual-studio-2008.aspx

Disponibile in Developer e Team-based Visual Studio 2008. Penso che la funzione è stata migliorata in Visual Studio 2010 però.

Devo chiarire che questo non fornisce supporto per tutti i casi di test che si desidera eseguire. Dovresti scrivere quella logica tu stesso in un progetto separato, impostarlo come progetto di avvio, quindi eseguire l'analisi delle prestazioni.

+0

Non sto ancora cercando il profilo a livello di codice, misure più generali come "quanti utenti possono prendere il mio sistema". – MrKWatkins

0

Ho fatto alcune prestazioni mette alla prova qualche tempo fa in un'applicazione client/server utilizzando Microsoft Visual Studio Load Test

Quando si aggiunge unit test per un test di carico, si esercita la performance di server basato su non-Web componenti

dovete codificare i vostri generatori di carico come "test di Visual Studio Unit", in modo che poi li è possibile aggiungere nel progetto Load test.

Problemi correlati