Performance IE浏览器的无头自动化,跟踪站点渲染时间

Performance IE浏览器的无头自动化,跟踪站点渲染时间,performance,internet-explorer-7,automation,headless,Performance,Internet Explorer 7,Automation,Headless,我需要监控我的网站为常见任务(登录,搜索等)的呈现时间。我需要一些自动化的东西,可以模拟用户的操作,也就是说,能够计算页面呈现所需的时间。 自动执行示例: 1) 开放式无头IE浏览器 2) 去 3) 输入“stackoverflow” 4) 按提交按钮 5) 启动计时器 6) 等待结果页面完全关闭 渲染 7) 停止计时器 8) 接近IE 9) 记录结果 我需要在服务器运行时将其作为计划任务运行,而无需用户登录 我一直在寻找帮助我这样做的东西。任何人都有这方面的经验或知道任何可以实现这一点的方法吗

我需要监控我的网站为常见任务(登录,搜索等)的呈现时间。我需要一些自动化的东西,可以模拟用户的操作,也就是说,能够计算页面呈现所需的时间。
自动执行示例:

1) 开放式无头IE浏览器

2) 去

3) 输入“stackoverflow”

4) 按提交按钮

5) 启动计时器

6) 等待结果页面完全关闭 渲染

7) 停止计时器

8) 接近IE

9) 记录结果

我需要在服务器运行时将其作为计划任务运行,而无需用户登录


我一直在寻找帮助我这样做的东西。任何人都有这方面的经验或知道任何可以实现这一点的方法吗?

无头自动化的一个选择是使用HtmlUnit。查看此链接了解更多信息:

另一个选项可能是(或一般情况下)。

这取决于您关注的重点、功能或性能

功能 在监视功能时,您的目标是自动确保web应用程序仍然正常工作。通常,这更多的是持续集成过程的一部分,而不是生产监控的一部分。使用HtmlUnit、Selenium或WebDriver可以很好地实现这一点HttpUnit不再被推荐(API级别较低,JavaScript支持不太好,采用较少,bug修复和增强较少)

HtmlUnit模拟浏览器。因此,您永远无法确定应用程序在真实浏览器中的行为是否完全相同。这对于复杂的Ajax应用程序尤其重要。这与FireFox和InternetExplorer之间的所有小的不兼容性相当。优点:无头,易于理解。缺点:存在未被发现的不兼容风险

Selenium远程控制真正的浏览器。在我们的设置中,我们不能无头使用它,尤其是在Internet Explorer中。但如果你把它嵌入到虚拟机中,它就会无头运行。如果您的应用程序可以通过公共互联网访问,您甚至可以使用Selenium网格和来自Amazon弹性云EC2的预配置虚拟机。Selenium的优点:真实世界的兼容性,易于编写脚本。缺点:只在虚拟机中使用Headless,性能开销,更复杂的运行时设置,只在云中模拟并发用户

在版本1.5之前,Selenium使用名为Selenium Core的JavaScript部分来控制浏览器。如果应用程序对JavaScript有安全限制,Selenium可能无法正常工作

WebDriver为每个浏览器使用特定的界面,例如FireFox扩展和internet explorer自动化控件。此外,它还使用操作系统,例如模拟击键。这比Selenium Core更强大、更健壮、更可靠。从Selenium 2.0版开始,WebDriver已集成到Selenium中。但是Selenium 2.0仍然是测试版

演出 您提到了使用计时器进行测量,还提到了渲染时间。在监视web应用程序的性能时,您希望在由于应答时间过长而无法在真实世界中使用应用程序时收到警报

在这种情况下,您通常对以毫秒为单位的精确结果不感兴趣。您仍然可以使用上述工具之一。例如,使用Selenium Core的浏览器比真实世界的浏览器速度慢,但这与持续监控关系不大

如果您绝对需要精确的测量,以上任何一项都不适用。您应该区分客户端持续时间和网络加服务器端持续时间

  • 呈现HTML和执行JavaScript需要客户端持续时间。它不依赖于并发用户的数量。您可以测量一次,例如使用Firebug。您不需要永久监视它

  • 将请求传输到服务器、处理请求、生成响应以及将响应传输到客户端需要网络加服务器端持续时间。它们根据网络使用情况和并发用户的数量而有所不同。例如,您可以使用JMeter准确地测量和监视它们。但是对于复杂的Ajax功能,在JMeter中模拟正确的客户端请求是一项复杂的任务。JMeter的优点:精确的测量,有可能对多个并发用户的应用程序施加压力。缺点:对Ajax的限制,对请求构建的工作量很大


PhantomJS的以下无头IE端口目前处于测试版(v0.2):

这里是一个简短的介绍:

API与PhantomJs相同,因此最终您将能够执行以下操作:

// 1. Create Page Object and navigate to Google
page = require("webpage").create();
page.open("http://www.google.com", function(status) {
    if ( status === "success" ) {
        // 2. Inject jQuery for DOM operations
        page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
            // 3. Start Timer
            console.log('Start Timer: ' + (new Date()).getTime());
            // 4. Type string and click search
            page.evaluate(function() {
                $(("input[type=text")[0]).val("stackoverflow");
                $("button:contains('Google Search')).click();
            });
            // 5. Wait for loading and end timer.
            page.onLoadFinished = function() {
               console.log('Load Finished. End Timer:' + (new Date()).getTime());
               phantom.exit();
            };
        });
    }
});

(+1)是的,这是用户操作自动化的主要工具。在没有任何用户登录的情况下,这是否可以作为计划任务工作?@ajoe AFAIK,是的,但我不是100%确定(至少有一个Hudson插件可用,这表明测试可以按计划/无人参与的方式运行)。我上一次亲自使用Selenium是在2007年,但我们目前的测试人员使用它编写了一些自动化测试。它并不完全是无头的(尽管如果浏览器可以无头运行,我认为您也可以无头运行selenium测试),在Linux中,您可以“作弊”并使用虚拟(内存中)桌面缓冲区。HTMLUN在您的情况下,这可能是一个更好的选择。