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

本文关键字:JS 变量 visual studio 性能测试 转发 读取 | 更新日期: 2023-09-27 17:51:01

这里的人们正在使用visual studio进行性能测试。现在有一些javascript部分的小问题:他们不能用visual studio web性能测试来检查javascript部分的性能。

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

如果我要检查javascript的性能,我很容易这样做:

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

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

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

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

看这里的证明- http://msdn.microsoft.com/en-us/library/ff520100.aspx

因为Web性能测试引擎工作在HTTP层,它不运行客户端脚本,如JavaScript或ActiveX控制。Web性能测试关注的是产生负载一个服务器. .因此,客户端脚本只影响Web页面的外观对Web性能并不重要测试。设置参数值或结果的客户端脚本附加的HTTP请求(如AJAX)确实会影响web上的负载并且可能需要您手动修改Web性能测试模拟脚本。

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

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

当然这可以工作,但我不确定它是否可以直接桥接VS性能测试。如果你渴望与c#和vs集成,另一种选择就是创建你自己的。

在这种情况下,问题将导致如何桥接JS和c#。这可以在。net平台上完成,如果你将JS嵌入到页面上,然后用WebBrowser控件运行它。在javascript中,你可以通过引用window.external将信息传递回c#应用程序。下面是你的javascript中的一个例子:

window.external.performanceCallback([yourdata]); 

在包含WebBrowser控件的类中调用performanceCallback()方法。然而,在你这样做之前,你必须让你的类对你的网页浏览器打开的页面可见。外部是指您引用的实例化类)。

设置窗口。外部,当你在c#中创建webBrowser:

webBrowser1.ObjectForScripting = this;

另外,你必须用ComVisible属性

标记这个类
[ComVisible(true)]

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

你不能直接监视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 post的

不可能,请查看http://msdn.microsoft.com/en-us/library/ff520100.aspx