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

Фотография

Прошу помощи в споре с коллегами про принципы разработки автотестов

javascript Cypress.io Автоматизация

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

#1 Evgenii163

Evgenii163

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

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

Отправлено 26 ноября 2019 - 14:00

Приветствую коллеги.

 

Чтобы было максимально понятно, опишу максимально подробно.

 

Я работаю в небольшой фирме и я единственный человек, который занимается автоматизацией тестирования.  Мой стек - это cypress.io + javascript

Я знаком с некоторыми принципами автоматизации тестирования и знаю несколько способов управления тестовыми данными

  1. Создание тестовых данных напрямую в БД

  2. Создание тестовых данных через UI

  3. Создание тестовых данных через API

  4. Создание тестовых данных, используя состояние приложения (appStore)

 

В основном, я использую способы 3 и 4. Потому что я знаю. Что управлять тестовыми данными через UI очень дорого и тесты получаются хрупкими и т.д. 

 

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

Цитата: “Если ты пишешь автотесты, используя такие способы как “3” и “4” . То это не E2E тестирование. Потому что в такое случае приложение не ведет себя как пользователь. И соответственно такой тест, может не найти те баги, которые найдет тест, которые пишется с помощью способа “2”.

 

Приведу пример пары моих реальных тестов для наглядности. Думаю вы сразу все поймете.

 

Пример с использованием appStore

 

На двух видео представлен один и тот же тест

 

https://ibb.co/hXtgT2JНа этом видео, я через appStore приложения сразу ставлю  поле с sql запросом в нужное мне состояние с нужным мне sql_id, тем самым избегая хрупкости селектора и тому подобное.

 

Но здесь мои коллеги мне говорят (Примерно процитирую):

Цитата: При скролировании может быть какая-то ошибка, по этому неправильно сетить данные сразу в appStore, вместо того чтобы делать так, как делает пользователь

 

https://yapx.ru/u/FzcCI -На этом видео я использую только возможности UI и скролю вниз до тех пор, пока нужный id sql запроса не будет найден в списке. И здесь есть самое слабое место.

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

 

Пример с использованием API

 

Представьте простой кейс. “Редактирование пользователя”

Шаги:

  1. Создать пользователя

  2. Отредактировать пользователя (Например изменить userName)

 

  На примере работы моего тестируемого приложения. На скриншоте - https://ibb.co/jfkc6D8показано, что при нажатии на кнопку “Сохранить” на предыдущем шаге, отправляется запрос, который сохраняет пользователя и возвращает user_Id.

 По этому вместо того, чтобы создавать пользователя в автотесте через UI и затем через UI его редактировать, я сразу отправляю API запрос, в котором, в пререквизитах к автотесту,  создается пользователь для редактирования. И Затем уже в UI интерфейсе я его редактирую

 

Но здесь мои коллеги мне говорят (Примерно процитирую):

Цитата: Ты делаешь не как пользователь. Реальный пользователь приложения не может создать пользователя через API. Он создает и редактирует его через UI по этому и ты должен делать также.

 

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

 

Спасибо что дочитали до конца

 

Друзья. Подскажите пожалуйста. Как мне переубедить моих коллег. Какие аргументы мне им предъявлять. Чем оперировать? В чем я не прав?


  • 0

#2 Vasiliy

Vasiliy

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

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

Отправлено 26 ноября 2019 - 14:26

Все правы, но вы правее))

 

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

2.  "соответственно такой тест, может не найти те баги, которые найдет тест, которые пишется с помощью способа “2”." Тест должен находить те ошибки, на которые он заточен.

Если вы проверяете редактирование пользователя, то не надо рассчитывать, что тест найдет ошибку в моменте создания. Хотите найти ошибку в процессе создания - напишите отдельный тест.

​Это были доводы. Теперь теоретические изыскания из книжек))

Не надо делать связанные тесты - это плохо. Упадет первая часть теста и дальше вы вообще ничего не сможете сказать о функционале программы.

Конкретно по вашим примерам:

1. Вам нужно протестировать создание пользователя - сделайте тест.

2. Вам нужно проверить редактирование пользователя - сделайте тест с изначальными данными. 

Это должно быть два разных теста, а не один большой на все.

 

Еще немного теории, правда уже не скажу из книжек или опыта.

Ручное тестирование - это поведение пользователя, да. Автоматизация это уже немного выше и шире. Это возможность (быстро) протестировать то, что руками или сложно или долго.

Но не стоит при этой возможности пытаться повторить все ручное тестирование - это неверный путь. 

 

Ваши коллеги - это тестировщики?

 

P.S. насчет все правы из первой строки - коллеги ваши правы в том, что они хотят проверить "прилегающий" функционал)


  • 1

#3 Evgenii163

Evgenii163

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

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

Отправлено 26 ноября 2019 - 14:35

Все правы, но вы правее))

 

По всем пунктам с вами согласен. Более того. Я и делаю раздельные тесты для каждого сценария. Но я просто уже устал бодаться и постоянно доказывать свою точку зрения и типо того. В частности спасибо за идею про Е2Е и про "на что заточен тест" 


  • 0

#4 Evgenii163

Evgenii163

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

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

Отправлено 26 ноября 2019 - 14:35

 

Ваши коллеги - это тестировщики?

 

В основном  разрабы. Тестировщики как раз на моей стороне)


  • 0

#5 Evgenii163

Evgenii163

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

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

Отправлено 26 ноября 2019 - 14:42

Все правы, но вы правее))

 

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

 

