Безголовая автоматизация IE-браузера, отслеживание времени рендеринга сайта - PullRequest
4 голосов
/ 24 марта 2011

Мне нужно отслеживать время рендеринга моих сайтов для выполнения общих задач (вход в систему, поиск и т. Д.).Мне нужно что-то автоматизированное, которое может имитировать действия пользователя в IE и определить время, необходимое для отображения страницы.
Пример автоматического выполнения:

1) открыть браузер IE без головы

2) перейти к http://google.com

3) набрать "stackoverflow"

4) нажать кнопку подтверждения

5) запустить таймер

6)дождаться полной загрузки страницы результатов

7) остановить таймер

8) закрыть IE

9) записать результаты

Мне нужно это длязапускаться как запланированное задание, пока сервер без входа пользователя.

Я искал что-то, чтобы помочь мне сделать это.Кто-нибудь имеет опыт работы с подобными вещами или знает что-нибудь, что может сделать это?

Ответы [ 4 ]

11 голосов
/ 01 апреля 2011

Это зависит от того, на что вы нацелены, функциональности или производительности.

Функциональность

При мониторинге функциональности вы стремитесь автоматически обеспечить правильную работу веб-приложения.Как правило, это в большей степени часть непрерывного процесса интеграции и меньшая часть мониторинга производства.Это можно сделать с помощью HtmlUnit, Selenium или WebDriver. HttpUnit больше не рекомендуется (API более низкого уровня, JavaScript не очень хорошо поддерживается, менее широко распространен, меньше исправлений и улучшений).

HtmlUnit имитируетбраузер.Таким образом, вы никогда не можете быть уверены, что ваше приложение ведет себя абсолютно идентично в реальном браузере.Это особенно важно для сложных приложений Ajax.Это сопоставимо со всеми небольшими несовместимостями между FireFox и Internet Explorer.Плюсы: без головы, легко понять.Минусы: Риск необнаруженных несовместимостей.

Selenium пульт дистанционного управления реальным браузером.В нашей настройке мы не могли использовать его без головы, особенно с Internet Explorer.Но если вы встраиваете его в виртуальную машину, он работает без головы.Если ваше приложение доступно через общедоступный Интернет, вы можете даже использовать Selenium Grid и предварительно настроенную виртуальную машину из Amazon Elastic Cloud EC2.Плюсы Selenium: совместимость с реальным миром, простота написания сценариев.Минусы: безголовый только в виртуальной машине, снижение производительности, более сложная настройка времени выполнения, имитация стресса для одновременных пользователей только в облаке.

До версии 1.5 Selenium использует JavaScript-компонент Selenium Core для управления браузером.Если ваше приложение имеет ограничения безопасности для JavaScript, Selenium может работать неправильно.

WebDriver использует для каждого браузера определенный интерфейс, например, для расширения FireFox и для элементов управления Automation Internet Explorer.Кроме того, он использует операционную систему, например, для имитации нажатий клавиш.Это более мощный, надежный и надежный, чем Selenium Core.Начиная с версии Selenium 2.0, WebDriver интегрирован в Selenium.Но Selenium 2.0 все еще находится на стадии бета-тестирования.

Производительность

Вы упоминаете измерение с таймером и время рендеринга.При мониторинге производительности веб-приложения вы хотите получать оповещения, когда использование приложения в реальном мире больше невозможно из-за чрезмерного времени ответа.

В этом сценарии вас обычно не интересуют точные результаты в миллисекундах,Вы все еще можете использовать один из инструментов, упомянутых выше.Например, браузер с Selenium Core работает медленнее, чем браузер реального мира, но это не имеет большого значения для непрерывного мониторинга.

Если вам абсолютно необходимы точные измерения, ни один из вышеперечисленных не подходит.Следует различать длительность на стороне клиента и продолжительность сети и длительность на стороне сервера.

  • Продолжительность на стороне клиента необходима для рендеринга HTML-кода и для выполнения JavaScript.Это не зависит от количества одновременно работающих пользователей.Вы можете измерить его один раз, например, с помощью Firebug .Вам не нужно постоянно следить за ним.

  • Для передачи запроса на сервер, обработки запроса и генерации ответа и передачи ответа на сервер требуется длительность работы в сети и на стороне сервера.клиент.Они различаются в зависимости от использования сети и количества одновременных пользователей.Вы можете точно измерить и контролировать их, например, с помощью JMeter .Но в случае сложной функциональности Ajax моделирование правильных клиентских запросов в JMeter является сложной задачей.Плюсы JMeter: Точное измерение, возможность подчеркнуть приложение со многими одновременными пользователями.Минусы: Ограничено для Ajax, много усилий для создания запроса.

3 голосов
/ 29 марта 2011

Другой вариант может быть Selenium Remote Control (или Selenium в целом).

1 голос
/ 29 марта 2011

Одним из вариантов безголовой автоматизации является использование HtmlUnit. Посмотрите эту ссылку для получения дополнительной информации: Использование HtmlUnit в .NET для автоматизации браузера без головы

0 голосов
/ 19 сентября 2013

Следующий бета-порт IE для PhantomJS в настоящее время находится в бета-версии (v0.2):

http://triflejs.org/

Вот краткое введение:

enter image description here

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();
            };
        });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...