Перейти к содержимому

Фотография

Измерить время отклика


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 SANDR

SANDR

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • Город:Омск

Отправлено 31 мая 2012 - 09:34

Все привет.
Пытаюсь доделать тест, который бы замерял время отклика страницы и в зависимости от условия, а точнее от максимального времени, возвращал результат пройден тест или нет.
Если, совсем просто, то
        [SetUp]
        public void SetupTest()
        {
            driver = new FirefoxDriver();
            baseURL = "http://localhost/";
        }

        [TearDown]
        public void TeardownTest()
        {
         ...
        }

        [Test]
        public void Time_Taken()
        {
            driver.Navigate().GoToUrl(baseURL + "/");
        }

Тест впринципе рабочий, если его запускать через NUnit или MBUnit выдается время выполнения, но это уж слишком условная единица, нужно точнее и конкретнее
Как реализовать обращение к Time Taken и как задать порог в мс чтобы тест либо проходил, либо рубился?

P.S. Подобную тему нашел, но не то...
  • 0

#2 achumagin

achumagin

    Активный участник

  • Members
  • PipPip
  • 145 сообщений
  • ФИО:Alexey Chumagin
  • Город:Казань

Отправлено 31 мая 2012 - 13:20

Используйте
TimeoutAttribute (NUnit 2.5)

The TimeoutAttribute is used to specify a timeout value in milliseconds for a test case. If the test case runs longer than the time specified it is immediately cancelled and reported as a failure, with a message indicating that the timeout was exceeded.

The attribute may also be specified on a fixture or assembly, in which case it indicates the default timeout for any subordinate test cases.

Example

[Test, Timeout(2000)]
public void PotentiallyLongRunningTest()
{
...
}
Notes

Beginning with NUnit 2.5.5, timeouts are suppressed when running under a debugger.

.
НО! все таки для скорости загрузки страницы, я бы посоветовал использовать другие инструменты. Так задача, которую вы описывается относиться к тестированию производительности, а вебдрайвер инструмент для функционального тестирования.
Обратите внимание на Jmeter
  • 0
ap-test-team.blogspot.com

#3 SANDR

SANDR

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • Город:Омск

Отправлено 01 июня 2012 - 01:34

Используйте
TimeoutAttribute (NUnit 2.5)


The TimeoutAttribute is used to specify a timeout value in milliseconds for a test case. If the test case runs longer than the time specified it is immediately cancelled and reported as a failure, with a message indicating that the timeout was exceeded.

The attribute may also be specified on a fixture or assembly, in which case it indicates the default timeout for any subordinate test cases.

Example

[Test, Timeout(2000)]
public void PotentiallyLongRunningTest()
{
...
}
Notes

Beginning with NUnit 2.5.5, timeouts are suppressed when running under a debugger.

.
НО! все таки для скорости загрузки страницы, я бы посоветовал использовать другие инструменты. Так задача, которую вы описывается относиться к тестированию производительности, а вебдрайвер инструмент для функционального тестирования.
Обратите внимание на Jmeter


Спасибо за ответ, но все-таки немного не то.
Вебдрайвер вроде как не позволяет запускать тест в уже существующей сессии браузера (Firefox) а значит время теста еще и берется на запуск браузера, именно это время надо как то откидывать, то есть учитывать не вермя выполнения теста, а по сути время отклика страницы и только (оно по тому же FireBug или в среднем по LoadUI держится в пределах 1300 - 1900 мс)
Отдельный инструмент не подходит, нужен именно тест для замера, максимально быстрый и наглядный, чтобы во время сборки или отладки разработчик мог прогонять кипу тестов на страницы и видел какая из них тяжелее стала и уже в этой связи ее оптимизировал.

Рассматривал даже варианты с Selenium IDE
Там конструкция
[info] Executing: |timerStart | TimeTaken | |
[info] Executing: |open | http://localhost/ | |
[info] Executing: |timerStop | TimeTaken | | 
Дает свой результат - в логах я вижу время отклика, но тут затуп в условии, как его задать чтобы тест валился если время отклика больше 1500 мс?
Еще есть идеи?

P>S>
Вот что еще получилось
    [info] Executing: |timerStart | TimeTaken | |
    [info] Executing: |open | http://localhost/ | |
    [info] Executing: |timerStop | TimeTaken | |
    [info] Time Passed for TimeTaken : 2792
    [info] Executing: |storeEval | if (${TimeTaken} < 3000) {nextStep='testOK'} | test |
    [info] script is: if (2792 < 3000) {nextStep='testOK'}
    [info] Executing: |gotolabel | ${test} | |
    [info] Executing: |echo | GOOD SPEED! | |
    [info] echo: GOOD SPEED! 
