負荷のかかる状態でサイトをテストしようとしています。私は、間違ったタイトルがいくつかの機会に現れていることを知っています。これは、スレッド問題が発生している可能性があることを示しています。私は、ローカルサーバーにこのWeb要求を発行しています単体テスト:重いサーバー負荷をローカルサーバーに複製する
[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);
}
注意:これを解決するために、私は、セットアップ、次のテストをしました。この場合、テストは順次実行されるため、このテストは常に成功するため、一度に1つのリクエストしか発生しません。ライブサーバーをターゲットにするURLを変更すると、要求が失敗し、重い負荷で問題が発生していることが示されます。
私はこのテストをどのように変更して、私のローカルサーバーで重い負荷を複製できるようになったのだろうと思っていました。このようにして、ライブサイトを混乱させることなく、さまざまな修正を試すことができます。読んだ後thisスレッド。私は、次を思い付く管理:
[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);
}
私はそれがエラーを投げたこのテストを実行したときしかし、「テストの実行中にエージェントプロセスを停止しました。」。私が間違ってやっていることを誰かに見せることができたら、私はそれを感謝します。ありがとう
ケイは、あなたは、このような[AB](HTTPなどのツールを使用します。 org/docs/2.0/programs/ab.html)または[JMeter](http://en.wikipedia.org/wiki/JMeter)? – gagabu