2013-01-09 9 views
6

Die Leute hier verwenden Visual Studio für Leistungstests. Jetzt gibt es ein paar kleine Probleme mit einigen Javascript-Teilen: Sie sind nicht in der Lage, die Leistung des Javascript-Teils mit visuellen Studio-Web-Performance-Tests zu überprüfen.JS-Variable in C# lesen/JS-Variable an Visual Studio-Leistungstest weiterleiten?

Ich habe noch nie einen Visual Studio Performance Test benutzt, also habe ich wirklich keine Ahnung, wie man dort Sachen ausbügelt, aber ich sah, dass es viele Lösungen für die Web + Js Performance Check gibt. Ich dachte, wir könnten andere Tools und Frameworks verwenden, aber das ist nicht erlaubt. Die Leute hier wollen Visual Studio für alles nutzen. Das macht die Sache schwieriger.

Wenn ich müsste, die JavaScript-Performance überprüfen, würde ich so etwas wie dies leicht tun:

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

Am Ende ich in der Variablen bench mein Ergebnis sehen. Jetzt muss ich diese Variable "irgendwie" an den visuellen Studio-Performance-Test übergeben? Über C#? Oder wie funktioniert das Zeug? Könnte das eine gute Lösung sein? Irgendwelche anderen Ideen?

Antwort

5

Ich glaube nicht, dass es möglich ist, da die VS Performance Test Engine überhaupt keinen clientseitigen Code ausführt, sondern nur auf HTTP-Ebene. So würde der Code, den Sie als Beispiel zur Verfügung gestellt haben, niemals ausgeführt werden.

Werfen Sie einen Blick hier für den Beweis - http://msdn.microsoft.com/en-us/library/ff520100.aspx

Da der Web-Performance-Test Engine bei der HTTP-Schicht funktioniert, ist es nicht Client-seitiges Scripting wie JavaScript oder ActiveX-Steuerelemente ausführen . Web Performance Tests beziehen sich auf das Generieren von Last auf einem Server. Daher ist clientseitige Skripterstellung, die nur das Aussehen einer Webseite betrifft, für den Web Performance Test nicht signifikant. Clientseitiges Scripting, das Parameterwerte oder Ergebnisse in zusätzliche HTTP-Anforderungen wie AJAX festlegt, wirkt sich auf die Auslastung auf dem -Server aus und erfordert möglicherweise das manuelle Ändern der Webleistung Test, um das Skripting zu simulieren.

Ein verbreiteter Irrtum ist, dass wegen Aufnahme in Internet Explorer auftritt, und die Web-Performance-Testergebnis-Viewer zeigt die Ergebnisse in einer Browser-Steuerung, Webleistungstests irgendwie Verwendung von Internet Explorer ausgeführt werden müssen. Das ist nicht der Fall. Alle Anfragen werden direkt mit der Web Performance Test Engine ausgeführt; Keine Interaktion mit Internet Explorer oder einem anderen Browser tritt auf. Die Web Performance Test Engine kommuniziert direkt mit dem Ziel-Webserver unter Verwendung von Standard-HTTP-Anforderungs-/Antwortnachrichten .

So ist die einzige Möglichkeit wäre, andere Lösungen zu verwenden JavaScript-Performance zu überprüfen oder eine eigene Implementierung auf Basis von Selen zum Beispiel. Ich denke, es ist möglich, solche Messungen mit Selenium RC zu automatisieren, das von Visual Studio als Teil eines Builds ausgeführt werden kann (wenn Sie Visual Studio für alles verwenden müssen).

2

Sicher kann dies funktionieren, aber ich bin mir nicht sicher, ob es direkt mit VS-Leistungstest überbrücken kann. Eine Alternative könnte nur Ihre eigenen erstellen, wenn Sie sich für die Integration mit C# und VS zu verlieren.

In diesem Fall würde die Frage dazu führen, wie JS und C# zu überbrücken. Dies kann mit dem gemacht werden.NET-Plattform, wenn Sie Ihre JS auf einer Seite einbetten und dann mit einem WebBrowser-Steuerelement ausführen. In Ihrem Javascript können Sie Informationen an eine C# -Anwendung zurückgeben, indem Sie auf window.external verweisen. Hier ist ein Beispiel in Ihrer javascript:

window.external.performanceCallback([yourdata]); 

eine performanceCallback() -Methode in der Klasse aufrufen, die Ihr Webbrowser-Steuerelement Gehäuse. Bevor Sie dies jedoch tun können, müssen Sie Ihre Klasse für die Seite sichtbar machen, die Ihr Webbrowser öffnet (window.external ist die instanzierte Klasse, die Sie referenzieren).

So window.external zu setzen, wenn Sie WebBrowser in C# erstellen möchten:

webBrowser1.ObjectForScripting = this; 

Darüber hinaus haben Sie die Klasse mit dem Attribut ComVisible

[ComVisible(true)] 

Als markieren Erinnerung, das WebBrowserControl hängt von der Version auf IE ab, die Sie auf Ihrem Computer installiert haben. Seien Sie also vorsichtig bei der Versionierung, Javascript wird nur in dem Umfang funktionieren, wie es seine Version von IE handhaben kann. Stellen Sie sicher, dass Ihr JS auf allen vernünftigen IE-Versionen ausgeführt wird.

1

Sie JavaScript nicht direkt überwachen kannst, aber man kann das JavaScript zu nennen einen C# Web-Service mit Zeitangaben in regelmäßigen Abständen zu erhalten. (Zugegeben, fügt dieses zusätzlichen Aufwand, was auf jeden Fall die Ergebnisse verfälschen, und kann den gesamten Zweck zunichte machen. Wenn Sie diesen Test in einem LAN tun, sollte die Latenz etwas gemildert werden.)

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#:

asmx Service oder MVC-Controller oder irgendetwas, das

eine ajax-Post akzeptiert
Verwandte Themen