4

I'm need to monitor my sites render times for common tasks (Login, Search etc.). I need something automated that can mimic a users actions on I.E. and be able time how long a page takes to render.
Example automated execution:

1) open headless IE browser

2) go to http://google.com

3) type "stackoverflow"

4) press submit button

5) start timer

6) wait for results page to fully render

7) stop timer

8) Close IE

9) record results

I need this to run as a scheduled task while the server, without the user logged in.

I have been searching for something to help me do so. Anyone have any experience with this type of thing or know of anything that can accomplish this?

4

4 回答 4

11

这取决于您关注的内容、功能或性能。

功能性

监视功能时,您的目标是自动确保 Web 应用程序仍然正常工作。通常,这更多地是持续集成过程的一部分,而不是生产监控的一部分。使用 HtmlUnit、Selenium 或 WebDriver 可以很好地完成。不再推荐使用HttpUnit (API 更底层,JavaScript 支持不那么好,不太广泛采用,错误修复和增强更少)。

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

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

直到 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 来说是有限的,为请求构建付出了很多努力。

于 2011-04-01T19:35:34.647 回答
3

另一种选择可能是Selenium Remote Control(或一般的Selenium)。

于 2011-03-29T18:05:30.903 回答
1

无头自动化的一种选择是使用 HtmlUnit。查看此链接以获取更多信息:在 .NET 上使用 HtmlUnit 进行无头浏览器自动化

于 2011-03-29T17:42:35.533 回答
0

以下 PhantomJS 的 Headless IE 端口目前处于 Beta (v0.2) 阶段:

http://triflejs.org/

这是一个快速介绍:

在此处输入图像描述

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();
            };
        });
    }
});
于 2013-09-19T13:00:06.313 回答