Domanda

Sto cercando di caricare un servizio Web.

Ho un metodo semplice che prende 2 parametri che vengono inviati al servizio Web e restituisce la risposta e ho creato un test unitario da questo metodo.

Perché I Vuoi Need Per testare vari ingressi diversi per testare efficacemente il servizio, ho configurato un CSV con ~ 1000 righe come DataSource per il test dell'unità. .

Posso eseguire questo test unitario e girerà tutte le righe, chiamando sequenzialmente il servizio Web con valori diversi.

Comunque , questo non è quello di cui ho bisogno. I Bisogno Ogni riga per corrispondere a un utente diverso su un file diverso, utilizzando la configurazione del test di caricamento per includere i tempi di riferimento, rampa Utenti con carico di fase, configurazione della miscela di prova, ecc.

Posso ottenere questo rimuovendo la mia origine dati dal test dell'unità e dai valori di codifica rigida. Ma questo è un test fondamentalmente imperfetto: per > Very Test del servizio Web, ho bisogno di ciascun utente per inviare valori diversi e ottenere risultati diversi.

...

Allora, come posso collegare un'origine dati su un test di carico e avere quel test di carico Avviare l'istanza di ciascun utente di un test unitario con valori diversi?

È stato utile?

Soluzione

Ho finito usando questa risposta come guida: https://stackoverflow.com/a/7813465/237723

anziché creare un test unitario dal metodo dell'app console e dal test di caricamento test dell'unità, ho creato un semplice modulo Web ASP.NET che ha preso gli ingressi e chiamato il servizio Web. Ho registrato un test delle prestazioni Web utilizzando questo nuovo modulo e ha creato un test di carico per eseguire quel wptest.


.
    .
  1. Dopo aver registrato il test, ho aggiunto il CSV come DataSource a questo test.

  2. Ci sono state 2 "richieste" registrate: il post iniziale e post successivo. Assicurati di lasciarli entrambi ! Ho rimosso la richiesta Favicon.ico perché non esisteva. (Queste precauzioni possono essere evitabili)

  3. espandendo la richiesta di post, ho modificato le proprietà dei parametri di TextBox che corrisponde ai miei 2 ingressi del servizio Web per ottenere i propri valori dalla colonna appropriata nel CSV.

  4. Ho cambiato il metodo di accesso di DataSource per "Non spostare automaticamente il cursore" (è necessario espandere il DataSource sulla tabella e modificare le sue proprietà tramite il tasto destro / f4.)

  5. Ho quindi creato il webtestplugin (dalla risposta collegata) che sposta manualmente il cursore in base all'utente (un int) in corso. Ciò corrisponderà all'istanza dell'utente il test di carico gira in alto secondo il piano Step. Dopo aver creato questa classe, crea il progetto e aggiungerlo al test di prestazioni web.


  6. .
    public class webtestplugin : WebTestPlugin
    {
        public override void PreWebTest(object sender, PreWebTestEventArgs e)
        {
            base.PreWebTest(sender, e);
            e.WebTest.MoveDataTableCursor("DataSource1", "addresses#csv", e.WebTest.Context.WebTestUserId);                        
        }
    }
    
    .

Altri suggerimenti

Solo per rispondere alla tua domanda, sono abbastanza sicuro che questo non può essere fatto fuori dalla scatola di Mstems e Nunit ( Questo approccio non si attacca in questo scenario).


.

Ma, Imho, non andare lì ... Dalla mia esperienza, simulando ~ 1000 utenti di una singola macchina producono risultati cattivi , perché il test incontrerà tutti i tipi di client Limiti - Problemi del pool di filo, problemi di traffico in uscita e in entrata, ecc. Non sto dicendo che questo non può essere superato, ma è abbastanza contorto da considerare un approccio diverso.

In realtà non consiglio di utilizzare gli strumenti di prova di caricamento (ce ne sono molti là fuori) in questo caso, in quanto è abbastanza semplice scrivere un piccolo strumento di propri e saltare i problemi di configurazione e le curve di apprendimento di un 3 ° festa.

Quello che consiglio, sta scrivendo uno strumento e correndo da macchine separate. Non deve essere gestito da un framework di test (non riesco a chiamarlo un test unitario, perché non è), un'app console farà il trucco. Ecco alcuni codice per iniziare:

private ConcurrentBag<string> logs = new ConcurrentBag<string>();

public void GetLoad(int numberOfUsers, List<string> myParams)
{
    var users = new string[numberOfUsers];
    for (int i = 0; i < numberOfUsers; i++)
    {
        users[i] = string.Format("LoadTest{0}", i + 1);
    }

    var userThreads = new List<Thread>();
    for (int i = 0; i < numberOfUsers; i++)
    {
        int index = i;
        userThreads.Add(new Thread(()=> CallWebService(users[index], myParams[index])));
    }

    Parallel.ForEach(userThreads, thread=>thread.Start());
    foreach (var userThread in userThreads)
    {
        userThread.Join();
    }
    var outputFilename = string.Format("LoadTest.{0}Users.txt", numberOfUsers);
    File.AppendAllLines(outputFilename, logs);
}
.

L'immagine mostra mostra dove effettuare la modifica.

 Inserire l'immagine Descrizione qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top