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

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

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

2) перейдите на страницу http://google.com.

3) введите "stackoverflow"

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

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

6) подождите, пока страница результатов полностью отобразится

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

8) Закройте IE

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

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

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


person ajoe    schedule 24.03.2011    source источник


Ответы (4)


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

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

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

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

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

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

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

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

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

person Martin Ackermann    schedule 01.04.2011

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

person esaj    schedule 29.03.2011
comment
(+1) да, это основной инструмент для автоматизации действий пользователя. - person Scherbius.com; 29.03.2011
comment
Будет ли это работать как запланированное задание без входа пользователей? - person ajoe; 29.03.2011
comment
@ajoe AFAIK, да, но я не уверен на 100% (по крайней мере, есть доступный плагин Hudson, который предполагает, что тесты можно запускать по расписанию / без присмотра). В последний раз я лично использовал Selenium в 2007 году, но наши нынешние тестировщики пишут с его помощью несколько автоматических тестов. Это не совсем безголовый (хотя, если браузер можно запустить безголовым, я думаю, вы также можете запускать тесты селена безголовые), в Linux вы можете обманывать и использовать виртуальный (в памяти) буфер рабочего стола. HtmlUnit может быть лучшим вариантом в вашем случае. - person esaj; 30.03.2011

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

person Giorgi    schedule 29.03.2011

Следующий порт Headless IE для PhantomJS в настоящее время находится в бета-версии (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();
            };
        });
    }
});
person Steven de Salas    schedule 19.09.2013