Size: a a a

QA — Автоматизация

2020 May 20

AS

Andrei Solntsev in QA — Автоматизация
Alexei Vinogradov
Забавный момент. Есть такая вещь - темплейты. Например Apache FreeMarker (ftl), Java. И в этих темплейтах частенько полно логики, которую полезно покрывать юнит тестами.
Как проверить coverage таких тестов? Не нашел сейчас на вскидку инструментов, хотя проблема то довольно общая.

Какие-то идеи?

Ну кроме - "логика в темплейтах - зло".
Никак.

И нет, логика в темплейтах не зло - она там неизбежно нужна. Ну там, спрятать или показать какую-нибудь кнопку.

Скорее в темплейтах не должно быть сложной логики (или бизнес-логики). Только простые ифы.
источник

R(

Roman (rpwheeler) in QA — Автоматизация
Alexei Vinogradov
Пока мне пришел в голову вариант - разбивать templatы на маленькие независимые и там сокращать if-ы до 1-2 на темплейт, чтобы можно было "вручную" покрытие посчитать.
Костыльное решение это сопровождать любой if комментарием в котором есть некий testID , а с другой стороны кидать оные testID в файлы юнит-тестов.

К этому можно написать проверялку на уровне текстовых утилит которая будет читать темплейты, считать if'ы и id, а потом читать юниты и считать id , и сообщать что нашлось а что не нашлось.
источник

AV

Alexei Vinogradov in QA — Автоматизация
Andrei Solntsev
Никак.

И нет, логика в темплейтах не зло - она там неизбежно нужна. Ну там, спрятать или показать какую-нибудь кнопку.

Скорее в темплейтах не должно быть сложной логики (или бизнес-логики). Только простые ифы.
ну вот у нас там как раз if tariff=business && amount>5000 || status=premium

бизнес-логика,  как мы её любим)
источник

AV

Alexei Vinogradov in QA — Автоматизация
ну в основном "простыми" ифами, но сильно глубже, чем if item!=null showIt
источник

AB

Alexei Barantsev 🗹... in QA — Автоматизация
избавиться от логики в шаблонах, конечно, сложно, но
1) можно писать простые проверяемые условия, то есть не
if tariff=business && amount>5000 || status=premium
а
if shouldWeShowThisComponent()
и тестировать функцию shouldWeShowThisComponent, которая содержит логику
тогда в шаблонах надо будет покрыть только if-ы, а не все возможные комбинации условий в if-е
источник

AB

Alexei Barantsev 🗹... in QA — Автоматизация
извините, отвлёкся...
2) шаблоны надо дробить на компоненты, делать отдельные тесты для каждого компонента, тогда не нужно будет тестировать сочетания if-ов
источник

EG

Edward Galiaskarov in QA — Автоматизация
Всем привет!

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

Проявляется только, если тесты я гоняю в отдельном сеансе (ночные прогоны у меня крутятся на винде по заданию планировщика). Связка cucumber+capybara+chromedriver.

Т.е. когда запускаю тест и смотрю на него все окей, запускаю ночные прогоны, тест падает с ошибкой- мол не могу прокликать элемент ибо перекрыт модальным окном.

Обнаружив это я после вызова модалки и его закрытия по кнопке дополнительно делаю $(".modal").modal("hide") - в большинстве случаев помогает, но в одном не помогает (в этом случае это модальное окно вызывается дважды) между вызовами ставлю задержки, ставлю принудительно закрытие модалки - и все равно падает по причине что кликнуть на элемент мешает модальное окно.

Может кто-то подсказать в каком направлении копать?
источник

SA

Scherbakov Alexey in QA — Автоматизация
Попробуйте использовать прокси паттерн. Не знаю есть ли в руби что-то, что позволит это сделать просто... В джава, например, есть invocation Handler, в typescript можно написать декоратор на это дело, чтоб не морочить голову с заворачиваем элементов.
источник

EG

Edward Galiaskarov in QA — Автоматизация
Scherbakov Alexey
Попробуйте использовать прокси паттерн. Не знаю есть ли в руби что-то, что позволит это сделать просто... В джава, например, есть invocation Handler, в typescript можно написать декоратор на это дело, чтоб не морочить голову с заворачиваем элементов.
Алексей, это ответ на мой пост?
источник

SA

Scherbakov Alexey in QA — Автоматизация
Edward Galiaskarov
Алексей, это ответ на мой пост?
Да
источник

EG

