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

Фотография

Автоматизация временнОго тестирования приложений


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

#1 tracer

tracer

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

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

Отправлено 19 апреля 2017 - 08:07

Добрый день. коллеги!

 

Встала задача по тестированию софта в различных временных срезах. Используемый стек:

 

- сервер приложений - JBoss, JSP

- база данных - Oracle Enterprise 11.2

- логика реализована в основном на хранимых процедурах и пакетах PL/SQL

 

Необходимо автоматизировать тестирование связки БД-сервер приложений-клиент в различных временных срезах.

Было бы интересно, какие подходы/инструменты  вы используете для автоматизации подобных задач? Например,  синхронно в тесте менять время на всех системах, участвующих в тестировании?


  • 0

#2 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 19 апреля 2017 - 08:27

У оракла точно есть возможность ставить фейковое время. мне попользоваться не удалось, ибо на сервере я был не один.
http://nuijten.blogs...or-testing.html
А вообще, правилом хорошего тона для логики в PL/SQL считается обрашение к системным часам через хранимую процедуру, что позволяет в тестировании мотать время как захочется.
Причем добавить это в существующий проект - очень просто, вплоть до автозамены при "сборке" тестового пакета.
И старайтесь не мотать время назад, при этом могут возникать более неприятные спецэффекты нежели при перемотке вперед.
  • 0

#3 tracer

tracer

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

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

Отправлено 19 апреля 2017 - 08:40

У оракла точно есть возможность ставить фейковое время. мне попользоваться не удалось, ибо на сервере я был не один.
http://nuijten.blogs...or-testing.html
А вообще, правилом хорошего тона для логики в PL/SQL считается обрашение к системным часам через хранимую процедуру, что позволяет в тестировании мотать время как захочется.
Причем добавить это в существующий проект - очень просто, вплоть до автозамены при "сборке" тестового пакета.
И старайтесь не мотать время назад, при этом могут возникать более неприятные спецэффекты нежели при перемотке вперед.

 

Да, спасибо, это как один из вариантов. Но "обычно" в коде PL/SQL разработчики используют вызовы стандартых функций типа SYSDATE или SYSTIMESTAMP,. К тому же нам необходимо "двигать" время всего окружения синхронно, включая сервер приложений и клиентов. Задача еще более усложняется, так как клиенты могут быть в других часовых поясах.


  • 0

#4 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 19 апреля 2017 - 08:59

У оракла точно есть возможность ставить фейковое время. мне попользоваться не удалось, ибо на сервере я был не один.
http://nuijten.blogs...or-testing.html
А вообще, правилом хорошего тона для логики в PL/SQL считается обрашение к системным часам через хранимую процедуру, что позволяет в тестировании мотать время как захочется.
Причем добавить это в существующий проект - очень просто, вплоть до автозамены при "сборке" тестового пакета.
И старайтесь не мотать время назад, при этом могут возникать более неприятные спецэффекты нежели при перемотке вперед.

 
Да, спасибо, это как один из вариантов. Но "обычно" в коде PL/SQL разработчики используют вызовы стандартых функций типа SYSDATE или SYSTIMESTAMP,. К тому же нам необходимо "двигать" время всего окружения синхронно, включая сервер приложений и клиентов. Задача еще более усложняется, так как клиенты могут быть в других часовых поясах.

Да, заменяете все вызовы на TEST_SYSDATE и TEST_SYSTIMESTAMP в которых отдаете реальное значение + OFFSET, который берете из глобальной переменной или из таблички сервисной.
В этом месте я не очень понимаю в чем проблема. Даже у оракла время можно двигать на самой машине, если это выделенная для теста DBMS.
  • 0

#5 tracer

tracer

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

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

Отправлено 19 апреля 2017 - 09:21

 

 

