Подготовка к собеседованию на QA Engineer
Менторы
Специалисты своей области, которые смогут помочь вам
Middle .Net Developer
Senior Product Manager
Middle Python Developer
Ведущий программист
Backend Software Engineer (PHP)
Senior .NET/C# developer
Middle DevOps Engineer | Tbilisi, Georgia
Middle C# .NET
Senior PHP-разработчик
Middle python developer
Каналы
Полезные Telegram каналы и чаты
Транскрипция видео:
итак prox по вкусу кафарелли давай теперь наверное перейдём к тестированию сервисов вы начнем наверное с таких более простых вещей можешь пожалуйста рассказать что такое арест до с это понятия стиль она взаимодействует с ресурсами я так понимаю что ресурсы это у нас ну грубо говоря папочки который релиза в каких-то там сервисов система и обращаемся через там юрай и просим там просим забрать или там по прочитать что-то находится либо изменить крат концепция с грубо говоря это ноги и rest общается поверх степи а
00:00:02 - 00:02:13
[музыка] кому назвать стиль и методы с которыми ты работал в расти вот патч билет хорошо а можешь мне рассказать разница между пост тут и патч каких ситуациях какой лучше использовать но тут и польши отличается о том что мы патч изменяя весь ресурс а потом мы наоборот потом мы изменяем раз весть иисуса по чину конкретную кого поле меняем пути отправив все боги там сообщение по чем конкретно понял правится ничего такой дополнительный вопрос к этому что случится если мы пытаемся и потом и по чем изменить ресурс которого ещё не
00:01:17 - 00:03:18
существует какой будет результат будет наверное ошибка сервера 100 в обоих случаях мне кажется да потом мы вернем ошибку потому что мы изначально нету такого объекта который мы обращаемся по чем наверное какое-то будет другая логика потому что мы первым потому что я спросил его этот наверно если это отличие ну здесь на самом деле наоборот почти by virtue эту ошибку потому что как он может частично изменить что-то чего еще не существует а вот тут у него же вся информации есть он создаст этот объект
00:02:21 - 00:03:47
состав этот песок поэтому здесь заместитель вместе от того если у тебя есть вероятность того что ты что пытаешься редактировать и этого сейчас не существует но ты хочешь это создать когда патч тебе не подходит разница между постом какая тогда о станок studio пост постом и получается передаем данные на сервер тут но мы как бы создаем этот объект получается вот и мы создаем но и можем отредактировать потом только создаем посылаем отлично от поста в том что я не хотел спросить как на это нету боди с информацией о
00:03:16 - 00:04:59
через туман через адресную строку и соответственно если мы также можем создать там гибнут передать эту информацию на сервер мы тут будет не сик верно лучше использовать пост по протокол https видно что это не трать первое собеседование ты можешь сама же аппетитно после даже когда их не знают то такая серия по этим ладно давай теперь пойдем дальше мы прошли и методы по говори давай посмотрим из чего еще дальше состоит http request кроме лишь тебе метода что еще ну ты уже говорил что body методами
00:04:19 - 00:05:40
передаем что еще мы можем передавать мы передаем все дыры получаем статус код ну и там служебной информации находится ну status code мы уже в response to speak time что мы еще при квестов давида короче еще как минимум две штучки может федор body что-то я я скажу а ты не расскажешь почему такая структура еще можно к вере параметры передавать которые могут отображаться и еще можно cute передавать может теперь мне объяснить почему так придумаю почему то есть body есть header и есть кларе параметры зачем почему нельзя все это в
00:04:59 - 00:06:23
одну 5 и зачем в наш три разных вариаций для передачи данных и в каких случаях какие данные в какую лучше за свои параметры из опыта получается они нужны для но грубо говоря там античные какие то запрашиваются [музыка] удобно и и как переменную передавать [музыка] строку запрос и добавлять конкатенировать на самом деле здесь больше ты как пользователи то увидишь в йорке это будет не скрыто тебя в отличие от федора и возможно тебе это даже преимущ потому что ну допустим какие-то де индификатор и например ты
00:05:56 - 00:07:39
как пользователь на сайте часто очень делаешь какие-то одинаковые действия заходишь там на свои закладки берешь там первую какую-то там закладку и так далее ты можешь сохранить прямую ссылку сайта с этой закладкой и место того чтобы на главную страницу приходить сразу же к какому-то элементу которая чаще используешь и вот как раз кори параметр позволяют тебе мгновенно переходить к определенному статусу определенному объекту ресурсу фильтрации к определенные так далее через хедира ты бы не смог бы это
00:06:58 - 00:07:58
сохранить тебе пришлось бы заходить на главную выбирать все эти фильтра нажима теплой и после этого у тебя бы результат был ну ты и когда было немного сохранить как раз в этом разница что с квестом акварели давай теперь поговорим что такого там интересно статус потоками у нас есть до 5 статус кодов там 100 информационные 200 успех 13 married директ в 400 ошибка клиенты 500 и ошибка сервера эти статусы они как бы есть как и написано там стандарты также можно создавать там дну разработчикам создавать свои
00:07:29 - 00:09:00
цены дело значение ну а не грубо говоря нам дают информацию в ответном вернул сервером отключена хорошо представьте теперь все ситуаций у тебя есть какой-то веб-сервис и не знаю там по получению каких-то товаров то ты говоришь не знаю там категорию например футболка и что-то там топ-10 футболок и возвращается тебе нужно написать смоук тест для этого сервиса расскажем никакой к стратегии бы ты пользовался как будто выписал смог ясно такой контент то есть нам возвращается к ним вопросы ну у тебя есть and point
00:08:15 - 00:09:56
по возвращению какой-то информация о товарах там футболки там джинсы что угодно как ты смог тест какой то писал на начинают выбрал бы эти пикет на этот npn вы попробовал бы проверить что возвращается ли топ-10 посмотрел на статус если так описано можно у тебя может быть даже swagger есть про который только на swagger у тебя есть видишь какие есть поинты какие штуки методы реализовано я просто общую стратегию как бы к тестеру но общая стратегия как также как там сияет с там сначала проверяем комп
00:09:15 - 00:10:40
позитивный сценарий то есть запрашиваем get поэтому ручки и смотрим что у нас там возвращается селеном отвечает возвращает то что мы хотим там обычно ты проверять просто status code или сам response базе тоже проверяется ну например там ты проверяешь что тебе возвращается товар у товара есть какие-то поля не знает имя стоимость должно вернуться на как ты это будешь проверять тебе возвращается на меня просто джейсон как ты можешь проверить что джейсон содержит правильными поля формат количество полей
00:10:00 - 00:11:29
[музыка] порядок отображение полей как это можно проверить как но даже сам там счас лаггера [музыка] тестах не но у нас есть и мы ответа от сервера оборачиваем позже класс создаем там объект джаве который имеет поля с поля который мочиться там с джейсоном объектом джейсон переводим мы его и реализуем позже close to close и проверяем там послали туда запрос и проверяем что у нас в этих полях записаны какой статус код какой body уступать должны содержать айди такой-то если у тебя есть товар то ты делаешь
00:10:56 - 00:12:56
морщинкам машин статусом стилизация стерилизация у тебя будет java объект которым будут все эти поля айди ним quantity прайс вот по как ты проверишь что они у тебя в правильном порядке что они вообще или например лишних поленья вот представьте ситуацию тебя есть java class которым 4 этих поля а джейсон тебе еще там 50 по ли каких-то возвращает и ты считаешь ну вот в одном случае ты можешь закрыть глаза на главном нужные нее есть а вдруг ты проверяешь что главное чтобы вот ровно совпадал как это все можно настроить
00:12:13 - 00:13:30
рестрим много полей не имеет джейсон объект он кависа реализуется уже в коллекцию лист нет я имею ввиду не не в том плане что у тебя несколько объектов of the planet что у тебя сам товар может иметь несколько полей кроме того что мы говорим что нам нужно то-то по стоимость товара название количество там еще возвращается производитель похожие товары не знаю там во время доставки где можно купить муразе ну то есть дополнительные поля который тебе не нужно допустить как проверить что у тебя только нужные поля
00:12:55 - 00:14:11
вернулись и в нужном порядке допустим аиде будет первым потом наименование потом количеств потом стоимость аниме каком другом [музыка] может быть teka это можно сделать которая помогает при сериализация может быть какие-то библиотеки использовал для начали вышка ссоры там используются и для через джексон джексон это можно сделать дома может именно последовательность и функционал не используя просто проверял наличие ну ладно давай нежели чистый вид курсе это просто я расскажу когда ты используешь джексон и у тебя есть тот же
00:13:33 - 00:15:08
класс то можно навесить на него несколько разных аннотаций во-первых ты можешь к каждому полю навесить аннотацию с его именем и тогда тебе не обязательно чтобы название поля совпадало с названием джейсон объекта например у тебя есть айди там то можно писать идентификатор ставят часов на аннотацию что это айди и тогда он будет понимаем что идентификатор нужно взять джейсон объекта и de oro что у тебя есть ты можешь приоритет полей указать плюс ты можешь сказать джейсон сигнала дополнительные поля или
00:14:26 - 00:15:34
нет и в этом плане если у тебя будет больше о лечим тебе нужно он будет либо падать с ошибкой тебе тест будет говорить что ожидалось четыре поля вернулась 5 либо он будет спокойно проходить там что нужно ему поля есть это все через час он аннотация делается ну и вопрос тут вопрос знаешь ли ты с помощью чего делается машинка морщинам кое-какие дополнительные нотации ты можешь использовать потому что не всегда достаточно просто проверить что полян есть и нужное значение иногда нужно проверить их формат их структуру порядок
00:15:00 - 00:16:02
и если какие-то другие поля у меня еще вопрос такой был у меня из опыта было что джексон серьезного объект ну айдишник которые там маги нижнее подчёркивание бьет меня он создал в классе джаве просто иди прямо пилы волка и нижнее подчёркивание но у меня при этом тесте кабы не видел рекламу и дичь на кота с ним нужно было это нижнее подчеркивание именно руками описывает вот как раз по моему поможет тебе аннотация когда у тебя есть идентификатор там уж его как угодно назвать и поставить она также которая
00:15:30 - 00:16:51
указывается какого поле джейсона тебе брать в 2 раза вроде как она и сделал 100 мотаться но она убрала просто сама это нижнее подчеркивание 10 дней я не помню у меня таких примеров вроде бы в ближайшем фигня была у тебя есть еще варианты например ни один раз пришлось не джексон использовать адресу если ты работал еще с каким-то другим библиотеками можешь называть разница там другая может помочь тоже будет посмотреть какие у вас так хорошо про сервисы мы поговорили давайте теперь поговорим не чисто про
00:16:11 - 00:17:35
сервисы а больше уже наверно применить на сервисную текстуру мы все-таки ищем тестировщиками микро сервиса можно сказать чем микро сервисной архитектуру от монолитные архитектуры отличаются сначала нас здесь монолит которые приложение во первых это давая база в одном месте все модули функционал и они там разложены условно говоря по пакетам там по папочкам ну это как бы исторически так сложилось что светом сначала работали с монолитом потом поняли что монолит очень сложно изменять рефакторинг [музыка]
00:16:58 - 00:18:38
сейчас модно говорить танки марк низкий процент процесс изменения и потом я так понимаю начали вводить началась делиться сервис-ориентированной архитектура сервисы конкретные платежный сервис что владеют валидации то есть ну как грубо говоря функции системы выделялись в отдельные там в отдельный еще пока не микро в отдельной системы взаимодействия сервиса макросы опять же поэтому rest api и между остановится с теми потом поняли что этот подход тоже как не супер быстрый в плане реализации в том что все равно остается
00:17:53 - 00:19:52
там большие куски начали дробить уже на метро сервисы на микро сервисы которые обязуют конкретную функцию системы то есть взять всего тамуна биллинга по этой микро сервис который просто проверяет там валидность карты там проверяют одну транзакцию там купить то есть мы сначала монолит диком позируем до макро функций потом макро функциям и еще диком позирование микро функции теперь у нас монолит это набор микро функции но и такое для общего понятия что микро сервис хороший микро сервис условно говоря
00:19:00 - 00:20:37
напишут один разработчик за там за две недели если это как бы правило не выполняется наверное этот micro series можно еще на более мелкие части а не будет ли слишком у этого уж сложно если у нас дивная монолит один макро сервисов 10 микро сервисов 100 а ты еще хочешь на тысячи 900 тысяч команд это нравится в этом процессе и все-таки там опять же верно надо привязываться к какой-то бизнесу реки бизнес-задачи реализует можешь назвать получается тогда плюс от того что мы на канале то перешли к не к
00:19:51 - 00:21:10
сервису плюсы это быстро итераций а вот этих микросферы состоянием маленький могут быстро рисовать функционал и так быстро то получается небольшие команды это делают небольшие команды вот как мне понять это плюс и минус небольшой команды это дело до dota я множество небольших команд но они так плюс можно сказать что они сосредоточены на конкретной задачи и они погружаются у нее то есть одному человеку легче понять какой то один один модуль чем весь монолит целиком отапливать экспертизу своей области а
00:20:35 - 00:22:09
что происходит с микро террасной команды после того как анализа разрабатываются microserver что их там его и увольняет всем спасибо за проверку но от рождения клиентов со пока продукт не думаю не стоит на месте он там развивается и называется микро сервис микро сервис на команда может несколько микро сервис зарабатывать по цепочке можно так так давай теперь про плохие вещи поговорим какие могут быть минусы при переходим на сервис на другие вещи это когда мы да у нас становится много маленьких систем нужно у нас интеграция
00:21:36 - 00:23:00
[музыка] нужны четкие правила интеграции микро сервисами то есть когда они открывают свой api для внешних систем они должны его prime там задокументировать что другая команда смотря на эту документацию уже смогла там взаимодействовать с этим с этой системой и соответственно минус это вот получать консистентная среда между вот этими множествами микро сервисами там уже начинается использовать как синхронной атаке цифрами и взаимодействие с системами плюс синхронного взаимодействия что у нас всегда на каждый на саб запросы есть
00:22:23 - 00:24:17
всегда ответ если это запрос не был там не были ни услышаны не был услышан системой то мы всегда можем тому чтобы откатиться в предыдущего состояния и попробовать заново открыть эту сессию запрос ответ в синхронном взаимодействии у нас появляется так называемый брокере сообщений которые как бы получается artistry рует передачу запрос и ответ от берут на себя ну из популярных этих брокеров сообщения кафка по факту нам получается что чтобы от монолите перейти к микро сервису нужно чтобы наше приложение оно изначально
00:23:22 - 00:24:58
хорошо на все это ложилась поэтому можно сказать мне существуют ли приложение которое лучше переходит по микро сервисы которые у меня нет смысла вообще переводить на микро сервис или всем абсолютно рекомендации переходите на сервис если какие-то условия когда можно переходить когда смысла никакого нет или когда это наоборот хуже сделает стандартное приложение которое фронта общается с бэком здесь еще мобилка которая обращается сбоку можно выделить отдельные сервисы на эти взаимодействия когда мы
00:24:17 - 00:25:45
когда мы общаемся с базами данных мне кажется там должны быть как бы отдельный модуль который общается в базы данных если все микро сервисы будут взаимодействие с базой то там получится полный хаос там должен быть какой-то монолит который принимает на себя здесь исходящие потоки уже там работает с базой то есть чтобы подходы распределенных системах когда можно взаимодействовать с базой данных тогда она распределена на нескольких серверов так ладно давай наверное пойдём дальше мы поговорили больше в принципе про
00:25:15 - 00:26:50
микро сервис на архитектуру давай в разрезе тестирование чем тестирование микро сервисная архитектура может отличаться от истины монолитный сходить новые уровни тестирования появляются еще что-то [музыка] тестирование но стандартно у нас пирамиду тестирование unity стынут orbison и тест этом системные виден контраст и применимо к монолиту из применимо там в общем числе и к сервисам микро сервисов как можно понять из того что у них много взаимодействий очень наверное большой слой связан с интеграциями
00:26:06 - 00:27:37
интеграция сервиса между компонентами системы ну как мы допустим в микро сервисной команде разработали на этом сервис получения полезной информации о клиенте наши соседи из другой команды разработали сервис генерации заявки не потом пытаемся сделать синхронизацию то есть мы там получаем в треть в каком-то микро сервисе обращаемся к первым двум и говорим вот нам нужно от клиента фил нам нужно от заявки не знаю там кредита еще что-то у нас наступает проблема связана с тем что мы должны на одном жить языке
00:26:54 - 00:28:12
разговаривать должность строить микро сервисы друг друга у нас появляется необходимость с тестированием контрактов можно сказать пожалуйста контракт на тестирование сервиса в каком уровне тестовой пирамиде она начинается чем его необходимость можно там его избежать например про контакт про контракт на тестирование могу сказать что мне кажется она это все равно уровень интеграции [музыка] интеграционный уровень и получается когда мы связываем несколько систем в одну но подарок рациона давайте сначала
00:27:33 - 00:29:11
определимся позиция например у нас есть юнит-тесты нас есть компонентные ты осталась intent с то интеграционный нас будут перед модульными компонентами тесты или после то есть мысль функционал будем проверять нашему микро сервиса или контракта та курица и хе-хе но я бы проверил внешние что сервис что он наружу дает там правильно и неправильно потом уже гонял контракты через эти канал сначала компонент это потом интеграционные на самом деле про контракт и часто очень используют то что контракта начинаются
00:28:38 - 00:30:06
раньше даже функционального тестирования и у контракт нам тестирован на самом деле несколько подходов есть container дрейвен контракт с то есть продюсер дредом контракт с можешь ли ты рассказать в чем разница между я сегодня читал статью троцкая дедлайн [музыка] перевода консилер продюсер потребителей is that the создает [музыка] потребитель ну и соответственно мы должны верхние уровни на 100 то что у меня сейчас понимание создалась что мы должны создать этот контракт по правилам то система в которой
00:29:25 - 00:31:01
создается не 5 его через нашей интеграции потребителю ну либо замок ать и посмотреть что у нас там как бы вообще процесс идет или нет его уже передать той системы не как бы там уже получается но уже то получится gentoo and тестирование несколько микро сервисов там связываем с собой [музыка] размытая понимание но в 1 давай я тебе расскажу разница между консерва продюсером то есть этого кто инициализирует создание контракта например у вас ничего нет просто зайти самый первый микро сервис вы будете продюсером этого не консервов
00:30:27 - 00:32:09
у вас еще нет никого кто бы сказал бы вам каковым контракт надо реализовывать бизнеса создаете самый первый важный контракт вы не на кого больше не ориентируетесь то есть вы у вас нет зависимости внешних к другим микро сервисом вы самый маленький unit если мы представляем какой-то иерархии деревьев мы вот самый нижний лепесточек у которого нет зависимости от других микро there is мы будем двигаться продюсером то есть мы сами себе говорим что мы будем возвращать вот такие тополя никто нам это не говорит потому что еще нет
00:31:25 - 00:32:32
никого кто бы мог бы он мог это сказать но потом появляются консьюмер а те кто будут использовать наш маленький микро сервис будут получать данном клиенте и они уже могут делать это со стороны консилер драйвер они говорят мы хотим вот теперь делать заявку нам нужно чтобы был какой-то сервис который возвращает филом клиента него паспортные данные не знаю сколько он сейчас зарабатывает истинные дети и все остальное и он создает этот контракт и потом мы смотрим есть ли какой-то сервис который этот
00:31:58 - 00:33:05
контракт удовлетворяет если и его нет то мы создаем такой микро сервис если частично кто-то удовлетворяет мы можем его исправить то есть с точки зрения контактов это нормально увеличиваете свои покрытие полей например у тебя есть micro сервис который сначала возвращает фио и паспортные данные но нужно еще нижняя там зарплату возвращать не будет нарушением контракта если ты новое поле будешь возвращаться будет нарушением контракта если ты существующие поля поменяешь либо их название либо возвращаемое значение либо не знаю
00:32:31 - 00:33:49
какие то как ограничения есть например раньше это был максимум три символа теперь ты максимум 4 возвращаешь это тоже может быть проблему то есть и не поменялся как string возвращался такая возвращается но всем какая-то структуру поменялось то есть контракт это больше про структуру то есть я хочу от тебя арматор их то данных мне без разницы что там будет возвращаться больше данных потому что она реализована таким образом что у одного продюсера может быть несколько контейнеров представим все ситуации потом будет разработан еще один
00:33:11 - 00:34:08
микро сервис которому только силу клиенту нужно он не будет смотреть на поля которые возвращают паспортные данные и ему отлично подойдет уже существующие сервису такой а мне только фиона поэтому контрактные тесты они направлены на каждые взаимодействия консьюмер продюсер и вот здесь разница между container создает контракт либо продюсер создает контракт обычно все-таки делается с консьюмер driven ну там когда у тебя уже появляется несколько продюсеров ты можешь со стороны консилера говорить что
00:33:40 - 00:34:44
же конкретно тебе нужно ну и получается если учесть один сервис у тебя обычно минимум один контракт и есть на какой-то другой сервис а если и ты сам еще внутри себя какие-то микро сервис создаешь я может быть у одного сервиса несколько контрактов одни продюсер другие container то есть от одного я что-то хочу а другому я что-то отдаю и вот в таком виде у тебя это будет либо ты продюсер для кого-то либо ты кондиционеры для kolob либо ты одновременный продюсер cantina хорошо теперь идём дальше ну ты уже про спринкл out контракт виден
00:34:11 - 00:35:24
говорил если какие-то другие инструменты для контрактного тестирования потому что он как раз spring love contract он больше только про продюсер контракт с тинк не особо-то поддерживать антимир контракт с если какие-то инструменты где я боюсь ошибиться но там что то что мог им вещей что там такое мукам вести видимо как раз один клуб contracts пояс есть еще один инструмент который называется факт уткой все еще есть инструменты я например только использовался ленка вот contra и пакт факт как раз поддерживает консилер
00:34:49 - 00:36:02
driven в как раз его как раз преимущество в том что например ты можешь создавать контракты не только от микро сервисах микро сервису но это какой-то внешней системы например если у тебя есть белое команда которая разрабатывает в приложении она тоже используется какой-то микро сервис у себя внутри и они могут написать контракт ю ай команды сказать меня от некого сервиса нужно чтобы они возвращали вот эти вот поля этому здесь консилер contracting видео дополнительное преимущество контракты писать не только от микро
00:35:27 - 00:36:35
сервис click.ru сервису но и от uiaa каких-то gateway'ев и прочих подписчиков которые ваши изменения в этом плане факт нам даже более широкий инструмент теперь говорим про другие слои если какие-то особенности в тестировании микро сервисов на компонентного ли модульном уровне в отличие от монолитов особе ности тестирования ну или как-то будешь тестирует астра скажи вот у тебя есть micro сервис ты будешь его так же как обычно тестировать как мы уже говорили смог тесты позитивное или что то еще я
00:36:02 - 00:37:21
бы начал с подходом к тестированию со стороны публичного арки которые он дает [музыка] взаимодействие с ним валидно так как описано так как хотя там с требованиями [музыка] ну то есть у нас есть один микро сервис неё есть там публичное мы проверяем все возможные варианты и тимати потом мы можем как бы собрать цепочку этих микро сервисов и проверить если они там выдают какой то итоговый результат догнать по ним есть получается сквозное больше intent и стиль за шагом и вот такой вопрос на сквозном
00:36:51 - 00:38:42
и на компонентном на каком из уровней ты будешь какие-то внешние взаимодействовать микро сервис может вообще какой то все от партии tool использовать на каком из них ты реально будешь его используется на каком ты будешь просто но к тете взаимодействие компонент на момент and но получается на инту эн мы используем текущую реализацию есть больше реальный сервис использовать их с реальным сервисами потому что нам надо как бы как система работает живую поверить и загрузчик компонентном уровне да можно
00:37:55 - 00:39:18