Edward Galiaskarov in QA — Автоматизация
Спасибо, я еще не настолько профессионален, чтобы все понять, что вы мне предложили :) Если честно , я совсем не понял Вашего совета :(
источник

SA

Scherbakov Alexey in QA — Автоматизация
Edward Galiaskarov
Спасибо, я еще не настолько профессионален, чтобы все понять, что вы мне предложили :) Если честно , я совсем не понял Вашего совета :(
Соль в том, что вы можете завернуть свой элемент и обращение к его методам в, так называемый, прокси объект, и перед выполнением метода проверять есть ли модальное окно или нет. В идеале сделать так, чтобы сама проверка проходила автоматически перед непосредственным вызовом метода вашего объекта.
источник

SA

Scherbakov Alexey in QA — Автоматизация
Вот тут описывается что-то подобное, и есть пример на руби.
https://outofrange.ru/2017/08/dynamic-proxy-java-ruby/
источник

SA

Scherbakov Alexey in QA — Автоматизация
Конечно, это несколько замедлит прогон ваших тестов, но проблема должна уйти
источник

EG

Edward Galiaskarov in QA — Автоматизация
Наверное, вы меня не поняли.

1 ночные прогоны выполняются в отдельном сеансе винды через палнировщик, при этом наблюдаемого гуи нет, экрна залочен вообще комп стоит в офисе, а мы сейчас удаленно же работает, экран заложен и скорее всего даже выключен

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

В результате, когда я работаю в наблюдаемом режиме, то модалки исправно закрываются, даже без принудительных команды .modal("hide"), тест прекрасно проходит, я радуюсь.

Но в результате ночного прогона, когда я утром разбираю логи, вижу, что тот же самый тест падает из-за того, что модалка не закрыта, хотя я проверяю ее наличие и принудительно убиваю (как мне кажется)

Т.е. возможно существует как-то разное поведение, вопрос только на каком уровне искать, возможно что-то нужно правильно (а у меня не правильно) настроить в chromedriver, возможно capybara

Вот
источник

O

Oleg in QA — Автоматизация
Такие проблемы обычно из-за того, что тесты и приложение работают с разной скоростью на разном окружении.
Если проверка не помогает, то, возможно, она успешно проходит до того как это окно появилось, потом оно появляется и тест падает.
источник

RS

Roman Solodukhin in QA — Автоматизация
Edward Galiaskarov
Наверное, вы меня не поняли.

1 ночные прогоны выполняются в отдельном сеансе винды через палнировщик, при этом наблюдаемого гуи нет, экрна залочен вообще комп стоит в офисе, а мы сейчас удаленно же работает, экран заложен и скорее всего даже выключен

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

В результате, когда я работаю в наблюдаемом режиме, то модалки исправно закрываются, даже без принудительных команды .modal("hide"), тест прекрасно проходит, я радуюсь.

Но в результате ночного прогона, когда я утром разбираю логи, вижу, что тот же самый тест падает из-за того, что модалка не закрыта, хотя я проверяю ее наличие и принудительно убиваю (как мне кажется)

Т.е. возможно существует как-то разное поведение, вопрос только на каком уровне искать, возможно что-то нужно правильно (а у меня не правильно) настроить в chromedriver, возможно capybara

Вот
А смотрели видео упавшего теста?
источник

OK

Oleksandr Khotemskyi in QA — Автоматизация
Roman Solodukhin
А смотрели видео упавшего теста?
там походу хром в хедлес бежит, видео не получится, а вот скрины могут быть
источник

OK

Oleksandr Khotemskyi in QA — Автоматизация
Edward Galiaskarov
Наверное, вы меня не поняли.

1 ночные прогоны выполняются в отдельном сеансе винды через палнировщик, при этом наблюдаемого гуи нет, экрна залочен вообще комп стоит в офисе, а мы сейчас удаленно же работает, экран заложен и скорее всего даже выключен

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

В результате, когда я работаю в наблюдаемом режиме, то модалки исправно закрываются, даже без принудительных команды .modal("hide"), тест прекрасно проходит, я радуюсь.

Но в результате ночного прогона, когда я утром разбираю логи, вижу, что тот же самый тест падает из-за того, что модалка не закрыта, хотя я проверяю ее наличие и принудительно убиваю (как мне кажется)

Т.е. возможно существует как-то разное поведение, вопрос только на каком уровне искать, возможно что-то нужно правильно (а у меня не правильно) настроить в chromedriver, возможно capybara

Вот
когда экран в винде залочен - там очень многое работает по другому. Я бы попробовал не лочить экран и посмотреть как пройдут тесты
источник

K

Kto? in QA — Автоматизация
ребят, привет! Хотел спросить, я начинаю только вкатываться в автоматизацию, вот такие тесты у меня в классе будут (точнее в таком виде: http://joxi.ru/brRNwaZUYRg11r) .. наследуются от класс с логикой тестов + локаторы.
Сама логика выполнения теста вынесена в другой класс + Локаторы в одном классе.

Правильно начал, или может что то посоветуете?
источник