这里的人们正在使用visual studio进行性能测试。现在一些javascript部分存在一些小问题:他们无法使用visual studio web-performance testing来检查javascript部分的性能。
我从未使用过visual studio性能测试,所以我真的不知道如何在那里替补,但我看到有很多web + js性能检查的解决方案。我以为我们可以使用其他工具和框架,但不允许这样做。这里的人们想要将视觉工作室用于一切。所以这让事情变得更加棘手。
如果我必须检查javascript性能,我会轻易做到这样的事情:
var begin = new Date();
functionA();
functionB();
functionX();
var end = new Date();
var bench = end - begin;
最后,我可以在变量bench
中看到我的结果。现在我只需要将这个变量“以某种方式”传递给visual studio性能测试?通过C#?或者这些东西是如何工作的?这是一个很好的解决方案吗?还有其他想法吗?
答案 0 :(得分:5)
我认为这是不可能的,因为VS Performance Test Engine根本不运行任何客户端代码,它仅适用于HTTP级别。因此,您作为示例提供的代码永远不会运行。
在这里查看证明 - http://msdn.microsoft.com/en-us/library/ff520100.aspx
因为Web性能测试引擎在HTTP层工作,所以它 不运行JavaScript或ActiveX等客户端脚本 控制。 Web性能测试涉及生成负载 服务器..因此,客户端脚本只影响 Web页面的外观对Web性能并不重要 测试。设置参数值或结果的客户端脚本 其他HTTP请求(例如AJAX)确实会影响其上的负载 服务器,可能需要您手动修改Web性能 测试以模拟脚本。
一个常见的误解是因为录制发生在互联网上 资源管理器和Web性能测试结果查看器显示结果 在浏览器控件中,Web性能测试必须以某种方式执行使用 IE浏览器。不是这种情况。所有请求都已执行 直接使用Web性能测试引擎;没有互动 发生Internet Explorer或任何其他浏览器。网络性能 测试引擎使用直接与目标Web服务器通信 标准的HTTP请求/响应消息。
因此,唯一的方法是使用其他解决方案来检查javascript性能,或者基于Selenium实现自己的性能。我认为可以使用Selenium RC自动执行此类测量,Selenium RC可以作为构建的一部分从Visual Studio运行(如果您的要求是将Visual Studio用于所有内容)。
答案 1 :(得分:2)
当然这可行,但我不确定它是否能直接与VS性能测试相结合。如果你渴望与C#和VS集成,那么另一种选择就是创建自己的。
在这种情况下,问题将导致如何桥接JS和C#。如果您将JS嵌入页面然后使用WebBrowser控件运行它,则可以使用.NET平台完成此操作。在您的javascript中,您可以通过引用window.external
将信息传递回C#应用程序。以下是javascript中的示例:
window.external.performanceCallback([yourdata]);
在容纳WebBrowser控件的类中调用performanceCallback()方法。但是,在您可以这样做之前,您必须使您的班级对您的webbrowser正在打开的页面可见(window.external是您正在引用的实例类)。
所以,设置window.external,当你在C#中创建webBrowser时:
webBrowser1.ObjectForScripting = this;
此外,您必须使用ComVisible属性
标记该类[ComVisible(true)]
提醒一下,WebBrowserControl 取决于您在计算机上安装的IE上的版本。所以在版本控制时要小心,javascript只会执行他/她的IE版本可以处理的程度。确保你的JS在所有合理的IE版本上运行。
答案 2 :(得分:1)
您无法直接监控JavaScript,但您可以定期使用JavaScript来调用带有时间详细信息的C#Web服务。 (当然,这会增加额外的开销,这肯定会使结果产生偏差,并且可能会使整个目的无效。如果您在局域网上进行此测试,则应该稍微减轻延迟。)
的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服务或MVC控制器或接受ajax帖子的任何内容
答案 3 :(得分:0)