Вот тут кстати есть вопрос, который мне никак не дает покоя. А полностью проверяет ли тест работоспособность той или иной фичи, если управлять им не как пользователь. Вот в том же примере выше. Допустим есть тест который выбирает тот же sql_id из drop-down листа. Можем ли мы его полностью покрыть действием со стор. Или нужно обязательно взаимодействовать с этой фичей как пользователь? Есть идеи? 


  • 0

#6 Spock

Spock

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

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

Отправлено 26 ноября 2019 - 14:42

 

Но здесь мои коллеги мне говорят (Примерно процитирую):

Цитата: При скролировании может быть какая-то ошибка, по этому неправильно сетить данные сразу в appStore, вместо того чтобы делать так, как делает пользователь

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

 

 

 

Цитата: Ты делаешь не как пользователь. Реальный пользователь приложения не может создать пользователя через API. Он создает и редактирует его через UI по этому и ты должен делать также.

конечно делаешь не как реальный пользователь. Если сделать как реальный - тесты будут зависимыми, долгими и будут постоянно ломаться, в итоге после долгих мучений их просто выбросят на помойку. (это например ад когда тест на редактирование пользователя зависит от теста на создание пользователя, что будет когда создание станет нестабильно?) Вот и приходится "выкручиваться", создавать данные через АПИ. Конечно некоторые баги так проскочат, так как это "нереально" - но другая альтернатива это тесты в мусорке, которых считай и нет


  • 1

#7 Evgenii163

Evgenii163

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

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

Отправлено 26 ноября 2019 - 14:46

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

 

 

 

 

 

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


  • 0

#8 Evgenii163

Evgenii163

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

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

Отправлено 26 ноября 2019 - 14:57

 

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

 

 

 

А как вы определяете тестовое покрытие ? Точнее как вы поняли что компонентный тест отсутствует. Скажите хоть что почитать/посмотреть


  • 0

#9 Spock

Spock

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

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

Отправлено 26 ноября 2019 - 15:04

 

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

смотрите тестовую пирамиду: сайпресс должен использоваться на уровне Е2Е тестов, он не должен тестировать отдельные компоненты

 

 

 

А как вы определяете тестовое покрытие ? Точнее как вы поняли что компонентный тест отсутствует. Скажите хоть что почитать/посмотреть

понял вот по этому: "Цитата: При скролировании может быть какая-то ошибка, по этому неправильно сетить данные сразу в appStore, вместо того чтобы делать так, как делает пользователь"

если разрабы не уверены что компонент работает - значит они не написали для него компонентные тесты

 

а тестовое покрытие фичи можно определять по тестовой пирамиде опять же:

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


  • 1

#10 Vasiliy

Vasiliy

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

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

Отправлено 26 ноября 2019 - 15:42


Все правы, но вы правее))

По всем пунктам с вами согласен. Более того. Я и делаю раздельные тесты для каждого сценария. Но я просто уже устал бодаться и постоянно доказывать свою точку зрения и типо того. В частности спасибо за идею про Е2Е и про "на что заточен тест"
А вам платят за вашу работу в тестировании или за то, что вы всем доказали, что вы правы?))
  • 1

#11 Vasiliy

Vasiliy

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

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

Отправлено 26 ноября 2019 - 15:54

Еще вариант.
Найдите книжку серии "для чайников", с# или с++. Они такого черно-желтого цвета, очень узнаваемые.
Зайдите в кабинет разработки, громко хлопните данной книжкой об стол и скажите, что вы изучили литературу и стали прекрасно разбираться в программировании. И чтоб теперь никто из разработки не смел коммитить код без вашего одобрения и согласования. А вы, мол, расскажите им почему они до этого все делали неправильно)))
  • 1

#12 Evgenii163

Evgenii163

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

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

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

смотрите тестовую пирамиду: сайпресс должен использоваться на уровне Е2Е тестов, он не должен тестировать отдельные компоненты

 

 

 

 

 

Кстати сайпресом можно тестировать компоненты https://github.com/b...react-unit-test. Тут опять же я просто думал что если диспатчить action то этим действием можно заменить компонентный тест, поправьте если я не прав. В остальном придельно понял. Спасибо


  • 0

#13 Evgenii163

Evgenii163

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

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

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

 И чтоб теперь никто из разработки не смел коммитить код без вашего одобрения и согласования.

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


  • 0

#14 Evgenii163

Evgenii163

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

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

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

 

А вам платят за вашу работу в тестировании или за то, что вы всем доказали, что вы правы?))

 

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


  • 0

#15 Vasiliy

Vasiliy

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

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

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

 

 И чтоб теперь никто из разработки не смел коммитить код без вашего одобрения и согласования.

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

 

Так может вам просто мстят?)))))))))))))))


  • 1

#16 Evgenii163

Evgenii163

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

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

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

 

Так может вам просто мстят?)))))))))))))))

 

 

Ну не) Все вроде смеялись. Но я спрошу на всякий случай)


  • 0

#17 Spock

Spock

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

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

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

 

 

Тут опять же я просто думал что если диспатчить action то этим действием можно заменить компонентный тест, поправьте если я не прав. В остальном придельно понял. Спасибо

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


  • 1

#18 Evgenii163

Evgenii163

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

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

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

 

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

 

Согласен. Но так и не понял, равноценно ли диспатчить action компонентному тесту, и как это определить?


  • 0



Темы с аналогичным тегами javascript, Cypress.io, Автоматизация

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

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