J'essaie de tester mon site sous une charge importante. J'ai trouvé que le titre incorrect apparaît à certaines occasions, ce qui m'indique que j'ai un problème de threading possible. Pour aider à résoudre ce que je configuration AVONS le test suivant:Test de l'unité: réplication de la charge du serveur lourd avec le serveur local
[TestMethod]
public void Test1() {
var isValid = true;
for (var i = 0; i < 100; i++) {
// Send the request (note Http.WebRequest is a utility method which returns the contents of the page)
var request = Http.WebRequest("http://localhost/SomePage");
var document = new HtmlDocument(); // Html Agility Pack
document.LoadHtml(request.Data);
// Get the required info
var title = document.DocumentNode.SelectSingleNode("//title").InnerText.Trim();
// Test if the info is valid
if (title != "Some Page") {
isValid = false;
break;
}
Thread.Sleep(100);
}
Assert.IsTrue(isValid);
}
Avis Je publie cette demande Web au serveur local. Dans ce cas, ce test passe toujours car le test est séquentiel et par conséquent, une seule requête se produit à la fois. Si je change l'URL pour cibler le serveur live, la requête échoue, ce qui indique qu'un problème existe sous une charge importante. Je me demandais comment je pouvais modifier ce test afin que je puisse reproduire la charge lourde avec mon serveur local. De cette façon, je peux expérimenter avec diverses corrections sans avoir à jouer avec le site en direct. Après avoir lu le fil this. Je parvins viens avec ce qui suit:
[TestMethod]
public void Test1() {
var isValid = true;
var threads = new Thread[100];
for (var i = 0; i < threads.Count(); i++) {
threads[i] = new Thread(() => {
for (var j = 0; j < 10; j++) {
// Send the request
var request = Http.WebRequest("http://localhost/SomePage");
var document = new HtmlDocument();
document.LoadHtml(request.Data);
// Get the required info
var title = document.DocumentNode.SelectSingleNode("//title").InnerText.Trim();
// Test if the info is valid
if (title != "Some Page") {
isValid = false;
break;
}
}
});
}
foreach (var thread in threads) {
thread.Start();
}
foreach (var thread in threads) {
thread.Join();
}
Assert.IsTrue(isValid);
}
Cependant quand je courais ce test, il a jeté l'erreur « Le processus de l'agent a été arrêté alors que le test était en cours d'exécution. ». J'apprécierais que quelqu'un puisse me montrer ce que je fais mal ou suggérer une autre solution. Merci
Cay vous utilisez des outils tels que [ab] (http: //httpd.apache. org/docs/2.0/programs/ab.html) ou [JMeter] (http://en.wikipedia.org/wiki/JMeter)? – gagabu