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

Тестирование юзабилити (usability)
онлайн, начало 25 ноября
Автоматизация функционального тестирования
онлайн, начало 27 ноября
Автоматизатор мобильных приложений
онлайн, начало 25 ноября
Тестирование безопасности
онлайн, начало 25 ноября
Фотография

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

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 854 сообщений
  • ФИО:Касимов Василий
  • Город:Москва

Отправлено 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 854 сообщений
  • ФИО:Касимов Василий
  • Город:Москва

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


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

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

#11 Vasiliy

Vasiliy

    Гуру

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

Отправлено 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 854 сообщений
  • ФИО:Касимов Василий
  • Город:Москва

Отправлено 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


Программирование на С# для тестировщиков
онлайн
Автоматизатор мобильных приложений
онлайн
Selenium WebDriver: полное руководство
онлайн
Программирование на Python для тестировщиков
онлайн




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

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

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

Яндекс.Метрика
Реклама на портале