2012-07-17 2 views
2

Je voudrais lancer le test de charge de l'une des actions POST dans mon application web. Le problème est que l'action peut être terminée uniquement si elle reçoit une adresse e-mail unique dans les données POST. Je généré script WCAT avec quelques milliers demande chacun avec e-mail unique, comme:Randomisation de test de charge: comment configurer WCAT pour utiliser un scénario différent pour chaque client virtuel?

transaction       
    {         
    id = "1";  
    weight = 1; 
    request 
    { 
     verb = POST; postdata = "Email=test546546546546%40loadtest.com&..."; 
     setheader { name="Content-Length"; value="..."; 
    } 
    // more requests like that 
    } 

Mon fichier de paramètres UBR est comme:

settings 
{ 
    counters 
    { 
     interval = 10; 
     counter = "Processor(_Total)\\% Processor Time"; 
     counter = "Processor(_Total)\\% Privileged Time"; 
     counter = "Processor(_Total)\\% User Time"; 
     counter = "Processor(_Total)\\Interrupts/sec"; 
    } 
    clientfile  = "<above-wcat-script>"; 
    server   = "<host name>"; 
    clients  = 3; 
    virtualclients = 100; 
} 

Quand je lance le test 3x100 = 300 clients commence à envoyer des demandes, mais ils le font dans le même ordre, donc la première requête du premier client est traitée, et les 299 requêtes suivantes des autres clients ne sont plus uniques. Ensuite, la deuxième requête d'un client est traitée et 299 demandes identiques provenant d'autres clients ne sont pas uniques. J'ai besoin d'un moyen de randomiser les demandes ou de les exécuter dans un ordre différent ou de mettre en place des scripts de scénario distincts pour chaque client virtuel afin que chaque requête porte une adresse e-mail unique. Est-il possible de faire ça avec WCAT? Ou peut-être qu'il existe un autre outil qui peut faire un tel test?

Répondre

3

Avez-vous envisagé d'utiliser la fonction interne WCAT rand(x,y) pour ajouter un entier aléatoire à l'adresse électronique? En faisant cela, vous pourriez éventuellement avoir une seule transaction avec une seule requête qui utilise une adresse email aléatoire. Ainsi, au lieu de créer manuellement (disons) 1000 requêtes avec des adresses e-mail uniques, vous pouvez utiliser la seule transaction randomisée 1000 fois.

Votre nouvelle transaction aléatoire pourrait ressembler à ceci:

transaction       
    {         
    id = "1";  
    weight = 1; 
    request 
    { 
     verb = POST; 
     postdata = "Email=" + rand("100000", "1000000") + "@loadtest.com&..."; 
     setheader { name="Content-Length"; value="..."; 
    } 
    } 

Si vous utilisez rand(x,y) ne peut vous faire pas assez au hasard puis expérimenter l'utilisation de fonctions supplémentaires pour rendre les données plus aléatoire. Peut-être quelque chose comme ceci:

postdata = "Email=" + rand("100000", "1000000") + "@loadtest" + clientindex() + vclientindex() + ".com&..."; 

Vous pouvez find the WCAT 6.3 documentation here, y compris une liste des fonctions internes qui sont disponibles. Si les fonctions intégrées ne suffisent pas, vous pouvez même créer les vôtres.

+1

c'est exactement ce que je cherchais. – PanJanek

+1

L'utilisation de rand(), clientindex() et vclientindex a également fait l'affaire, avec une petite modification; les nombres dans rand() devraient être des chaînes comme ceci 'rand ("100000", "1000000")'. Pour une raison quelconque, il m'a fallu une heure pour comprendre cela. –

+0

@DJvanWyk, merci d'avoir remarqué les guillemets manquants dans la fonction rand(). J'ai corrigé l'erreur dans ma réponse. –

Questions connexes