2013-01-09 5 views
6

ここでは、パフォーマンステストにVisual Studioを使用している人がいます。現在、いくつかのjavascriptの部分には小さな問題があります。ビジュアルスタジオのWebパフォーマンステストでjavascriptの部分のパフォーマンスをチェックすることはできません。C#でJS変数を読み込む/ JS変数をビジュアルスタジオのパフォーマンステストに転送しますか?

私はビジュアルスタジオのパフォーマンステストを一度も使用していませんでした。そこで、どのようにベンチを作るかわかりませんでしたが、Web + jsのパフォーマンスチェックには多くのソリューションがあります。私は他のツールやフレームワークを使うことができると考えましたが、許可されていません。ここの人々はすべてのためにビジュアルスタジオを使いたい。これは物事をより厄介にしています。

私はjavascriptのパフォーマンスをチェックしなければならない場合は、私は簡単にこのようなものだろう:私は、変数bench私の結果で見ることができます終わり

var begin = new Date(); 
functionA(); 
functionB(); 
functionX(); 
var end = new Date(); 
var bench = end - begin; 

を。今、私はこの変数をVisual Studioのパフォーマンステストに「何とか」渡す必要があります。 Via C#?または、このようなことはどのように機能していますかこれは良い解決策でしょうか?他のアイデア?

答えて

5

VS Performance Test Engineはクライアント側のコードをまったく実行しないため、HTTPレベルでのみ動作します。例として提供したコードは決して実行されません。

は、証明のためにここを見てみましょう - http://msdn.microsoft.com/en-us/library/ff520100.aspx

Webパフォーマンステストエンジンは、HTTP層で動作するので、それは JavaScriptやActiveXの コントロールのようにクライアント側のスクリプトを実行しません。 Webパフォーマンス・テストは、サーバーの負荷を に生成することに関係しています。したがって、 のWebページの外観にのみ影響するクライアント側スクリプトは、Webパフォーマンス テストでは重要ではありません。 AJAXなどの追加のHTTP要求でパラメータ値または結果を設定するクライアント側のスクリプトは、 サーバーの負荷に影響し、Webパフォーマンス テストを手動で変更してスクリプトをシミュレートする必要があります。

一般的な誤解は、記録がインターネット Explorerで発生し、Webパフォーマンステスト結果ビューアーが表示され、ブラウザコントロールで をもたらしているため、Webパフォーマンステストは何とか Internet Explorerを使用して実行しなければならないということです。これはそうではありません。すべてのリクエストはWebパフォーマンステストエンジンを使用して で直接実行されます。 との対話なしInternet Explorerまたは他のブラウザが発生します。 Webパフォーマンス テストエンジンは、 標準のHTTP要求/応答メッセージを使用して、ターゲットWebサーバーと直接通信します。

唯一の方法は、他のソリューションを使用してjavascriptのパフォーマンスをチェックするか、たとえばSeleniumに基づいて独自に実装することです。 Visual Studioをビルドの一部として実行できるSelenium RCを使用してそのような測定を自動化することが可能だと思います(Visual Studioをすべて使用する必要がある場合)。

2

確かにこれは動作しますが、VS性能テストと直接ブリッジできるかどうかはわかりません。代わりに、C#とVSと統合することができなくても、あなた自身のものを作成することができます。

この場合、問題はJSとC#を橋渡しする方法につながります。これは、で行うことができます。JSをページに埋め込み、それをWebブラウザコントロールで実行する場合は、.NETプラットフォームを使用します。あなたのjavascriptでは、window.externalを参照して、C#アプリケーションに情報を渡すことができます。ここにあなたのjavascriptの例である:

window.external.performanceCallback([yourdata]); 

あなたのWebBrowserコントロールを収容しているクラスのperformanceCallback()メソッドを呼び出すこと。しかし、これを行う前に、Webブラウザが開いているページ(参照しているインスタンス化されたクラスであるwindow.external)にクラスを表示させる必要があります。あなたは、C#でWebBrowserを作成しているとき

だから、window.external設定するには、:

webBrowser1.ObjectForScripting = this; 

はまた、あなたが同様のComVisible属性

[ComVisible(true)] 

を持つクラスをマークする必要がありWebBrowserControl は、コンピュータにインストールしたIEのバージョンによって異なります。したがって、バージョン管理には注意が必要です.JavaScriptは、IEのバージョンが処理できる範囲でのみ実行されます。 JSがIEのすべての合理的なバージョンで動作することを確認してください。

1

を確認してください。 (確かに、これは間違いなく結果を歪曲し、全体の目的を否定するかもしれない、余分なオーバーヘッドが追加されます。あなたはLAN上でこのテストをやっている場合は、待ち時間がやや緩和されなければならない。)

はJavaScript

var log = function (message) { 
    $.ajax('/path/to/log', { 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     data: JSON.stringify({message:message}) 
    }); 
} 
// then just call it like so in appropriate places: log('started foo at 12:34:56'); 

C#の:Ajaxのポストを受け入れ

ASMXサービスやMVCコントローラか何か

関連する問題