javascript - Läsa JS-variabel i C#/Vidarebefordra JS-variabel till Visual Studio prestandatest?
Folk här använder Visual Studio för prestandatestning. Nu finns det några små problem med vissa Javascript-delar: de kan inte kontrollera prestandan för Javascript-delen med Visual Studio web-prestandatestning.
Jag har aldrig använt Visual Studio prestandatest, så jag har verkligen ingen aning om hur man testar saker där, men jag såg att det finns många lösningar för web + js prestandakontroll. Jag trodde att vi kunde använda andra verktyg och ramverk, men det är inte tillåtet. Folk här vill använda Visual Studio för allt. Så det här gör saker mer komplicerade.
Om jag skulle behöva kontrollera JavaScript-prestandan, skulle jag enkelt göra något sådant här:
var begin = new Date();
functionA();
functionB();
functionX();
var end = new Date();
var bench = end - begin;
I slutet kan jag se i variabeln bench mitt resultat. Nu behöver jag bara på något sätt skicka denna variabel till Visual Studio prestandatest? Via C#? Eller hur fungerar det här? Skulle detta kunna vara en bra lösning? Andra idéer?
Svar #1
Jag tror inte att det är möjligt eftersom VS Performance Test Engine inte kör någon klientkod alls, det fungerar endast på HTTP-nivå. Så koden du gav som ett exempel skulle aldrig köras.
Ta en titt här för beviset - http://msdn.microsoft.com/en-us/library/ff520100.aspx
Eftersom Web Performance Test Engine fungerar på HTTP-nivån, kör den inte klient-sidans skript som JavaScript eller ActiveX-kontroller. Web Performance-tester handlar om att generera belastning på en server. Därför är klient-sidans skript som endast påverkar utseendet på en webbsida inte betydelsefullt för Web Performance-testet. Klient-sidans skript som sätter parametervärden eller resulterar i ytterligare HTTP-förfrågningar, såsom AJAX, påverkar dock serverns belastning och kan kräva att du manuellt modifierar Web Performance-testet för att simulera skripten.
En vanlig missuppfattning är att eftersom inspelning sker i Internet Explorer, och Web Performance Test Result Viewer visar resultat i en webbläsarkontroll, måste webbpresentationstester på något sätt köras med Internet Explorer. Så är dock inte fallet. Alla förfrågningar körs direkt med Web Performance Test Engine; ingen interaktion med Internet Explorer eller någon annan webbläsare sker. Web Performance Test Engine kommunicerar direkt med den målwebbservern med hjälp av standard HTTP-förfrågning/-svar-meddelanden.
Så det enda sättet skulle vara att använda andra lösningar för att kontrollera JavaScript-prestanda, eller implementera din egen, baserad på Selenium till exempel. Jag tror att det är möjligt att automatisera sådana mätningar med Selenium RC som kan köras från Visual Studio som en del av en build (om ditt krav är att använda Visual Studio för allt).
Svar #2
Visst, detta kan fungera, men jag är inte säker på om det direkt kan kopplas till VS prestandatest. Ett alternativ kan helt enkelt vara att skapa ditt eget om du verkligen vill integrera med C# och VS.
I så fall skulle frågan leda till hur man kan koppla JS och C#. Detta kan göras med .NET-plattformen om du bäddar in din JS på en sida och sedan kör den med en WebBrowser-kontroll. I din JavaScript kan du skicka information tillbaka till en C#-applikation genom att referera till window.external. Här är ett exempel i din JavaScript:
window.external.performanceCallback([yourdata]);
att kalla på en performanceCallback()-metod i klassen som innehåller din WebBrowser-kontroll. Men innan du kan göra det måste du göra din klass synlig för sidan som din webbläsare öppnar (window.external är den instanserade klassen som du refererar till).
Så, för att ställa in window.external när du skapar webBrowser i C#:
webBrowser1.ObjectForScripting = this;
Dessutom måste du markera klassen med ComVisible-attributet
[ComVisible(true)]
Som en påminnelse beror WebBrowserControl på vilken version av IE som du har installerad på din dator. Så var försiktig med versionering, javascript kommer bara att fungera i den utsträckning som hans/hennes version av IE kan hantera. Se till att din JS fungerar på alla rimliga versioner av IE.
