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

Фотография

Выбор фреймворка и подхода к автоматизации тестирования


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

#1 Evgenii163

Evgenii163

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

  • Members
  • Pip
  • 31 сообщений
  • ФИО:Клочков Евгений Анатольевич
  • Город:Тольятти

Отправлено 27 мая 2019 - 07:24

Доброго времени суток. Надеюсь что сможете подсказать и навести на путь истинный вы выборе подхода к автоматизации.

 

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

 

У меня есть небольшой опыт написания автотестов (год), используя javascript + cypress, другие фреймворки пока не пробовал. И так как это было на добровольных началах, получилось много огромных, зависимых друг от друга тестов. Сейчас же к этому хотелось бы подойти более осмысленно и ответственно, но возникают вопросы:

  1. Как в таких сценариях таскать кучу данных с первого шага и до конца теста, насколько это правильно и не противоречит ли вообще BDD подходу написания сценариев, так как в каждом сценарии надо проверять не только скажем, наличие какого-то поля, но и возможность заполнить это поле, потому что его необходимо заполнить, чтобы была возможность двигаться дальше по сценарию и т.д.

  2. Можно ли заменить UI тесты, какими-то другими, которые тоже будут хорошо покрывать необходимый функционал, но при этом будут более легко поддерживаемыми и менее громоздкими и тяжелыми

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

А ведь логично было бы иметь один-два теста в бот-стиле, которые бы проверяли корректность работы UI, а тест логики был бы уже совсем другой песней.

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

 

  • 0

#2 Vasiliy

Vasiliy

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

  • Members
  • PipPipPipPipPipPip
  • 2 959 сообщений
  • ФИО:Касимов Василий
  • Город:Москва

Отправлено 27 мая 2019 - 07:45

Отложите автоматизацию на пару месяцев и приведите в порядок ваши тесты. 30 - 50 шагов на тест это нечто за гранью. Если вы сейчас это автоматизируете, то через полгода проклянете свою работу из-за постоянной поддержки кода.
  • 2

#3 Little_CJIOH

Little_CJIOH

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

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


Отправлено 27 мая 2019 - 07:54

1. не противоречит.

2. UI тесты заменяются API- тестами, но не все, основные сценарии все равно надо проходить через UI

 

Посмотрите:

https://sqadays.com/ru/talk/7636

Может добавится ответов.


  • 1

#4 Evgenii163

Evgenii163

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

  • Members
  • Pip
  • 31 сообщений
  • ФИО:Клочков Евгений Анатольевич
  • Город:Тольятти

Отправлено 27 мая 2019 - 08:47

2. UI тесты заменяются API- тестами, но не все, основные сценарии все равно надо проходить через UI

 

 На этот счет у меня есть идея. Приведу пример. Если я правильно вас понял, то например в моем web приложении, в UI есть кнопка, при нажатии на которую  дергается какая-то API ручка. Если я напишу тест на этот API я покрою проверку работы кнопки?  Ну и соответсвтенно если при нажатии на другую кнопку API ручка не дергается, то следовательно на эту кнопку нужно писать полноценный UI тест?


  • 0

#5 Evgenii163

Evgenii163

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

  • Members
  • Pip
  • 31 сообщений
  • ФИО:Клочков Евгений Анатольевич
  • Город:Тольятти

Отправлено 27 мая 2019 - 08:48

Отложите автоматизацию на пару месяцев и приведите в порядок ваши тесты. 30 - 50 шагов на тест это нечто за гранью. Если вы сейчас это автоматизируете, то через полгода проклянете свою работу из-за постоянной поддержки кода.

Как мне кажется, это все равно не решит проблему. Нужно как-то менять саму архитектуру автотестов. А с этим как раз проблемы.


  • 0

#6 Spock

Spock

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

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 27 мая 2019 - 09:22

если тестируете "нажатие кнопки" то создайте компонентный юнит тест для именно этой кнопки

 

если тестируете "как прошёл РЕСТ запрос" то создайте РЕСТ АПИ тест

 

если тестируете как работает метод то создайте юнит тест

 

и потом создайте пару е2е тестов, как вишенку на торте


  • 1

#7 Little_CJIOH

Little_CJIOH

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

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


Отправлено 27 мая 2019 - 09:41

 

2. UI тесты заменяются API- тестами, но не все, основные сценарии все равно надо проходить через UI

 

 На этот счет у меня есть идея. Приведу пример. Если я правильно вас понял, то например в моем web приложении, в UI есть кнопка, при нажатии на которую  дергается какая-то API ручка. Если я напишу тест на этот API я покрою проверку работы кнопки?  Ну и соответсвтенно если при нажатии на другую кнопку API ручка не дергается, то следовательно на эту кнопку нужно писать полноценный UI тест?

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

Это классическая "пирамида тестов"

 

 

Отложите автоматизацию на пару месяцев и приведите в порядок ваши тесты. 30 - 50 шагов на тест это нечто за гранью. Если вы сейчас это автоматизируете, то через полгода проклянете свою работу из-за постоянной поддержки кода.