У оракла точно есть возможность ставить фейковое время. мне попользоваться не удалось, ибо на сервере я был не один.
http://nuijten.blogs...or-testing.html
А вообще, правилом хорошего тона для логики в PL/SQL считается обрашение к системным часам через хранимую процедуру, что позволяет в тестировании мотать время как захочется.
Причем добавить это в существующий проект - очень просто, вплоть до автозамены при "сборке" тестового пакета.
И старайтесь не мотать время назад, при этом могут возникать более неприятные спецэффекты нежели при перемотке вперед.

 
Да, спасибо, это как один из вариантов. Но "обычно" в коде PL/SQL разработчики используют вызовы стандартых функций типа SYSDATE или SYSTIMESTAMP,. К тому же нам необходимо "двигать" время всего окружения синхронно, включая сервер приложений и клиентов. Задача еще более усложняется, так как клиенты могут быть в других часовых поясах.

 

Да, заменяете все вызовы на TEST_SYSDATE и TEST_SYSTIMESTAMP в которых отдаете реальное значение + OFFSET, который берете из глобальной переменной или из таблички сервисной.
В этом месте я не очень понимаю в чем проблема. Даже у оракла время можно двигать на самой машине, если это выделенная для теста DBMS.

 

 

Этот подход понятен, но мало применим, так как нет возможности перелопачивать тонны PL/SQL кода и заменять все вызовы временных функций, среди которых могут быть не толкь стандартная SYSDATE но и :

 

CURRENT_DATE
CURRENT_TIMESTAMP
DBTIMEZONE
LOCALTIMESTAMP
SESSIONTIMEZONE
SYSDATE
SYSTIMESTAMP
 
Тем более, что часть сторонних библиотек завраплена.
Также вызов временных функций происходит на JBoss ( Java, JSP ) и клиентах ( JavaScript ). Необходимо двигать время синхронно автоматически везде.

  • 0

#6 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 19 апреля 2017 - 12:07

Подход вполне применим. Достаточно принять идею, что чтобы что-то было сделано это что-то надо делать.
Со сторонними библиотеками вопрос тоже решаемый. Ну разве что вы взяли в прод неподдерживаемые библиотеки, которые есть только в заврапленом виде.
Что то мы в какие-то дебри полезли. давайте вернемся к исходному вопросу.
Если мнe понадобится переводить время на удаленной машине - я использую ssh и date. Если мне понадобится сделать это на нескольких машинах, то я соберу их имена в массив и буду выполнять ssh и date в цикле. С тем чтобы не выполнять при этом никаких других тестов тоже достаточно просто справится, достаточно не параллелить тесты. Если вдруг понадобится какая-то строгая синхронизация, то я буду изучать причины ее необходимости и искать workaround.
  • 0

#7 tracer

tracer

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

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

Отправлено 20 апреля 2017 - 08:26

Подход вполне применим. Достаточно принять идею, что чтобы что-то было сделано это что-то надо делать.
Со сторонними библиотеками вопрос тоже решаемый. Ну разве что вы взяли в прод неподдерживаемые библиотеки, которые есть только в заврапленом виде.
Что то мы в какие-то дебри полезли. давайте вернемся к исходному вопросу.
Если мнe понадобится переводить время на удаленной машине - я использую ssh и date. Если мне понадобится сделать это на нескольких машинах, то я соберу их имена в массив и буду выполнять ssh и date в цикле. С тем чтобы не выполнять при этом никаких других тестов тоже достаточно просто справится, достаточно не параллелить тесты. Если вдруг понадобится какая-то строгая синхронизация, то я буду изучать причины ее необходимости и искать workaround.

 

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

 

Есть ли какие то специализированные фреймворки/инструменты, которые позволяют решать подобные задачи более эффективно? 


  • 0

#8 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 20 апреля 2017 - 09:59

Давайте начистоту:
1) у вас проблемы с testability софта.
2) у вас нет индивидуальных тестовых окружений.
3) у вас нет генерации тестовых окружений по запросу.
4) вы не управляете тестовым стендом.
Никаким инструментом или фреймворком эти проблемы не решить.
Самое короткое решение - root права и монопольный доступ к стенду.
  • 0

#9 tracer

tracer

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

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

Отправлено 08 ноября 2017 - 19:10

мы в итоге использовали полезный инструмент Time Machine ( кому интересно можете погуглить ), который покрыл все наши потребности по тестированию без возни с системными часами и прав root-а


  • 0

#10 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 08 ноября 2017 - 21:32

Вообще, не просто с системными часами и рутом, но скорее всего еще и с кернел модом.
Годное решение, жаль цена публично не озвучивается.
  • 0


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

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