Подготовка к собеседованию на 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 каналы и чаты
Транскрипция видео:
всем привет сегодня с нами Майкл мы сегодня будем проводить пробное мо собеседование на позицию автоматизатор определим гй слабые сильные стороны какие-то рекомендации и так далее обычно собеседование у меня длится полтора-два часа Оно разделено на несколько этапов первый этап где ты можешь ми потом мы перейм к техническим вопросам чтобы я мог понять какой у тебя был опыт Какие навыки у тебя сильные Слабые и так далее А ну и дальше возможно порешаем какую-нибудь задачку на программирование и у тебя также ещё будет шанс
00:00:02 - 00:01:23
сымитировать чтобы ты сам спрашивал бы на реальном собеседовании чтобы например подсветить какие-то свои стороны или свои интересы и так далее если Сосем согласен ко всему готов тогда предлагаю начать как раз с первого этапа истории о себе значит я в тестировании практически чуть больше 2 лет первой части буквально у меня примерно 50 на первую часть своей карьеры в Я работа в качестве по большей степени руч ровка затем перебрался за границу работу и в настоящий момент я работаю зарубежной компании Ну правда
00:00:47 - 00:02:26
большинство Сталки русскоязычного и здесь я больше уже пишу занимался тоже в начале ручным Но вот сейчас переориентировать сци Угу можешь рассказать что-нибудь о своём последнем проекте какие там были фреймворки команда какими задачами ты занимался Да на последнем своём проекте Это был Сай компания аренду автомобилей в основном мои задачи это было населению на языке Java писать автотест Ну вле я состав также Рова изго документации стратегии даже участвовал в составлении плана ну не я его лит ещё по
00:01:41 - 00:03:32
тестированию Вот ну как бы те дизайн тест-кейсы набрасывая тоже определяли мы В общем Какие из них автоматизации будут подвержены писал вот селени нари соответственно результаты репорты руководству и нашим клиентам говори приходилось кетом вки вручную выполнялось да да были безусловно были сложные случаи которы см заро а можешь расказать можешь рассказать По какому критерию ты выбираешь Какой тест мы оставляем вручную даже если его можно в принципе автоматизировать А какие мы автоматизируем Ну или наме
00:02:52 - 00:04:45
автоматизируем в первую очере вву то что отно так называе регрессионном тестированию из ряда вряд из бил надо бы прогнать основополагающие есть наиболее повторяю опять же если изних изних получается заро главный критерий по повторению пото я это сделаю то есть Ну чтобы не тратить много времени это сложно не сложно это ча хорошо получается ты писал автотесты но скорее всего они были написаны на каком-то тестовом фреймворке в котором есть Ja селениум может быть ещё что-то можешь рассказать именно про тестовый
00:03:54 - 00:05:23
фреймворк который вы использовали Ну вот [музыка] н а какие-то отчёты там репорт портал алюр логирование может быть ещё какие-то интеграции у вас были так ну у нас были тест дизайн текес были описаны в стреле и репорты то есть синхронизировались а тебе самому приходилось что-то в тестовом фреймворке исправлять добавлять какие-то вещи доливать или ты только занимался конкретно автоматизацией тест-кейсов Ну я занимался Вот синхронизацией с рейм как бы в в дженкинс Тоже писал там не писал вот эти Тулы
00:04:50 - 00:06:32
на то есть вот это на Гру писали файлики Да Файлик где мы вот эту нашу Джоб расписывали которая запуска в зависимости от переменных системных Том Или ином браузера те или иные группы то есть то есть опыт в написании У тебя есть [музыка] это яфа есть то есть у вас сборщик был а сном приходилось работать да на первой работе тоже чуть-чуть [музыка] [музыка] занимался так означает что ты занимался автоматизацией пользовательского интерфейса открывать браузер на что-то там кликать и так далее А как вы решили проблему с
00:06:03 - 00:07:59
локатора Ну вот например что вам нужно хранить локаторы Где вы их храните используете ли какие-то паттерны для хранения локаторов или ещё что-то с этим связанно так тва есть да старались по странице делать класс и скажем для него соответственно выносили переменные клас приня употребляешь в чем именно преимущество по сравнени с тем что ты пря в самом тесте допустим локаторы будеь писать вообще паттен он делает код более понят то есть не нужно искать Ну может быть и меньше нужно вспоминать где у тея
00:07:10 - 00:08:43
логика в каком классе чуть-чуть то что на СН Похоже инжектит это элемент Я вот недавно сталкивался со статьёй по поводу Вар насчёт того если у тебя есть класс с локатора где ты хранишь именно логику работы с этими локатора допустим у тебя есть кнопка логин пароль и ты соответственно должен иметь метод который вводит логин и нажимает на кнопку вводит пароль и нажимает на кнопку войти Допустим или авторизоваться так вот локатор ми они должны быть в одном классе или в разных классах Как ты думаешь Ну или как у вас это было
00:08:22 - 00:09:43
реализовано Нет ну я писал в одном на не такой был большой проект но в принципе можно по дизайну и сделать специальные класс Тампере которы в тестировании используется page object тебе приходилось использовать видеть или хотя бы просто слышал Не ну я слышал Вообще разные паттерны из J и в принципе мы может быть иногда даже и по паттерны употребляем и не знаю [музыка] Да вот как-то так то есть скажем этоже тот же паттерн да который Угу внедряем класс да там по по интерфейсу с Ты сейчас уже больше
00:09:07 - 00:10:48
рассказываешь про паттерное проектирование в принципе в разработке Gang of банда четырёх это структурные поведенческие и там уж Ну в общем вот эти а именно для тестирования просто есть например есть fact это как бы второй такой паттерн про P fact что-нибудь слышал приходилось Я слышал только про него но не сказал что чтото делал это был именно он и дела со Угу хорошо ну слышал уже плюсик Ну вот ты про него слышал ты себе представляешь чем он отличается от обк есть какие-нибудь идеи Ну и только если опять же основываясь
00:10:14 - 00:11:52
вот на эти джавс паттерны раз это Factory да то это какой-то метод который нам подаёт вот эти классы Какой простой читабельный там это связано с аннотациями над локатора А вот наверно да да да там find by вот вот вот что-то вот что-то такое да ставишь там пропис локатор именно туда и это несколько упрощает код делает прозрач кому-то нано больше нравится распределять написал Ну не только в этом Ну ладно это тоже хорошо так хорошом есть с локатора работа зна на тестировании пользовательского интерфейса
00:11:03 - 00:12:49
тестирование не заканчивается как у тебя например с тем чтобы протестировать не только UI но и например backend допустим разработчики сначала выкатывают те какой-то сервис а потом уже ку на основе этого сервиса будут делать Сможешь ли ты протестировать сервис с какими-нибудь II запросами Как как бы ты это тестировал Ну если нужно что-то простое достим по-быстрому можно использовать пост Если нужно написать Вот какой-то продукт да под это по рашева Угу Ну постман больше для ручного тестирования получается так Ну да да да
00:12:02 - 00:13:31
это если вот по-быстрому нужно да получается по если по-быстрому ну нужно что-то проверить это А если тебе нужно писать естественно автотест как бы в постмане же тоже есть там некое подобие автотестов можно сделать можно эти монитор как-то там называется можно запускать даже что-то есть ну как бы ш более Давай немножечко тогда к теории именно API Вот смотри у тебя есть какой-то сервис а у него не знаю несколько эндпоинт http методы которыми можно это тестировать какие методы в принципе Там могут быть
00:12:46 - 00:14:10
можешь мне рассказать какая между ними разница самые наши два распространённых это и пост которыми Ну в принципе можно всё заменить при желани Да абсолютно А дальше соответстви правильные говорящие методы как Delete Ну ещё есть известно tion он не работал ну вот по поводу говорящий сами за себя методы а на самом деле не все понимают разницу между пост Put и пач Для каких случаев какой использовать Вот я например забыл можешь мне объяснить какая между ними разница в каких случаях какой использовать
00:13:33 - 00:15:06
Да пост опять же в соответствует с этим ре стандартом - это когда клиент подаёт какую-то информацию на сервер соответственно Т - Это для замены а какого-то объекта замены его целиком а пач - это для замены как бы от слова пач Вот за кладочных сти чтобы не заморочиться со всем хорошо понятно у реста есть такое свойство оно называется идемпотентность можешь рассказать что это такое и каким именно htp методом её можно применить я про это читал но вот так в голову надолго не отложил Я знаю что история что если ты несколько раз
00:14:29 - 00:16:25
посылаешь один и тот же запрос Выполняется ли повторно свои действия или одно и то и в некоторых ничего не происходит остаётся тот же объект и вот они Да эти методы делятся на Вот имн ты фактически рассказал такой говоришь я не знаю но вот правильный ответ Ну и есть то что я прямо вот вникаю и разбираюсь Вот и понимаю а здесь вот Я вот это прочитал и понял Ну в общем как-то пробежал Просто со стороны тестирования Если ты знаешь что метод например идемпотентный и он каждый раз будет выполняться одинаково то тебе никакие пререквизиты
00:15:26 - 00:16:50
не нужны Ты просто можешь постоянно его использовать Если же метод не идемпотентный то скорее всего у тебя и тест Будет чуть посложнее потому что у тебя появятся наверно пререквизиты так знаю свои там 5 мето знаю что им нужно что я хочу знаю какую дату я туда будуть зачем вспоминать потент Ну на самом деле полезное свойство конечно лучше знать Ну например вот например метод Как ты считаешь онм патентный илит Каждый когда вызва тебя одинаковый Реут или Ну конечно мы не смотрим на тот случай когда в базу параллельно добавляют
00:16:09 - 00:17:39
товары у тебя естественно разные товары будут возвращаться Ну в принципе получается что там ничего не меняется потому что ну мы один и тот же объект получать Даже если он кто-то и в базу поменяет Для нас это не значит пото что мы-то ничего не давали м кажется это больше м методом которые что-то дают реакция серве Хорошо хорошо Ну я просто такое на понимание тебя спросил Ладно теперь давай больше к автоматизации мы так вручную посмотрели ты говорил о том что есть Шура библиотека можешь мне вот вкратце
00:17:06 - 00:18:21
продать эту библиотеку в чём собственно там фишка Почему её стоит использовать что в ней такого хорошего более наверное простая по сравнению с предыдущими там штуками типа там ttp о то есть там J более удобно разбирается как бы реализуется Вот это наверное главное её ну и плюс большой конечно инструментарий реально можно всё что угодно протестировать ознакомившись с ней один день буквально сесть тестировать сложные как бы ну мне так кажется сложны просто вот по моему видению Шут немного отличается от обычных http
00:17:47 - 00:19:28
клиентов которые ты упоминал то есть в обычном клиенте Ты просто имеешь какой-то отправляешь на него запрос получаешь ответ в каком-то формате и потом Лизу его свои объекты быстрое биоте именно для тестирования вот использовал ты или нет Ну например есть такие библиотеки которые называются bdd beh язык геркин там используется Ну я на уровне учёбы знаком сбером вот МБЕ как раз да И вот Использовал ли ты вот такие же похожие для шуда или про как http клиент использовал просто как http такой продвинутый очень
00:18:43 - 00:20:25
удобный с реально мне там понравилось Можно даже функции туда закладывать Да что портишь Угу Ну как опять же да то есть там фильтры можно изменять запрос Да там логировать через это использовать его как спринги а вводим хорошо и давай такой наверное последний вопрос ppi Вот тебе вернулся респонс Ты хочешь его сериализовать но для того чтобы сериализовать тебе нужно сначала модельку создать Ну де сериализовать Да вот из сона в Java объект перевести тебе нужно сначала Класс вот этот создать модельку как ты
00:19:34 - 00:21:03
это будешь делать Можешь объяснить свои шаги Ну как в начале тупо что видишь J создай клас Вот и можно так то есть если тебя устраивает можно как бы оно же там под капотом через Можно опять же навесить там соответственно атаи и то есть использовать другое имя или или какие-то поля класса то есть будут избегать дереализацию То есть можно не весь не полностью создать количеством полей Да что меньше которые нужно тестировать на остальные навеси А можно целые нуно на остальные навесить Да вот эти Угу А смотри
00:20:21 - 00:21:50
допустим у тебя не подлежит у тебя такая проблема ты э стерилизуем свой класс у тебя он работает месяц два-три а потом вдруг у тебя падает ошибка что извините моделька у разработчиков изменилась они теперь Новые поля возвращают но тебе эти Поля не нужны Но моделька падает как это можно исправить на со стороны своей модельки и класса чтобы она игнорировала Новые поля Ну вот наверное повесить туда вот эту аннотацию Джексон Угу А какую именно знаешь Можешь вспомнить Ну я так и ну там с игнор там что-то то есть если мне
00:21:08 - 00:22:26
вот сказать я её найду за 3 секунды Да и повешу Ну в принципе достаточно помс хорошо Ну я просто так то есть приходилось ли те такие кейс решать вижу что Ну конечно не наизусть Я тоже скорее всего бы забыл если каждый день бы этим не пользовался хорошо ладно про ipi всё про UI мы поговорили про паттерны поговорили Ты мне даже какие-то дополнительные паттерны говорил Вот давай тогда теперь именно наверное к Джаве переходить такие теоретические вопросы Давай наверное с чего-то такого стандартно простого
00:21:49 - 00:22:59
базового расскажи пожалуйста про оо в Джаве [музыка] значит принцип ооп Ну Java на нём основана он чем удобен тем что всё представляется в виде объектов которые в принципе можно даже представить это ну облегчает понимание и тем кто вот понял эту парадигму ну реально интересно уходить на НМ мне лично эти то есть представление всего в виде объектов и ну и она содержится там на трх или четырёх там таких главных принципов Значит это у нас абстракция наследование полиморфизма и инкапсуляции хорошо так выбрать Любой кроме абстракции чу
00:22:24 - 00:24:28
рассказать как с точки зрения тестировщика это можно использовать так поподробнее Ну любой можно выбрать в принципе это уже полиморфизм Угу допустим только с точки зрения тестировщика это использовать Ну не знаю Ну так же Ну это уже Надо подумать кстати рассказывает легко джаву код писать тоже Ну я тебя за язык Ну ты сам выбрал полиморфизм да да А ну полиморфизм мы используем как понятно как когда мы допустим драйвер там расширяем и расширяем его Ну это наверное наследование сюда там е даже больше
00:23:29 - 00:25:18
да сказать это когда мы расширяем драйвер для допустим Вета и мы как об это тоже как паттерн подходит на него навешивают Да которая у нас значит лисо представляет есть как бы обёртка которая скриншоты делает это мы расширяем они как Получается они наследуются от этого вот драйвера то есть имеют в себе и функцию драйвера и ещё какую можно завернуть когда тебе нужно использовать это вс-таки ближе к насле смотри в полиморфизм есть два таких понятия которые собственно и позволяют использовать полиморфизм они с помощью либо аннотаций
00:24:25 - 00:26:06
используются либо без аннотации можешь вот примеры полиморфизма привести вот что именно реализует полиморфизм полиморфизм Уде [музыка] интерфейс множество реализаций Ну вот с помощью чего ты реализации дополнительной делаешь Какое какую аннотацию используешь Ну может ну смотри себе ситуация вот у тебя есть как сечас вот тетю область ставлю есть класс Animal Ну то есть такой абстрактный класс он ничего не делает ты решаешь О я создам два конкретных типа собака и кошка и у тебя в Animal есть метод говорить например но кошка будет у
00:25:16 - 00:27:00
тебя мяукать а собака будет гавкать тебе нужно сделать Две разных реализации Хотя обе они будут наследовать животное an так вот как ты будешь переопределять или реализовывать метод говорить для кошки для собаки и что это за явление в полиморфизма Нет сейчас СШ применить тестировани или как создаешь классы ты создаешь классы кошка собака делаешь ссылку значит и через эту ссылку в ран тайме ты подаёшь ту тот кла что тебе нужно ится один интерфейс пользователю как бы всё равно он может не знать а как бы программа
00:26:15 - 00:27:49
может решать и пользователь нажимает на кнопку скажи звук и он начнёт гавкать этоша программист В какой момент она гавка с какой она мяукает только вот нужно как-то это с тестированием сейчас да нам в это понятно этос Маши Я имел виду что у в понятии полиморфизма есть понятие оранг и одинг вот про это я хотел тебя спросить мы что-то немного в другую сторону пошли можешь рассказать В чём между ними разница оланг и одинг Да это это не секрет значит overriding - это когда у тебя используется та же сигнатура метода
00:27:06 - 00:28:46
наследникам что и родителям но подставляется другая логика под этот метод и тут кстати вот принцип Барбары лиско один из них чтобы сильно логика не менялась то есть должен чтобы у тебя использовался вот это вот это уже прод принцип да Ну вот как раз оно здесь и сочетается То есть ты делаешь но так чтобы логика в принципе была похожая то есть нет нельзя там написать и а он будет стрелять нужно чтобы он ел там как-то вот с такой-то ложкой и ел там жидкую пищ не надо там делать реализацию хорошо так
00:27:54 - 00:29:36
один это когда у нас разные параметры разные параметры используются есть по разными параметрами ты имеешь в виду разную сигнатуру мето да Ну получается параметры входят в сигнатуру У нас тоже то есть именно ИМТ одно и тоже а параметры у нас будут разные потому что иногда метод хочется чтобы он так назывался идея такая же ты как будто специально вть зна падать ты сказал про Sol ка какие-то другие принципы знаешь там драй Киз ягни что-нибудь ещё ну драй - это все подряд говорят Don't rep Yourself Kiss
00:28:48 - 00:30:19
это что-то что-то Это должно быть всё просто и как для Да it Simple ST так вот Пиши код понятливый Угу хороо наверно ну как бы если Sol это всё-таки там какая-то наука есть [музыка] но всё равно вот в тестировании приходится это всё применять или это только для разработчиков Не ну естественно как бы как это вообще везде мы [музыка] пишем одно из основных правил Кода да не повторяй если есть повторение выноси Чем меньше буде повтор ме нужен лишний потому что лишний код - это всё потенциальные какие-то ошибки
00:29:43 - 00:31:18
будущем то есть выноси и делай там зависит от этого через желательно через интерфейс Угу Так а так мы посмотрели оп полиморфизм Давай тогда немножечко по другим темам джавы пойдём А ну например поговорим про коллекции можешь сказать Э в принципе какая иерархия коллекции что ты использовал Какие интерфейсы Какие реализации так там всё у нас наверху вот этой вот пирамиды у нас интерфейс Collection стоит Угу И от него есть э то есть Set лист и по-моему Q Ну вот в основном конечно Мы работали Я работал с
00:30:32 - 00:32:24
листом И с МАПО но мапа у нас не входит в общий интерфейс Collection потому что там чуть-чуть другая структура данных Аа вот так вот и как бы там есть сорты то есть Есть И то есть сортирует определённый они там интерфейс Я прямо так уже не помню ну то есть есть как бы sorted Map Да там sorted Set А есть ш то есть вот так вот Угу ещё есть ой ещё есть дали есть который у нас от листа зависит и от интерфейса пото что у не как бы двойное в себе имеет Вот эту вот штуку потому что он и лист и такой вот вот например можешь представить
00:31:28 - 00:33:22
ситуацию которой нам нужно как а Link list использовать как тестировщиком ну linked list он по-моему вообще редко используется Есть какое-то правила там его в сравнени с там с листом Да вот две таких самых популярные коллекции то есть там что там хорошо только когда что-то нужно вставлять Или допустим в начало или в конец Ну в конец если он dou есть с двух сторон забегать тогда его только А на всех остальных он как бы ну будет проигрывать же листу Вот то есть тут можно наверное не запаривать использовать лист Ну и соответствено
00:32:25 - 00:34:15
если те по логике Нужна ма то тогда использовать мас структура ключ значения Ну я вот даже не знаю для чего это сильно [музыка] нужно хранятся ссылки на предыдущее На следующее значение Можно например использовать когда тебе нужно Ну вот как например в рде У тебя есть возможность отменить последнее действие а потом его вернуть обратном польва видел такой функци вот как раз здесь можно Ну у нас да мы такое Да мы такое делаем через вот если тебе нужно просто хранить массив элементов ты используешь обычный
00:33:22 - 00:34:56
лист вот в обычных ситуациях Хорошо смотри там ещё есть интерфейс сет вот в чём разница между листом И сетом так самое главное сет - это у нас неповторяющиеся множест est
00:34:11 - 00:34:45