Introduction
00:00:00Введение в пробное интервью с Акшаем, который имеет большой опыт в Java, технологиях пользовательского интерфейса, базах данных и программировании. Основное внимание уделяется проведению пробного интервью в Naveen Automation Labs.
Resume
00:01:00Опыт и ответственность Навин и Акшай обсуждают опыт Акшая в качестве аналитика по тестированию автоматизации с пятилетним опытом работы в банковской сфере. Он работал над различными инструментами, такими как Selenium, Java, Maven, Cucumber, TestNG для автоматизированного тестирования. Его текущий проект включает автоматизацию настольного приложения на основе критериев приемлемости пользовательских историй.
Функциональное тестирование и автоматизация Акшай занимается как функциональным тестированием, так и автоматизацией. Он поддерживает функциональную команду во время регрессионных сценариев или во время развертывания, создавая ручные тест-кейсы, выполняя их вручную или с помощью автоматизированных средств. В своей нынешней команде он является единственным ресурсом для автоматизированного тестирования.
Критерии завершения истории пользователя В своем трехнедельном цикле спринта, использующем портал Azure DevOps для ежедневных действий, как только функциональные тестировщики закрывают историю пользователя после завершения своих тестов в соответствии с критериями приемлемости, указанными в истории пользователя; затем со стороны Akshay они открывают новые технические истории, определяя, какие регрессионные тестовые примеры следует рассмотреть для автоматизации.
User Story
00:05:57Автоматизировать максимальное количество сценариев из истории пользователя непросто, особенно для сложных приложений. Если автоматизация не может быть завершена в течение спринта, история пользователя остается открытой и переносится на следующий спринт в зависимости от емкости.
Sprint Backlog
00:06:41Журнал невыполненных работ спринта включает функциональное тестирование, автоматизацию и ожидающие публикации. Если автоматизация не завершена в текущем спринте, она должна быть приоритетной для следующего спринта, чтобы избежать конфликтов с существующим кодом во время производственного развертывания.
Importance of Automation
00:08:11Важность автоматизации и регрессионного тестирования имеет решающее значение для завершения пользовательских историй. Без автоматизации команда не сможет запустить пользовательскую историю в производство, даже если ручное тестирование завершено. Важно подчеркнуть важность автоматизации при решении проблем и ошибок, которые могут возникнуть в будущих спринтах.
Definition of Done
00:09:22Определение done (DoD) устанавливает правила, когда пользовательская история считается завершенной. Оно должно включать критерии автоматизации, чтобы гарантировать, что охвачены все аспекты, такие как функциональное тестирование и исправления ошибок. Без пунктов автоматизации в DoD пользовательская история не должна помечаться как выполненная.
Automation in Agile
00:11:46В гибкой среде вопросы автоматизации и контроля качества поднимаются во время ретроспективного совещания sprint. Именно здесь инженер по контролю качества выделяет моменты с точки зрения автоматизации, чтобы сделать приложение более надежным и эффективным. Окупаемость инвестиций (ROI) автоматизации имеет решающее значение при непрерывном внедрении, поскольку она экономит время, затраты и помогает продуктам быстрее выходить на рынок.
Return of Investment
00:14:27Автоматизация возврата инвестиций (ROI) приводит к значительной экономии времени и средств для каждого проекта. Это также повышает качество продукта за счет уменьшения количества ошибок в процессе интеграции посредством сквозного тестирования, что приводит к более быстрому развертыванию и большей стабильности.
What will you prefer
00:15:10Выбор между присоединением к проекту с нулевым процентом автоматизации или к сформированной команде с существующей автоматизацией. Предпочтение первому из-за возможности личностного и технического роста, начиная с нуля, привлекая заинтересованные стороны и обучаясь выбору инструментов и технологий.
Factors to consider
00:18:04Учитывайте область применения, идентификацию объекта, использование приложения и рекомендуемые действия при определении того, какие тестовые примеры или варианты использования являются наилучшими кандидатами для автоматизации. Область применения относится к актуальности с производственной точки зрения; идентификация объекта оценивает, насколько легко можно идентифицировать объекты; использование оценивает взаимодействие клиента с приложением; и, наконец, принятие решения о частичной автоматизации, полной автоматизации или ее отсутствии на основе этих факторов.
Scope
00:19:28Модуль scope охватывает функциональное тестирование, идентификацию объектов и использование модулей. В нем также рассматривается, следует ли внедрять частичную автоматизацию, полную автоматизацию или не использовать автоматизацию вообще.
Criteria
00:19:59Повторяющиеся задачи для нескольких продуктов и пользователей отнимают много времени, особенно при регрессионном тестировании. Автоматизация может упростить эти задачи, такие как развертывание и тестирование конкретных тестовых примеров.
Language
00:20:48Докладчик использует Java для автоматизации и знаком с основными терминами Java.
Polymorphism
00:21:13Полиморфизм в Java относится к способности одного объекта принимать множество форм. При полиморфизме во время компиляции мы присваиваем ссылку на базовый класс и создаем объект, в то время как полиморфизм во время выполнения включает в себя приведение сверху, где мы создаем объект дочернего класса и присваиваем его ссылке на родительский класс.
Top Casting
00:23:41Приведение сверху включает в себя создание объекта дочернего класса и присвоение ему ссылочной переменной родительского класса. Однако вызов методов, специфичных для дочернего класса, с использованием этой ссылочной переменной запрещен, поскольку родительские классы не могут наследовать свойства от своих дочерних классов.
Down Casting
00:25:33Нисходящее приведение невозможно в объектно-ориентированных сценариях, поскольку мы не можем создать объект родительского класса и назначить его ссылке на дочерний класс.
Class Cast
00:26:04В объектно-ориентированном программировании приведение классов позволяет нам присвоить объект родительского класса ссылочной переменной дочернего класса. Однако попытка приведения несовместимого типа приведет к исключению ClassCastException во время выполнения. Эта концепция отражает сценарии реального мира и является неотъемлемой частью полиморфизма.
Hashmap
00:27:38HashMap - полезная структура данных в системах автоматизации, особенно для Selenium. Она используется для хранения файлов свойств в виде пар ключ-значение, таких как имена браузеров и порты.
Properties File
00:28:56Конференция будет записана, и обсуждение включает использование файла свойств в Selenium для хранения тестовых данных. Также рассматривается чтение определенных элементов и значений из массива JSON с использованием HashMap.
API Response Points
00:30:15Ключи в хэш-карте позволяют легко извлекать значения, например, для точек автоматизации пользовательского интерфейса или рабочего стола. Например, если в определенном местоположении возникают случайные ошибки из-за неверного pin-кода, эти ошибки можно сохранить вместе с pin-кодом в виде пар ключ-значение с помощью хэш-карты. Кроме того, переменные класса класса POJO также могут быть сохранены и к ним можно легко получить доступ с помощью хэш-карт.
Hashmap vs Hash Table
00:31:28Разница между hashmap и hash table заключается в их потокобезопасности и синхронизации. HashMap не синхронизирован, что означает, что если один поток изменяет объект, другие потоки могут не увидеть новые изменения. С другой стороны, Hashtable одновременно синхронизирован и потокобезопасен, позволяя всем потокам получать доступ к изменениям данных во время выполнения. Несмотря на это, HashMap может быть быстрее из-за своей несинхронизированной природы.
Synchronization
00:33:25Хэш-таблица работает быстрее, чем hashmap, потому что она поддерживает синхронизацию и потокобезопасна. Каждый поток будет синхронизирован, обеспечивая правильное распределение памяти.
Stack Overflow
00:34:28Понимание ошибки переполнения стека В Java ошибка переполнения стека возникает, когда размер стека становится полным из-за бесконечного цикла или программы без условия остановки. Это приводит к тому, что JVM выдает ошибку "переполнение стека", которая не перехватывается с помощью try-catch и ее следует избегать.
Сборщик мусора и управление памятью Сборщик мусора работает только с памятью кучи, а не со стековой памятью. Он отвечает за восстановление неиспользуемых объектов из памяти кучи.
Завершить метод в обработке исключений Метод "finalize" используется при обработке исключений, чтобы гарантировать, что определенный код всегда выполняется, независимо от того, возникает исключение или нет. Это часть обработки исключений, где он будет выполняться независимо от того, были ли выброшены или перехвачены исключения.
Finalize
00:36:33Метод finalize является частью класса object и используется для операций закрытия, когда объект недоступен или если ни один живой поток не может получить к нему доступ. Метод finalize будет выполнен самое большее только один раз. Если дочерний класс переопределил метод finalize, сборщик мусора вызовет этот метод; в противном случае он этого не сделает.
Final Keyword
00:39:24Ключевое слово final может использоваться для переменных, классов или методов. При использовании с переменной оно предотвращает изменение значения во всей программе. При применении к классу оно запрещает наследование этого класса. И когда он используется для метода в классе, он запрещает переопределять этот метод в дочерних классах.
Practical Example
00:40:19При разработке фреймворка использование закрытого конструктора для классов может предотвратить создание объектов вне класса. Это позволяет лучше контролировать создание экземпляров объектов и доступ к методам внутри класса. Кроме того, это позволяет скрывать данные и абстрагироваться, ограничивая прямой доступ к переменным-членам.
Class
00:42:42В Java существуют классы с закрытыми конструкторами, которые нельзя создать. Например, класс String имеет закрытый конструктор по умолчанию и требует вызова параметризованного конструктора для создания объекта.
Page Object Model
00:43:43В объектной модели страницы мы используем вызов по ссылке для обработки веб-элементов в классах страниц для различных операций со страницами.
Selenium Utilities
00:44:44В Selenium общие операции, такие как отправка текста и нажатие кнопок, могут быть инкапсулированы в класс utilities. Этот класс содержит методы для выполнения этих общих операций непосредственно с веб-элементами. Кроме того, класс utilities может включать действия исполнителя JavaScript, которые работают для всех веб-элементов.
Pass web element
00:47:28При передаче веб-элемента вы сначала создаете элемент, а затем используете его для таких действий, как щелчок. Однако использование локатора покупки позволяет click решать, с каким элементом взаимодействовать, на основе локатора. Передача веб-элементов упрощает обслуживание, поскольку изменения нужно вносить только в класс страницы, где упоминается указатель by.
Pass by locator
00:48:38При использовании "по локатору" в методах передавайте только ссылку, а не жестко закодированные значения. В классе page сохраняйте идентификаторы или XPaths для элементов и принимайте решение о действиях по щелчку на основе "по локатору". Предпочитаю создавать веб-элементы заранее и передавать их для выполнения операций.
Pass by locator improvements
00:49:18Передача указателя By вместо его создания и сопровождения может привести к повышению производительности, обработке ошибок, исключений и синхронизации. Такой подход позволяет избежать обращения к серверу или создания веб-элемента до времени выполнения.
Page Factory pattern
00:50:10Шаблон фабрики страниц используется с аннотацией @findBy для создания локаторов с использованием XPath, CSS, ID и name.
How to create custom exception
00:50:54Чтобы создать пользовательское исключение в Java, нам нужно создать класс, который расширяет либо класс Exception, либо класс Throwable. Внутри этого класса мы переопределяем метод toString класса Object и возвращаем пользовательскую строку, представляющую исключение, которое мы хотим сгенерировать.
How to handle custom exception
00:51:30Чтобы обрабатывать пользовательские исключения, создайте класс, расширяющий Exception, или класс Throwable. Переопределите метод toString, чтобы вернуть описательное сообщение для исключения. Используйте блок try-catch в методах, где могут возникать исключения, и перехватывайте пользовательское исключение по его определенному имени.
How to throw custom exception
00:53:42Использование ключевого слова throw для создания и обработки пользовательских исключений в блоке try-catch. Блок catch будет обрабатывать наше пользовательское исключение только в том случае, если оно указано как первое исключение в иерархии блоков catch.
Can I write a try block without catch block
00:54:25Вы не можете написать блок try без блока catch, потому что для каждого блока try, в котором мы генерируем какое-либо исключение, нам нужен какой-либо блок catch для обработки исключения.
Can I write a try block with finally
00:54:46Блок try может быть создан с помощью дескриптора finally без блока catch. Ключевое слово finally гарантирует, что код внутри конечного блока будет выполнен независимо от того, возникает исключение или нет.
Can I create a trap loss without catch
00:55:10Создание потери в ловушке без использования блока catch и прямое определение блока finally является неизученным подходом. Необязательно использовать блок catch, но необходимо включить блок finally, если вы хотите выполнить этот метод.
Tell me in Selenium
00:55:42Selenium 4 представляет относительные локаторы - новую концепцию в автоматизированном тестировании.
How will you handle a complex web table
00:56:11Работа со сложной веб-таблицей требует понимания структуры и данных внутри нее. Это включает в себя идентификацию элементов, использование селекторов XPath или CSS для определения местоположения определенных ячеек и извлечение соответствующей информации для дальнейшей обработки.
How will you select the checkbox
00:56:23Чтобы обработать сложную веб-таблицу и установить флажок, мы можем написать метод, который принимает имя сотрудника в качестве входных данных. Используя динамический XPath, мы выполняем итерацию по каждой строке таблицы, используя цикл for или расширенный цикл for. Разбивая XPath на части before и after, мы используем экспертные локаторы, такие как forward sibling, чтобы найти и щелкнуть флажок на основе структуры веб-таблицы.
Why are you breaking the exponential part
00:57:32Разбиение экспоненциальной части перед экспортом важно для обработки новых строк, добавляемых в таблицу. Это предотвращает сбой жестко запрограммированного экспорта при добавлении новых строк.
Why are you going with the row and column number
00:57:53Использование номеров строк и столбцов является подходом по умолчанию, но его можно упростить, напрямую используя имя сотрудника и применяя концепцию предшествования.
Indexing concept
00:58:05Концепция индексации предполагает использование имени сотрудника для перехода к его определенному столбцу, а затем перехода от этого столбца. Это позволяет нам получать доступ к данным без необходимости явных индексов, просто следуя "дорогам", основанным на именах сотрудников.
For loop
00:58:31Используйте цикл for и средство поиска экспертов, чтобы установить флажок на основе имени контакта или сотрудника. Избегайте обхода всей строки, напрямую добавляя имя сотрудника в этом конкретном эксперте, устраняя необходимость в другом цикле for.
CSS selector
00:59:27CSS-селекторы и обход Селекторы CSS в CSS имеют концепцию прямого обхода с использованием родительских и дочерних отношений, но обратный обход обычно не используется.
Архитектура Selenium WebDriver Selenium 4 удалил протокол JSON wire, присутствующий в Selenium 3. Архитектура предполагает прямое взаимодействие клиентских библиотек с драйверами браузера без необходимости в отдельном протоколе.
Преимущества и недостатки одноэлементного шаблона Шаблон Singleton создает один объект с глобальным доступом к другим классам, сокращая использование памяти. Однако это может привести к проблемам синхронизации во время параллельного тестирования из-за того, что несколько потоков обращаются к одному и тому же методу.
Инструменты отчетности для автоматизации тестирования "Отчет об объеме" предпочтителен для понимания командой автоматизации результатов тестового примера, в то время как "Отчет в формате PDF", сгенерированный из отчета об объеме, используется для общения с заинтересованными сторонами из-за его представления на высоком уровне.