Как мне кажется, это все равно не решит проблему. Нужно как-то менять саму архитектуру автотестов. А с этим как раз проблемы.

 

про архитектуру автотестов выше ссылка на очень хороший доклад. Сценарии по 30-50 шагов скорее всего можно разбить на состояния и переходы между ними.


  • 1

#8 Spock

Spock

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

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 27 мая 2019 - 09:56

 

 

Если кнопка не дергает ни какой API то что она вообще делает?

может запускать какой-то скрипт на странице, например "проверить поля формы", либо может расчёт/преобразование каких-то полей

 

может переключения вида таблицы, типа "грид-лист", сортировка, добавление столбцов, 

 

"большие-маленькие карточки"

 

может вызывать модальное окно для редактирования поля

 

много чего


  • 0

#9 Evgenii163

Evgenii163

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

  • Members
  • Pip
  • 31 сообщений
  • ФИО:Клочков Евгений Анатольевич
  • Город:Тольятти

Отправлено 27 мая 2019 - 13:01

если тестируете "нажатие кнопки" то создайте компонентный юнит тест для именно этой кнопки

 

А как мне написать тест на "нажатие кнопки" если например, чтобы нажать эту кнопку, нужно до нее дойти, и перед этим сделать еще кучу действий. У меня есть конкретный пример на проекте. Мне нужно загрузить задание в спецификацию. Но чтобы дойти до загрузки этого задания, мне нужно полюбому пройти еще 3 страницы со своей логикой работы. Сразу перейти на страницу загрузки задания - невозможно, потому что стоит валидатор на необходисость заполнить нужные поля на всех предыдущих страницах...


  • 0

#10 Evgenii163

Evgenii163

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

  • Members
  • Pip
  • 31 сообщений
  • ФИО:Клочков Евгений Анатольевич
  • Город:Тольятти

Отправлено 27 мая 2019 - 13:09

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

 

Короче я в абсолютном тупике. Потому что не представляю по какой логике нужно разделять тесты и как понять для какого теста нужно писать UI тесты а для какого API. Также не понятно как не дублировать код (кроме выноса повторяющихся действий в отдельные методы).


  • 0

#11 Spock

Spock

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

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 27 мая 2019 - 13:10

 

 

А как мне написать тест на "нажатие кнопки" если например, чтобы нажать эту кнопку, нужно до нее дойти, и перед этим сделать еще кучу действий. У меня есть конкретный пример на проекте. Мне нужно загрузить задание в спецификацию. Но чтобы дойти до загрузки этого задания, мне нужно полюбому пройти еще 3 страницы со своей логикой работы. Сразу перейти на страницу загрузки задания - невозможно, потому что стоит валидатор на необходисость заполнить нужные поля на всех предыдущих страницах...

никуда "доходить" не надо

 

это компонентный юнит тест - его надо создавать в коде проекта рядом с используемым компонентом

 

то есть где эта "кнопка" описана - там же рядом и создать "тест кнопки"


  • 0

#12 Spock

Spock

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

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 27 мая 2019 - 13:11

 

 

В той же спецификации мне нужно проверить что спецификация сохраняется с каким то заполненным полем

для этого создайте юнит тест на бэк-енде который проверяет сохранение спецификации


  • 0

#13 Evgenii163

Evgenii163

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

  • Members
  • Pip
  • 31 сообщений
  • ФИО:Клочков Евгений Анатольевич
  • Город:Тольятти

Отправлено 27 мая 2019 - 13:16

для этого создайте юнит тест на бэк-енде который проверяет сохранение спецификации

 

 

 

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


  • 0

#14 Spock

Spock

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

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 27 мая 2019 - 13:22

 

 

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

по тестовой пирамиде. тесты надо создавать на наиболее низком уровне

 

надо например ясно понимать что такое "создание спецификации". что это не "нажатие кнопки на фронте", что спецификация создаётся на бэкенде, скорее всего одним методом в который передаются все эти параметры создания

 

и тоже что такое "кнопка", что это просто компонент на странице, который можно и нужно тестировать независимо от бэкенда, РЕСТ сервисов и даже независимо от самой страницы


  • 1

#15 Evgenii163

Evgenii163

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

  • Members
  • Pip
  • 31 сообщений
  • ФИО:Клочков Евгений Анатольевич
  • Город:Тольятти

Отправлено 27 мая 2019 - 13:27

 

 

 

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

по тестовой пирамиде. тесты надо создавать на наиболее низком уровне

 

надо например ясно понимать что такое "создание спецификации". что это не "нажатие кнопки на фронте", что спецификация создаётся на бэкенде, скорее всего одним методом в который передаются все эти параметры создания

 

и тоже что такое "кнопка", что это просто компонент на странице, который можно и нужно тестировать независимо от бэкенда, РЕСТ сервисов и даже независимо от самой страницы

 

Очень доходчиво, спасибо! 


  • 0


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

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