2010-07-30 5 views
1

Je travaille avec Selenium afin de créer des tests d'équilibrage de charge sur un serveur web. Le site Web a un nom d'utilisateur/mot de passe et afin de travailler avec ceci j'ai un dossier de csv rempli des combinaisons de mot de passe de nom d'utilisateur. Le problème est que j'utilise la fonction aléatoire dans Javascript pour sélectionner une ligne du fichier csv et remplir la fonctionnalité de connexion ou les détails d'enregistrement.Selenium avec BrowserMob.com

var csv = browserMob.getCSV("pickStickEmails.csv"); 
var row = csv.random(); 
var Email = row.get("email"); 
var Password = row.get("password"); 

selenium.type("ctl00_StandardMainBodyPlaceHolder_ctl00_TextBoxEmail", Email); 
selenium.type("ctl00_StandardMainBodyPlaceHolder_ctl00_TextBoxEmailConfirm", Email); 
selenium.type("ctl00_StandardMainBodyPlaceHolder_ctl00_TextBoxPassword", Password); 
selenium.type("ctl00_StandardMainBodyPlaceHolder_ctl00_TextBoxPasswordConfirm", Password); 

Cela soulève évidemment des problèmes lors de l'enregistrement si le même enregistrement est sélectionné deux fois au cours d'une exécution planifiée. Évidemment avec la situation de connexion si un enregistrement n'est pas sélectionné lors de l'enregistrement et est ensuite sélectionné sur un test qui nécessite un compte existant, le test échoue car il n'existe pas.

Ma question est, est-il possible de faire en sorte que browserMob parcoure les enregistrements un à la fois? De toute évidence, lorsque browserMob commence un test de charge, il augmente jusqu'à 10 utilisateurs utilisant le site Web à la fois chaque exécution du script je suppose?

J'ai écrit le test avec Selenium-RC en C# avec NUnit et j'ai lu le fichier csv dans une liste, puis itéré dans la liste. Évidemment, cela entraîne chaque utilisateur après l'autre et ne simule pas plusieurs utilisateurs sur le site en même temps.

Un conseil à ce sujet serait grandement apprécié.

Merci,

Jon

Répondre

0

Je pense que cela pourrait être un moyen d'obtenir un enregistrement unique pour chaque utilisateur lors d'un test de charge:

var csv = browserMob.getCSV("pickStickEmails.csv"); 

var rowNumbers = new Array(); 
for(i = 0; i <= csv.size(); i++) 
{ 
    rowNumbers.push(i); 
} 

var uniqueRowNumber = rowNumbers[browserMob.getUserNum()]; 
var row = csv.get(uniqueRowNumber); 

var Email = row.get("email"); 
var Password = row.get("password"); 

selenium.type("ctl00_StandardMainBodyPlaceHolder_ctl00_TextBoxEmail", Email); 
selenium.type("ctl00_StandardMainBodyPlaceHolder_ctl00_TextBoxEmailConfirm", Email); 
selenium.type("ctl00_StandardMainBodyPlaceHolder_ctl00_TextBoxPassword", Password); 
selenium.type("ctl00_StandardMainBodyPlaceHolder_ctl00_TextBoxPasswordConfirm", Password); 

Il crée essentiellement un tableau de numéros qui agissent comme des numéros de ligne pour le fichier csv. Ensuite, il utilise simplement la fonction get() sur le CsvTable au lieu de aléatoire en utilisant le nombre unique sélectionné à partir de votre suggestion.

Merci pour les conseils!

3

Pour appliquer le paramétrage unique, vous devez appeler browserMob.getUserNum() car cela obtenir le numéro d'utilisateur pour ce noeud qui est en train de traiter votre test. Vous pouvez le voir dans leur help. J'ai mis à jour votre code à la façon dont je pense qu'il devrait ressembler. Devrais signifie que je ne l'ai pas testé :)

var csv = browserMob.getCSV("pickStickEmails.csv"); 
var row = browserMob.getUserNum(); 
var Email = row.get("email"); 
var Password = row.get("password"); 

selenium.type("ctl00_StandardMainBodyPlaceHolder_ctl00_TextBoxEmail", Email); 
selenium.type("ctl00_StandardMainBodyPlaceHolder_ctl00_TextBoxEmailConfirm", Email); 
selenium.type("ctl00_StandardMainBodyPlaceHolder_ctl00_TextBoxPassword", Password); 
selenium.type("ctl00_StandardMainBodyPlaceHolder_ctl00_TextBoxPasswordConfirm", Password); 
+0

J'ai regardé la documentation de BrowserMob et ils utilisent cette fonction pour référencer un tableau: var usernames = ['joe', 'meg', 'pat', 'chris', 'rob', 'beth']; var username = noms d'utilisateur [browserMob.getUserNum()]; Il semble que le long des lignes droites cependant var row = browserMob.getUserNum() n'a aucune référence à la variable CSV créée sur la ligne avant de signifier qu'il ne sélectionne rien. J'ai essayé de passer le fichier csv comme argument à getUserNum, et csv.getUserNum à la fois en vain aucune idée? –