Даже работает)
Может можно как то это дело улучшить или упростить - в плане если условие false выводить сообщение или адекватный эксепшен, так как у меня в случае false выводится
[error] Unexpected Exception: fileName -> chrome://flowcontrol/content/extensions/goto-sel-ide.js?1338514256440, lineNumber -> 120
Ну а так если IDE разрабам не понравится будем дальше думать...
Проблема хоть и решена, но просьба ее пока не закрывать
  • 0

#4 psihozik

psihozik

    Новый участник

  • Members
  • Pip
  • 39 сообщений

Отправлено 01 июня 2012 - 07:37

    [info] Executing: |timerStart | TimeTaken | |
    [info] Executing: |open | http://localhost/ | |
    [info] Executing: |timerStop | TimeTaken | |
    [info] Time Passed for TimeTaken : 2792
    [info] Executing: |storeEval | if (${TimeTaken} < 3000) {nextStep='testOK'} | test |
    [info] script is: if (2792 < 3000) {nextStep='testOK'}
    [info] Executing: |gotolabel | ${test} | |
    [info] Executing: |echo | GOOD SPEED! | |
    [info] echo: GOOD SPEED! 
Даже работает)
Может можно как то это дело улучшить или упростить - в плане если условие false выводить сообщение или адекватный эксепшен, так как у меня в случае false выводится
[error] Unexpected Exception: fileName -> chrome://flowcontrol/content/extensions/goto-sel-ide.js?1338514256440, lineNumber -> 120
Ну а так если IDE разрабам не понравится будем дальше думать...
Проблема хоть и решена, но просьба ее пока не закрывать

Не знаю как у вас это работает, так как в storeEval так переменные не пишут ${TimeTaken}, но раз работает попробуйте:
|storeEval | if (${TimeTaken} < 3000) {nextStep='testOK'} else{nextStep='testNeOK'}| test |
Ну и соответственно не забудте сам label testNeOK, где можете зделать вывод ошибки с escho или модальным окном (getEval | alert('BAD SPEED') )
  • 0

#5 SANDR

SANDR

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • Город:Омск

Отправлено 04 июня 2012 - 02:34

Не знаю как у вас это работает, так как в storeEval так переменные не пишут ${TimeTaken}, но раз работает попробуйте:
|storeEval | if (${TimeTaken} < 3000) {nextStep='testOK'} else{nextStep='testNeOK'}| test |
Ну и соответственно не забудте сам label testNeOK, где можете зделать вывод ошибки с escho или модальным окном (getEval | alert('BAD SPEED') )


Спасибо за ответ
Работает видимо потому что я использую кроме goto_sel_ide.js, timer Extension.js который уже хранит в указанной мной переменой (TimeTaken) значение, поэтому достаточно только сделать к ней обращение.
А что касается ветки на False - ситуация такая что таких страниц может быть сотня, и после прогона набора тестов, нужно наглядо оценить какие прошли (зелень) и какие нет (краснота)

Решение конечно не самое изящное но тем не менее
[info] Executing: |pause | 4000 | |
[info] Executing: |timerStart | TimeTaken | |
[info] Executing: |open | http://localhost/ | |
[info] Executing: |timerStop | TimeTaken | |
[info] Time Passed for TimeTaken : 2274
[info] Executing: |storeEval | if (${TimeTaken} < 2000) {nextStep='testOK'} else{nextStep='testNotOK'} | test |
[info] script is: if (2274 < 2000) {nextStep='testOK'} else{nextStep='testNotOK'}
[info] Executing: |gotolabel | ${test} | |
[info] Executing: |echo | ${TimeTaken} - BAD SPEED! | |
[info] echo: 2274 - BAD SPEED!
[info] Executing: |BAD SPEED!!!!!111111 | | |
[error] Unknown command: 'BAD SPEED!!!!!111111' 
)) Думаю этого будет достаточно, спасибо всем за мысли.
  • 0

#6 SANDR

SANDR

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • Город:Омск

Отправлено 05 июня 2012 - 01:38

Отдал что сделано, все устроило. Но останавливаться на это не хочется, иметь подобный тест на C# было бы здорово
Предложенный вариант выше, про Timeout действительно работает, но тест рубится еще на стадии открытия браузера, также перепробовал варианты ожиданий, поэтому на C# вопрос про данный тест остается открытым.

Может быть имеется отдельный класс для этого? Подскажите в какую сторону смотреть? Пример кода в 1 посте..
Повторю что смак теста именно в замере не времени выполнения теста, а в замере response time (времени отклика), а на результатах замера выдавать итог
  • 0

#7 SANDR

SANDR

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • Город:Омск

Отправлено 06 июня 2012 - 09:50

Вопрос решен, тему можно закрыть
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных