在C#中读取JS变量/将JS变量转发到visual studio性能测试?

在C#中读取JS变量/将JS变量转发到visual studio性能测试?,c#,javascript,.net,visual-studio-2010,performance,C#,Javascript,.net,Visual Studio 2010,Performance,这里的人们正在使用VisualStudio进行性能测试。现在,一些javascript部分存在一些小问题:它们无法通过VisualStudioWeb性能测试检查javascript部分的性能 我从来没有使用过VisualStudio性能测试,所以我真的不知道如何在那里测试东西,但我看到有很多用于web+js性能检查的解决方案。我认为我们可以使用其他工具和框架,但这是不允许的。这里的人们想用visualstudio做任何事情。所以这让事情变得更加棘手 如果我必须检查javascript性能,我可以

这里的人们正在使用VisualStudio进行性能测试。现在,一些javascript部分存在一些小问题:它们无法通过VisualStudioWeb性能测试检查javascript部分的性能

我从来没有使用过VisualStudio性能测试,所以我真的不知道如何在那里测试东西,但我看到有很多用于web+js性能检查的解决方案。我认为我们可以使用其他工具和框架,但这是不允许的。这里的人们想用visualstudio做任何事情。所以这让事情变得更加棘手

如果我必须检查javascript性能,我可以轻松地执行以下操作:

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

最后,我可以在变量
bench
中看到我的结果。现在我只需要“以某种方式”将这个变量传递给VisualStudio性能测试?通过C#?或者这东西是怎么工作的?这是一个好的解决方案吗?还有其他想法吗?

我认为这是不可能的,因为VS性能测试引擎根本不运行任何客户端代码,它只在HTTP级别工作。因此,您作为示例提供的代码永远不会运行

看看这里的证据-

因为Web性能测试引擎在HTTP层工作,所以 不像JavaScript或ActiveX那样运行客户端脚本 控制。Web性能测试与在服务器上生成负载有关 服务器。。因此,客户端脚本只影响 网页的外观对Web性能并不重要 测试。设置参数值或导致 其他HTTP请求(如AJAX)确实会影响服务器上的负载 服务器,可能需要您手动修改Web性能 测试以模拟脚本

一个常见的误解是,因为录制发生在互联网上 浏览器,Web性能测试结果查看器显示结果 在浏览器控件中,Web性能测试必须以某种方式使用 Internet Explorer。事实并非如此。所有请求都被执行 直接使用Web性能测试引擎;不与任何人互动 出现Internet Explorer或任何其他浏览器。网络性能 测试引擎使用直接与目标Web服务器通信 标准HTTP请求/响应消息


因此,唯一的方法是使用其他解决方案来检查javascript性能,或者基于Selenium实现自己的解决方案。我认为可以使用Selenium RC自动化这些测量,Selenium RC可以作为构建的一部分从Visual Studio运行(如果您的要求是使用Visual Studio进行所有操作)。

确保这可以工作,但我不确定它是否可以直接与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时:

此外,还必须使用ComVisible属性标记该类

[ComVisible(true)]

请注意,WebBrowserControl取决于您在计算机上安装的IE版本。所以在版本控制上要小心,javascript只能在他/她的IE版本能够处理的范围内执行。确保你的JS在所有合理版本的IE上运行。

这是不可能的。请检查你不能直接监控JavaScript,但你可以让JavaScript定期调用带有计时细节的C#web服务。(当然,这会增加额外的开销,这肯定会扭曲结果,并可能否定整个目的。如果您在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#:

asmx服务或MVC控制器或任何接受ajax post的内容

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');