Category: Тестирование

16
Янв
2022

🧪 4 простых шага по найму и развитию тестировщика

Рассказываем, как команде разработчиков подготовиться к собеседованию с тестировщиком (QA) и быстро ввести его в курс дела.

Хорошо, когда путь специалиста по тестированию начинается в команде, где уже есть QA-специалист или даже собрана целая команда – в таком случае его развитие идет плавно и продуманно. Но что делать, если процессы тестирования на проекте еще не построены, а сам тестировщик только начинает первые шаги на этом пути? Предлагаем вам инструкцию по найму и развитию QA-специалиста.

Шаг 1. На что обратить внимание во время собеседования


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

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

Первое: подготовьте вопросы до собеседования. Не нужно спрашивать про белый и черный ящики, или как протестировать карандаш (только ленивый не загуглит ответы на эти вопросы), вы не только потратите впустую время, но и оттолкнете кандидата. Лучше придумайте кейс, который реально случился у вас на проекте, например, форма поиска или может форма обратной связи. Подготовьте несколько несложных задач на знание SQL. Если проект является веб-сервисом, то можно поговорить про REST-запросы и коды ответов. Задайте вопросы про Linux, потому что знание хотя бы основ окажется большим плюсом в снятии логов и дальнейшей работе.

Второе: смотрите, как кандидат думает, а не на его знания – основные знания можно просто зазубрить. Тот же ISQB можно сдать, просто выучив теорию. А вот думать как тестировщик сможет не каждый. Поэтому лучше посмотрите на примере, как человек будет тестировать простую форму, заодно узнаете, как он выбирает приоритеты багов.

Третье: не давите на кандидата своим авторитетом.

Шаг 2. С чего начать знакомство с тестировщиком, а тестировщика с системой


Самый достойный кандидат найден, со дня на день примет оффер и придет работать к вам в команду. Отлично! Часть работы сделана, вот только это малая часть. Любому, а тем более начинающему специалисту, нужны подсказки и заметки, которые помогут начать работу и быстро влиться в проект.

Начать следует с создания рабочей среды: какие доступы понадобятся тестировщику для начала? Доступ к самому тестируемому продукту, к системе управления проектом (например, Jira), к базе знаний, к Git? Будет ли тестировщик собирать проект локально на своем компьютере или сборка ведется на виртуальных машинах с помощью Jenkins? В таком случае туда тоже нужен будет доступ. Подготовив такой список, вы удивитесь, насколько легче принимать в команду новичков, а не только тестировщика с опытом.

Если на проекте нет тестовой документации, то сейчас есть шанс с самого начала сделать ее понятной и полезной. Подумайте, какими вы хотели бы видеть баг-отчеты, может, вам хватит стандартного шаблона, а может, проект имеет свою специфику и без какого-то определенного поля (например, логина/пароля пользователя) будет сложно воспроизводить баг. Нужна ли вам mind-map карта проекта (ее создание как раз поможет тестировщику полностью познакомиться с проектом)? Какие тесты вы хотите видеть на проекте? Будет ли время на их написание? Можно ли потом их будет переписать в документацию проекта, например в ПМИ? Решив все эти вопросы, вы значительно упростите жизнь тестировщика.

Приведенные выше советы – формальности. Следовать им или нет – ваше право. Главное – не бросайте человека одного. Пусть у него будет наставник из разработчиков или аналитиков, кто лучше знает проект. Помогите ему сгенерировать ssh ключ и подложить на сервер для снятия логов. Да, вопросов будет очень много, но, отвечая на них, вы точно не потратите время впустую.

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека тестировщика»

Шаг 3. Когда начинать автоматизировать


Вот прошло несколько недель или месяцев с прихода тестировщика. Он прижился на проекте, тестовая документация в норме, баги быстро находятся и правятся. Не пора ли начать автоматизировать тесты? Ответ, скорее всего, нет.

Любая автоматизация тестирования в первое время требует больших затрат времени и сил. Чаще всего на активно развивающемся проекте их нет. Тем более, если тестировщик один. Поэтому, если вы уверены, что автоматизировать непременно нужно, то сразу же решите, какой процент времени и сил можно выделить под эту задачу в день, неделю или месяц. Если этого не сделать, то всегда будут находиться более приоритетные задачи и баги, и, в конце концов, ни одного теста вы не получите.

Если время было успешно выделено, то можно перейти к следующему этапу: выбору типа тестов, языка и архитектуры. Если опираться на пирамиду тестирования, то разумнее выбрать unit или rest-тесты.

Пирамида тестирования
Пирамида тестирования

Чаще всего unit-тесты пишут сами разработчики, но при желании этим может заниматься и опытный тестировщик. Однако если вы хотите впечатлить заказчика, то можно написать и UI-тесты, правда на их поддержку и выполнение уйдет гораздо больше времени, чем на остальные типы тестов.

Не стоит забывать про CI для тестов, потому что без окружения тесты будут лежать мертвым грузом. Так что, принимая решение об автоматизации тестирования на проекте, сразу же добавьте несколько часов работы DevOps-a.

Шаг 4. Курсы и конференции


Хотелось бы обсудить последний вопрос: это развитие тестировщика как специалиста. Развитие тестировщика важно для качества продукта. Чем больше специальных знаний имеет тестировщик, тем больше сценариев проверки он сможет придумать, больше ошибок предвидит и лучше проверит новые фичи.

В интернете есть множество инструкций по развитию QA-инженера. При желании такую инструкцию можно составить лично для человека, опираясь на его предпочтения. Способов развития есть множество. Лучшие, на наш взгляд – новые задачи, курсы и конференции.

Если с задачами все понятно, то в чем преимущество конференций и курсов? Курсы хороши тем, что сейчас туда добавляют много практики, а также создаются чаты, где можно найти собеседников своего уровня, которые чаще всего сталкиваются с такими же проблемами, что и проходящий курс тестировщик. Нужно следить, чтобы человек не начинал хаотично учиться всем направлениям одновременно, потому что в таком случае знания не успевают применяться на практике и остаются мертвым грузом.

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

***

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

Успехов!

Материалы по теме

02
Янв
2022

🎨 Как нарисовать смайлик и квадрат в онлайн-редакторе графики Paint с помощью Selenium

В этой статье напишем два скрипта, рисующих смайлик и квадрат в онлайн-версии Paint с помощью инструмента для автоматизации действий браузера Selenium.

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

В практике попадаются интересные и необычные задачи. Одной из таких задач является взаимодействие в UI c нестандартными элементами. Поэтому, придумаем задачу, которая на первый взгляд кажется сложной, но на деле оказывается достаточно простой. Пусть она будет звучать так: нарисовать в онлайн-версии программы Paint простой рисунок.

Составим план выполнения задачи:

  1. Открыть Online Paint.
  2. Нарисовать рисунок.
  3. Сохранить его на компьютер.

Перед тем как писать сам тест, нужно подготовить окружение. Это достаточно рутинная задача при создании новых тестов или тестовых проектов, поэтому не буду расписывать долго подготовку окружения к написанию UI теста на Selenium, а составлю чек-лист, чтобы можно было проверить, что мы ничего не забыли (добавлю только, что в этот раз мы напишем скрипт на языке программирования Java и, соответственно, окружение создадим для него):

  1. Добавить Selenium и Junit в pom file:
            <dependencies>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    

2. Скачать дистрибутив Selenium в main/resources (в этом тесте у меня chromdriver):


3. Написать метод для подключения дистрибутива (для удобства вынесу в @Before):

            @Before
    public void start(){
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.PAGE_LOAD_STRATEGY, "eager");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--disable-extensions");
        System.setProperty("webdriver.chrome.driver", "src/main/resources/chromedriver");
        options.addArguments("--start-maximized");
        options.addArguments("--remote-debugging-port=9222");
        driver = new ChromeDriver(options);
    }
    

4. Написать метод закрытия WebDriver:

            @After
    public void stop(){
        driver.quit();
        driver = null;
    }

    

Окружение готово, можно приступим к выполнению. Откроем сайт https://jspaint.app/ и с помощью панели разработчика посмотрим, что же это за элемент используется на сайте, на котором предстоит рисовать.


Оказывается, это canvas. Canvas – элемент HTML5, предназначенный для создания растрового двухмерного изображения с помощью скриптов, обычно на языке JavaScript.

Для пробы пера напишем сначала простой тест для проверки способов взаимодействия с элементом:

            @Test
    public void simplePaint(){
        driver.get("https://jspaint.app/");
         WebElement canvas = driver.findElement(By.xpath("//canvas[@class='main-canvas']"));

         driver.findElement(By.xpath("//div[@title='Кисть']/span")).click();

        Actions builder = new Actions(driver);
        builder.clickAndHold(canvas).moveByOffset(0, -100).
                moveByOffset(-100,0).
                moveByOffset(0,100).
                moveByOffset(100,0).release().perform();
    }
    

Пробный тест прошел легко. Его результат можно увидеть на gif-изображении:


Больше полезной информации вы найдете на нашем телеграм-канале «Библиотека тестировщика».

Теперь усложним задачу – нарисуем смайлик.

Шаги, которые будут выполняться в тесте:

  1. Открыть Online Paint.
  2. Нарисовать смайлик.
  3. Сохранить полученную картинку.

В первом тесте мы получали картинку, двигая пером по заданным координатам. Нарисовать сложную картинку таким способом не так просто. Поэтому можно поменять способ взаимодействия с этим элементом и отправить итоговое изображение с помощью JavascriptExecutor. JavascriptExecutor – это интерфейс Selenium, который позволяет взаимодействовать напрямую с HTML DOM веб-страницы и делает это, выполняя код на JavaScript. Такой способ значительно ускоряет выполнения теста, но теряется полная идентичность действиям пользователя. Является ли это плюсом или минусом – решать вам. В любом случае использование JavascriptExecutor может пригодиться в других тестах, поэтому полезно уметь пользоваться им на практике.

По намеченному плану получается такой код:

         @Test
    public void paintSmile(){
// открываем сайт онлайн пейнта
        driver.get("https://jspaint.app/");
// рисуем смайлик
        if (driver instanceof JavascriptExecutor) {
            ((JavascriptExecutor)driver).executeScript("var canvas = document.getElementsByClassName(\"main-canvas\");\n" +
                    "console.log(canvas);" +
                    "ctx.beginPath();"+
                    "ctx.arc(75,75,50,0,Math.PI*2,true);"+
                    "ctx.moveTo(110,75);"+
                    "ctx.arc(75,75,35,0,Math.PI,false);"+
                    "ctx.moveTo(65,65);"+
                    "ctx.arc(60,65,5,0,Math.PI*2,true);"+
                    "ctx.moveTo(95,65);"+
                    "ctx.arc(90,65,5,0,Math.PI*2,true);"+
                    "ctx.stroke();");
        } else {
            throw new IllegalStateException("This driver does not support JavaScript!");
        }
// сохраняем картинку
        driver.findElement(By.xpath("//div[@class='menu-button файл-(f)-menu-button']")).click();
        driver.findElement(By.xpath("//tr[3]")).click();
        driver.findElement(By.xpath("//button[.='Сохранить']")).click();
    }

    

После выполнения теста можно увидеть такую картинку:


Оказалось, нарисовать картинку в онлайн-Пейнте несложно. Нужно всего-то понять, с каким элементом взаимодействовать и выбрать правильный метод этого взаимодействия.

Выводы

Самые необычные задачи – самые интересные. Но и они всегда выполняются по шагам. Если декомпозировать задачу, то ее выполнение значительно облегчается. Да, во время работы сталкиваешься с определенными трудностями, но это того стоит. Трудности закаляют. Удачи!

Материалы по теме

27
Дек
2021

📚 Топ-10 актуальных книг по QA от новичка до профессионала

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

1. Тестирование Дот Ком

<i>Роман Савин, “Тестирование Дот Ком”</i>
Роман Савин, “Тестирование Дот Ком”

Наверное, это самая популярная книга по тестированию на русском языке, которая отлично подходит для начинающих тестировщиков.

Довольно легкий слог повествования и простая подача материала. С этой книгой вы познакомитесь с необходимой начальной терминологией, чтобы быть «в теме» среди отдела качества разработки ПО. Также она поможет понять, что собственно требуется от тестировщика в решении тех или иных задач. Приведены примеры для простоты усвоения материала.

Рекомендую начать свое погружение именно с этой книги.

Книга в сообществе @progbook

2. The Self-Taught Software Tester

Чхави Радж Досадж<i>, “The Self-Taught Software Tester A Step By Step Guide to Learn Software Testing Using Real-Life Project”</i>
Чхави Радж Досадж, “The Self-Taught Software Tester A Step By Step Guide to Learn Software Testing Using Real-Life Project”

Эта книга – отличное введение в тестирование программного обеспечения для любого читателя. Информация представлена грамотно. Следуя примерам в книге, вы почувствуете, что проходите практическое обучение на реальном проекте.

Если ваша цель – стать тестировщиком программного обеспечения, эта книга станет вашим секретным оружием в становлении первоклассным специалистом.

3. Software testing

<i>Рон Паттон, “Software testing”</i>
Рон Паттон, “Software testing”

Еще одна по-настоящему очень полезная книга для начинающих тестировщиков. В ней вы найдете довольно подробную и очень популярно описанную теоретическую базу тестирования. В довесок, приведено множество примеров для лучшего усвоения материала. Читателя завлечет хороший и доступный язык повествования.

Больше полезных материалов вы найдете на нашем телеграм-канале «Книги для программистов».

4. Introducing to Software Testing

<i>Пол Амманн и Джефф Оффатт, “Introducing to Software Testing”</i>
Пол Амманн и Джефф Оффатт, “Introducing to Software Testing”

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

Книга в сообществе @progbook

5. Тестирование программного обеспечения

<i>Сэм Канер, Джек Фолк, Енг Кек Нгуен, «Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений».</i>
Сэм Канер, Джек Фолк, Енг Кек Нгуен, «Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений».

Данный труд предназначен в первую очередь для продолжающих специалистов, которые хотят познакомиться с теорией тестирования. Написана сложным языком, довольно объемная и требует внимательности при чтении. Затрагивает все концепции тестирования. Прочитав её, вы поднимите свой уровень в области качества ПО.

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

Книга в сообществе @progbook

6. Искусство тестирования программ

<i>Гленфорд Майерс, Том Баджетт, Кори Сандлер, «Искусство тестирования программ»</i>
Гленфорд Майерс, Том Баджетт, Кори Сандлер, «Искусство тестирования программ»

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

Тут детально рассмотрена психология тестирования и тестирование в гибкой среде, показаны наиболее эффективные способы обеспечения качества для программных продуктов.

7. Complete Guide to Test Automation

<i>Арнон Аксельрод, Complete Guide to Test Automation</i>
Арнон Аксельрод, Complete Guide to Test Automation

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

Это надежное и подробное руководство, которое поможет создавать и поддерживать автоматизацию на должном уровне. Охватывает все важные темы, а также дает примеры распространенных сценариев в проектах автоматизации.

Книга в сообществе @progbook

8. Идеальное программное обеспечение

<i>Джеральд Вайнберг, «Идеальное программное обеспечение и другие иллюзии в тестировании»</i>
Джеральд Вайнберг, «Идеальное программное обеспечение и другие иллюзии в тестировании»

Эту книгу следует обязательно прочитать всем специалистам в области разработки и тестирования программного обеспечения. Автор хорошо повествует о ценности тестирования, подводных камнях и общих подходах в разработке и управлению тестированием. Хорошо описаны моменты, на чем тестировщикам следует сосредоточиться, когда дело касается софт скиллов и общения внутри и за пределами команды.

Эта книга – реальное напоминание о том, зачем нужны тестировщики и почему тестировщики никогда не могут быть заменены компьютерами.

9. A Practitioner’s Guide to Software Test Design

Ли Коупленд,<i> «A Practitioner’s Guide to Software Test Design»</i>
Ли Коупленд, «A Practitioner’s Guide to Software Test Design»

Еще одна «библия тестировщика», обязательна к прочтению. В этой книге подробно, поэтапно и с понятными примерами дается описание различных техник проектирования тестов. Автор делится огромным количеством ценных советов, которые помогут улучшить вашу работу уже в процессе чтения. Книга с конкретным изложением, без лишней воды и философии, все четко и по делу.

10. Managing the Testing Process

Рекс Блэк<i>, “Managing the Testing Process: Practical Tools and Techniques for Managing Hardware and Software Testing”.</i>
Рекс Блэк, “Managing the Testing Process: Practical Tools and Techniques for Managing Hardware and Software Testing”.

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

Материалы по теме

01
Дек
2021

Порядок тестирования Pytest

Тестирую flask app с помощью pytest, который проходит тесты в порядке расположения директорий, т.е. у меня сначала расположена директория func_tests, потом unit_tests, в результате тесты падают, если поменять расположение директорий, т.е. …

01
Дек
2021

Порядок тестирования Pytest

Тестирую flask app с помощью pytest, который проходит тесты в порядке расположения директорий, т.е. у меня сначала расположена директория func_tests, потом unit_tests, в результате тесты падают, если поменять расположение директорий, т.е. …

23
Ноя
2021

🐧 Тест для новичков: какой дистрибутив Linux выбрать?

В этом тесте мы собрали 36 популярных дистрибутивов Linux и распределили их в зависимости от потребностей пользователя. Вы просто отвечаете на вопросы, а тест сам подберет список подходящих дистрибутивов для соответствующих целей и уровня п…

19
Ноя
2021

«Чёрная пятница» в GeekBrains

На выбор есть факультеты, профессии, программы и курсы по 7 направлениям: программирование, IT-инфраструктура, аналитика, дизайн, маркетинг, менеджмент и школьникам.
— Читать дальше ««Чёрная пятница» в GeekBrains»

15
Ноя
2021

Как протестировать обученную нейросеть на сухом куске текста

У меня есть обученная нейросеть, которая обрабатывает предложения и предсказывает, является ли оно саркастичным или нет. Так выглядит моя база данных

Я ее обучил через RNN и fit следующим образом
model2.fit(sequences_matrix,Y_train, verbo…

13
Ноя
2021

🐍 Создайте автотест Web UI на Python и Selenium за 7 шагов: инструкция для новичков

Если вам нужно тестировать веб-интерфейсы и логику отображения графических блоков на странице или просто автоматизировать работу в браузере, эта статья для вас. Читайте инструкцию по созданию автотеста на Python и Selenium за 7 простых шагов.

Мы будем использовать Selenium совместно с Python версий 3.x.x. Цель статьи – не дать фундаментальные знания по теории программирования и написания автотестов, а заинтересовать в этой области и показать, как они пишутся в целом.

1. Установка необходимых компонентов

Для начала работы нам потребуется установить Python на рабочую машину.

Переходим на официальный сайт Python и качаем установщик для вашей ОС (мы будем использовать Windows). В процессе инсталляции поставьте галочки на добавлении компонентов в системные переменные PATH. Дождитесь завершения процесса, и если программа попросит перезагрузки, перезагрузитесь. Если у вас Linux, интерпретатор может уже присутствовать в системе, в противном случае стоит установить его из репозитория пакетов вашего дистрибутива.

Проверьте корректность установки, перейдите в терминал (в Windows нажмите Win+R и запустите cmd или Alt+Ctrl+T в графической среде Linux). Выполните следующую команду:

        python --version
    
<i>Рис. 1. Должна быть выведена версия, а если что-то не получилось, проверьте выполнение по шагам и повторите попытку</i>
Рис. 1. Должна быть выведена версия, а если что-то не получилось, проверьте выполнение по шагам и повторите попытку

Далее нам понадобится сам Selenium:

        pip install selenium
    

Дождитесь завершения установки. Поскольку мы будем писать тест, воспользуемся популярной библиотекой pytest. Устанавливается она аналогично:

        pip install pytest
    
Для создания приложений нужна интегрированная среда разработки или IDE (integrated development environment), но можно писать код и в обычном текстовом редакторе. Я выбрал самую популярную и удобную среду PyCharm от компании JetBrains.

Чтобы работать с браузером, помимо Selenium потребуется веб-драйвер: в нашем случае ChromeDriver – по сути это связующее звено в цепочке. Обратите внимание, что версия драйвера должна соответствовать версии браузера и вперед – к созданию проекта и написанию первого скрипта.

2. Первый скрипт с использованием драйвера

Все компоненты готовы, давайте создадим новый проект. Для
этого запускаем PyCharm и в открывшимся окне выбираем New Project.

<i>Рис. 2</i>
Рис. 2

Указываем
имя проекта и нажимаем Create.

Рис. 3
Рис. 3

Напишем первый тест, чтобы проверить работоспособность драйвера.

<i>Рис. 4. Пример кода в файле main.py</i>
Рис. 4. Пример кода в файле main.py

В качестве примера ресурса для тестирования возьмем
популярный сайт для практики автоматизированного тестирования: https://www.saucedemo.com.

Кейс:

  • Зайти на страницу.
  • Найти элемент по id.
  • Вывести в консоль сообщение с результатом поиска.
main.py
        from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(options=options, executable_path=r'C:/Users/.../.../chromedriver.exe')
driver.get("https://www.saucedemo.com/")
input_username = driver.find_element_by_id("user-name")
if input_username is None:
   print("Элемент не найден")
else:
   print("Элемент найден")

    

После
ввода кода необходимо установить библиотеку Selenium в наш проект.

Для
этого нажмите на подсвеченный текст в редакторе, нажмите Alt + Enter и далее
выберите Install package selenium. Это нужно делать для
каждого неустановленного пакета.

<i>Рис. 5. Пример установки пакета в проект</i>
Рис. 5. Пример установки пакета в проект

Запустить сценарий можно во встроенном эмуляторе терминала IDE или в любом другом:

        python main.py
    
<i>Рис. 6. <span>Пример
запуска скрипта из IDE</span></i>
Рис. 6. Пример
запуска скрипта из IDE

Если все установлено правильно, должен запуститься браузер,
который откроет страницу. Результатом запуска нашего сценария на Python, будет
сообщение: “Элемент найден”.

Рис. 7. Результат выполнения скрипта.
Рис. 7. Результат выполнения скрипта.

3. Поиск элементов

В нашем скрипте присутствует следующая строка:

        input_username = driver.find_element_by_id("user-name")
    
Метод find_element_by_id позволяет процессу найти элемент в разметке HTML по наименованию атрибута id. В реализации драйвера есть несколько способов поиска элементов на странице: по name, xpath, css, id. Поиск по css и xpath являются более универсальным, но он сложнее для начинающих. Использование поиска по name и id намного удобнее, но в практической разработке используется редко. Далее я буду использовать только xpath.

Теперь
давайте напишем кейс аутентификации пользователя на странице входа:

  • Шаг 1: пользователь вводит корректный username и password.
  • Шаг 2: нажимает кнопку ввода.
  • Ожидаемый результат: пользователь попадает на главную страницу магазина. Проверка заголовка на соответствие “PRODUCTS”.
main.py
        import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys


def first_test():
    options = webdriver.ChromeOptions()
    options.add_experimental_option("excludeSwitches", ["enable-logging"])
    driver = webdriver.Chrome(options=options, executable_path=r'C:/Users/.../.../chromedriver.exe')
    driver.get("https://www.saucedemo.com/")

    # Поиск элементов и присваивание к переменным.
    input_username = driver.find_element_by_xpath("//*[@id=\"user-name\"]")
    input_password = driver.find_element_by_xpath("//*[@id=\"password\"]")
    login_button = driver.find_element_by_xpath("//*[@id=\"login-button\"]")

    # Действия с формами
    input_username.send_keys("standard_user")
    input_password.send_keys("secret_sauce")
    login_button.send_keys(Keys.RETURN)

    # Поиск и проверка попадания на главную страницу
    title_text = driver.find_element_by_xpath("//*[@id=\"header_container\"]/div[2]/span")
    if title_text.text == "PRODUCTS":
        print("Мы попали на главную страницу")
    else:
        print("Ошибка поиска элемента")

    time.sleep(5)


if __name__ == '__main__':
    first_test()

    

Разберем
пример пошагово:

  • Для работы с формой найдем и присвоим элементы переменным input_username, input_password и login_button с помощью xpath.
  • Далее вызовем для элемента метод send_keys с данными, которые хотим передать в текстовое поле. В нашем случае в username отправляем “standart_user”, в password“secret_sauce”. Проецируя поведение пользователя нажимаем Enter для ввода данных, используя метод send_keys для найденной кнопки с переданным аргументом Keys.RETURN. Этот аргумент позволяет работать с действиями клавиатуры в Selenium, аналогично нажатию на Enter на клавиатуре.
  • На главном экране нам необходимо найти и присвоить переменной элемент текста Products. Как я говорил раннее, не всегда есть возможность найти элемент по id – здесь как раз тот случай.
        title_text = driver.find_element_by_xpath("//*[@id=\"header_container\"]/div[2]/span")
    
  • Путь xpath до элемента: //*[@id=\"header_container\"]/div[2]/span.
  • Чтобы найти путь xpath, зайдите на https://www.saucedemo.com и нажмите F12, чтобы открыть инструменты разработчика. Затем выберите стрелку-указатель и кликните по элементу до которого хотите найти путь. В нашем случае до Products.
<i>Рис 8. Поиск xpath элемента в инструментах разработчика</i>
Рис 8. Поиск xpath элемента в инструментах разработчика
  • Откроется код элемента в дереве HTML, далее нужно открыть контекстное меню выделенной строки и скопировать xpath.
<i>Рис 9. Копирование пути xpath</i>
Рис 9. Копирование пути xpath
Если кратко рассматривать путь, то //* обозначает, что будут найдены все элементы на странице, а [@id=\"header_container\"] обозначает условие поиска (будут найдены все элементы на странице с тэгом id = "header_container").И далее /div[2]/span – спускаемся на второй дочерний элемент div и далее на дочерний элемент span. Сравните полученный xpath с деревом элемента в инструментах разработчика – сразу станет понятно что к чему.

  • Тут мы просто сравниваем текст найденного элемента с ожидаемым значением и выводим в консоль сообщение.
main.py
        if title_text.text == "PRODUCTS":
    print("Мы попали на главную страницу")
else:
    print("Ошибка поиска элемента")

    

При выполнении скрипта получили следующий результат:

Рис 10. Результат выполнения скрипта
Рис 10. Результат выполнения скрипта

4. Первый тест с поиском и переходом по странице

Кейс:

  • Введем логин и пароль пользователя и зайдем на главную страницу.
  • Найдем позицию с названием “Sauce Labs Fleece Jacket”.
  • Перейдем на страницу товара и нажмем кнопку добавления в корзину.
  • Перейдем в корзину и проверим что там присутствует 1 позиция с названием “Sauce Labs Fleece Jacket”.
main.py
        import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys


def first_test():
    options = webdriver.ChromeOptions()
    options.add_experimental_option("excludeSwitches", ["enable-logging"])
    driver = webdriver.Chrome(options=options, executable_path=r'C:/Users/…/…/chromedriver.exe')
    driver.get("https://www.saucedemo.com/")

    # Поиск элементов и присваивание к переменным.
    input_username = driver.find_element_by_xpath("//*[@id=\"user-name\"]")
    input_password = driver.find_element_by_xpath("//*[@id=\"password\"]")
    login_button = driver.find_element_by_xpath("//*[@id=\"login-button\"]")

    # Действия с формами
    input_username.send_keys("standard_user")
    input_password.send_keys("secret_sauce")
    login_button.send_keys(Keys.RETURN)

    # Поиск ссылки элемента позиции магазина и клик по ссылке
    item_name = driver.find_element_by_xpath("//*[@id=\"item_5_title_link\"]/div")
    item_name.click()

    # Поиск кнопки добавления товара и клик по этой кнопке
    item_add_button = driver.find_element_by_xpath("//*[@id=\"add-to-cart-sauce-labs-fleece-jacket\"]")
    item_add_button.click()

    # Поиск кнопки коризины и клик по этой кнопке
    shopping_cart = driver.find_element_by_xpath("//*[@id=\"shopping_cart_container\"]/a")
    shopping_cart.click()

    # Еще один поиск ссылки элемента позиции магазина
    item_name = driver.find_element_by_xpath("//*[@id=\"item_5_title_link\"]/div")
    if item_name.text == "Sauce Labs Fleece Jacket":
        print("Товар пристутствует в корзине")
    else:
        print("Товар отсутствует")

    time.sleep(5)


if __name__ == '__main__':
    first_test()

    

Из
нового тут добавился только метод click(), который просто кликает по
найденному элементу.

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

Ожидания в selenium: что нужно знать?

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

Selenium driver поддерживает два вида ожиданий: явное (explicit) и неявное (implicity). Для явных ожиданий есть специальные методы, которые помогут рационально использовать время выполнения теста: например, можно установить минимальное время ожидания и возвращать элемент, если он прогрузился раньше предполагаемого времени.

Пример явного ожидания:

        element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable(
        (By.XPATH, '//*[@id=\"page_wrapper\"]/footer/ul/li[2]/a')
    )
)

    

Процесс ждет 10 секунд пока элемент станет доступным, чтобы по
нему можно было кликнуть. Если элемент так и не прогрузился и недоступен для
клика, генерируется исключение TimeoutException.

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

Пример неявного ожидания:

        driver.implicitly_wait(10)
    

Ожидать действия можно и с помощью time.sleep(5). У нас в
примерах есть использование этого метода, но оно считается плохой практикой и обычно применяется только для дебага.

5. Рефакторинг теста, добавление ожиданий

Чтобы
pytest понял, что перед ним именно тестовая, а не обычная функция, сама тестовая функция
должна начинаться с test_.

Обновим наш тест, добавим необходимые ожидания для
стабильности тестовых функций.

Также я вынес отдельную функцию под ожидания, куда мы просто
передаем xpath и driver в виде аргументов.

main.py
        from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys


# Функция ожидания элементов
def wait_of_element_located(xpath, driver):
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located(
            (By.XPATH, xpath)
        )
    )
    return element


def test_add_jacket_to_the_shopcart():
    options = webdriver.ChromeOptions()
    options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(options=options, executable_path=r'C:/Users/…/…/chromedriver.exe')
    driver.get("https://www.saucedemo.com/")

    # Поиск и ожидание элементов и присваивание к переменным.
    input_username = wait_of_element_located(xpath='//*[@id=\"user-name\"]', driver=driver)
    input_password = wait_of_element_located(xpath='//*[@id=\"password\"]', driver=driver)
    login_button = wait_of_element_located(xpath='//*[@id=\"login-button\"]', driver=driver)

    # Действия с формами
    input_username.send_keys("standard_user")
    input_password.send_keys("secret_sauce")
    login_button.send_keys(Keys.RETURN)

    # Поиск и ождиание прогрузки ссылки элемента товара магазина и клик по ссылке
    item_name = wait_of_element_located(xpath='//*[@id=\"item_5_title_link\"]/div', driver=driver)
    item_name.click()

    # Поиск и ожидание кнопки добавления товара и клик по этой кнопке
    item_add_button = wait_of_element_located(xpath='//*[@id=\"add-to-cart-sauce-labs-fleece-jacket\"]', driver=driver)
    item_add_button.click()

    # Ждем пока товар добавится в корзину, появится span(кол-во позиций в корзине) и кликаем по корзине чтобы перейти
    wait_of_element_located(xpath='//*[@id=\"shopping_cart_container\"]/a/span', driver=driver).click()

    # Еще один поиск ссылки элемента позиции магазина
    item_name = wait_of_element_located(xpath='//*[@id=\"item_5_title_link\"]/div', driver=driver)
    if item_name.text == "Sauce Labs Fleece Jacket":
        print("Товар пристутствует в корзине")
    else:
        print("Товар отсутствует")

    time.sleep(5)


if __name__ == '__main__':
    test_add_jacket_to_the_shopcart()

    

Для запуска теста с помощью pytest в терминале введите
pytest main.py. После прохождения всех этапов должен отобразиться результат
прохождения.

6. Проверки, проверки, проверки

Мы плавно перешли к заключительному этапу написания теста – проверке вывода по известному ответу. Хотя тест выполняется успешно, он ничего
не проверяет и является бессмысленным. Будем использовать
стандартные инструкции assert или утверждения. Суть инструмента – проверить, что результат соответствует наши ожиданиям. Если соответствует, наш тест будет
считаться пройденным, а в противном случае – проваленным.

Добавим в тест проверки. Будем проверять, что название
куртки “Sauce Labs Fleece Jacket” и описание как в магазине.

main.py
        from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

from selenium import webdriver
from selenium.webdriver.common.keys import Keys


# Функция ожидания элементов
def wait_of_element_located(xpath, driver):
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located(
            (By.XPATH, xpath)
        )
    )
    return element


def test_add_jacket_to_the_shopcart():
    options = webdriver.ChromeOptions()
    options.add_experimental_option("excludeSwitches", ["enable-logging"])
    driver = webdriver.Chrome(options=options, executable_path=r'C:/Users/…/…/chromedriver.exe')
    driver.get("https://www.saucedemo.com/")

    # Поиск и ожидание элементов и присваивание к переменным.
    input_username = wait_of_element_located(xpath='//*[@id=\"user-name\"]', driver=driver)
    input_password = wait_of_element_located(xpath='//*[@id=\"password\"]', driver=driver)
    login_button = wait_of_element_located(xpath='//*[@id=\"login-button\"]', driver=driver)

    # Действия с формами
    input_username.send_keys("standard_user")
    input_password.send_keys("secret_sauce")
    login_button.send_keys(Keys.RETURN)

    # Поиск и ождиание прогрузки ссылки элемента товара магазина и клик по ссылке
    item_name = wait_of_element_located(xpath='//*[@id=\"item_5_title_link\"]/div', driver=driver)
    item_name.click()

    # Поиск и ожидание кнопки добавления товара и клик по этой кнопке
    item_add_button = wait_of_element_located(xpath='//*[@id=\"add-to-cart-sauce-labs-fleece-jacket\"]', driver=driver)
    item_add_button.click()

    # Ждем пока товар добавится в корзину, появится span(кол-во позиций в корзине) и кликаем по корзине чтобы перейти
    wait_of_element_located(xpath='//*[@id=\"shopping_cart_container\"]/a/span', driver=driver).click()

    # Еще один поиск ссылки элемента позиции магазина
    item_name = wait_of_element_located(xpath='//*[@id=\"item_5_title_link\"]/div', driver=driver)

    item_description = wait_of_element_located(
        xpath='//*[@id=\"cart_contents_container\"]/div/div[1]/div[3]/div[2]/div[1]',
        driver=driver
    )

    assert item_name.text == "Sauce Labs Fleece Jacket"
    assert item_description.text == "It's not every day that you come across a midweight quarter-zip fleece jacket capable of handling everything from a relaxing day outdoors to a busy day at the office."

    driver.close()


if __name__ == '__main__':
    test_add_jacket_to_the_shopcart()

    

Теперь при расхождении результата и ожидаемого
условия будет возвращена ошибка прохождения. Укажем название куртки “Sauce Labs Fleece Jacket1”. Результат выполнения скрипта будет следующим:

Рис 11. Результат выполнения теста.
Рис 11. Результат выполнения теста.

7. Распределим логику

Теперь причешем код, распределив логику по
методам, как, например, было с wait_of_element_located. Разбивать логику необходимо
для написания множества тестов.

main.py
        import pytest
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

from selenium import webdriver
from selenium.webdriver.common.keys import Keys


# Функция ожидания элементов
def wait_of_element_located(xpath, driver_init):
    element = WebDriverWait(driver_init, 10).until(
        EC.presence_of_element_located(
            (By.XPATH, xpath)
        )
    )
    return element


# Вынесем инициализцию драйвера в отдельную фикстуру pytest
@pytest.fixture
def driver_init():
    options = webdriver.ChromeOptions()
    options.add_experimental_option("excludeSwitches", ["enable-logging"])
    driver = webdriver.Chrome(options=options, executable_path=r'C:/Users/…/…/chromedriver.exe')
    driver.get("https://www.saucedemo.com/")
    yield driver
    driver.close()


# Вынесем аутентификацию юзера в отдельную функцию
def auth_user(user_name, password, driver_init):
    # Поиск и ожидание элементов и присваивание к переменным.
    input_username = wait_of_element_located(xpath='//*[@id=\"user-name\"]', driver_init=driver_init)
    input_password = wait_of_element_located(xpath='//*[@id=\"password\"]', driver_init=driver_init)
    login_button = wait_of_element_located(xpath='//*[@id=\"login-button\"]', driver_init=driver_init)

    # Действия с формами
    input_username.send_keys(user_name)
    input_password.send_keys(password)
    login_button.send_keys(Keys.RETURN)



def add_item_to_cart(xpath_item, driver_init):
    # Поиск и ождиание прогрузки ссылки элемента товара магазина и клик по ссылке
    item_name = wait_of_element_located(
        xpath=xpath_item,
        driver_init=driver_init)
    item_name.click()

    # Поиск и ожидание кнопки добавления товара и клик по этой кнопке
    item_add_button = wait_of_element_located(
        xpath='//*[@id=\"add-to-cart-sauce-labs-fleece-jacket\"]',
        driver_init=driver_init)
    item_add_button.click()

    # Ждем пока товар добавится в корзину, появится span(кол-во позиций в корзине)
    # Возвращаем True или False в зависимости добавлися товар или нет
    shop_cart_with_item = wait_of_element_located(
        xpath='//*[@id=\"shopping_cart_container\"]/a/span',
        driver_init=driver_init)
    return shop_cart_with_item


def test_add_jacket_to_the_shopcart(driver_init):
    # Аутентификация пользователя
    auth_user("standard_user", "secret_sauce", driver_init=driver_init)

    # Добавление товара в корзину и если товар добавлен переход в корзину
    add_item_to_cart(xpath_item='//*[@id=\"item_5_title_link\"]/div',
                     driver_init=driver_init).click()
    # Поиск корзины и клик
    wait_of_element_located(xpath='//*[@id=\"shopping_cart_container\"]/a',
                            driver_init=driver_init).click()

    # Поиск ссылки элемента позиции магазина
    item_name = wait_of_element_located(xpath='//*[@id=\"item_5_title_link\"]/div',
                                        driver_init=driver_init)

    # Поиск описания товара
    item_description = wait_of_element_located(xpath='//*[@id=\"cart_contents_container\"]/div/div[1]/div[3]/div[2]/div[1]',
                                               driver_init=driver_init)

    assert item_name.text == "Sauce Labs Fleece Jacket"
    assert item_description.text == "It's not every day that you come across a midweight quarter-zip fleece jacket" \
                                    " capable of handling everything from a relaxing day outdoors to a busy day at " \
                                    "the office."


if __name__ == '__main__':
    test_add_jacket_to_the_shopcart(driver_init=driver_init)

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

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

При желании можно и дальше проводить рефакторинг кода.

Рекомендации по архитектуре

  • Очевидно, что в одном файле хранить все вспомогательные функции и тесты неудобно. После добавления еще нескольких тестов даже с распределенной логикой скрипт будет похож на полотно с трудночитаемым кодом. К тому же если вы разрабатываете тесты с коллегами, без конфликтов в коде не обойтись. Для начала нужно разделить проект на модули: в одном будут находиться файлы с тестами, в другом частичная логика, в третьем – ресурсы, в четвертом – утилиты и т.д.
  • Далее следует переходить на разработку автотестов с использованием объектно-ориентированного программирования. Это сэкономит массу времени и поможет в написании сложного и лаконичного кода.
  • Стоит также обратить внимание на паттерны проектирования, особенно на PageObject и PageFactoroy. В эффективном тестировании UI они играют большую роль.
  • Все тестовые данные лучше хранить в неизменяемых классах, константах или в отдельных файлах (json, csv).

Заключение

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

08
Ноя
2021

One Day Offer в MTC Digital

Мероприятие на котором можно попасть в МТС Digital за день. Ищут специалистов, которые хотят поработать над флагманским приложением экосистемы МТС.
— Читать дальше «One Day Offer в MTC Digital»

17
Окт
2021

Запрос GET в Postman срабатывает через раз, когда переменным в Environment присваиваются Динамические переменные

Тестирую API https://petstore.swagger.io
У меня два метода:
POST создает Юзера. Вот этот https://petstore.swagger.io/#/user/createUser
В body запроса:
{
"id": {{$randomInt}},
"username": "{{usr}}",

12
Окт
2021

Avito PaaS Meetup #1

На митапе специалисты Авито расскажут о разработке, доставке и эксплуатации сервисов, а также об автоматическом тестировании.
— Читать дальше «Avito PaaS Meetup #1»

08
Окт
2021

Конференция HighLoad++ 2021

Крупнейшая в Европе IT-конференция для разработчиков высоконагруженных систем. В программе более 130 докладов, персональные консультации и полезные знакомства.
— Читать дальше «Конференция HighLoad++ 2021»

06
Окт
2021

Повторяющиеся слова в тексте на Python

Есть вот такая задача: Напишите программу, которая считывает текст из файла (в файле может быть больше одной строки) и выводит самое частое слово в этом тексте и через пробел то, сколько раз оно встретилось. Если таких слов несколько, выве…

06
Окт
2021

Как создать очередь из взаимосвязанных REST API запросов?

Имеется два независимых друг от друга REST API, для взаимосвязи которых используется/разрабатывается промежуточный сервис, который с определённым интервалом взаимодействует с ними обеими. Стоит отметить, что оба API недоступны для изменени…

01
Окт
2021

Какое из 8 направлений IT-стажировки вам подходит? Тест от Tproger и Kaspersky

Шуточный тест, чтобы определить, какое направление стажировки SafeBoard может вам подойти. Просто выбирайте решения, которые вам ближе всего.
— Читать дальше «Какое из 8 направлений IT-стажировки вам подходит? Тест от Tproger и Kaspersky»

15
Сен
2021

Курсы Skillbox по программированию за 0 рублей

Skillbox открыл бесплатный доступ к курсам по программированию на 7 дней. Можно выбрать среди направлений: введение в программирование, веб-вёрстка, тестирование, Python, 1С и Go-разработка.
— Читать дальше «Курсы Skillbox по программированию за 0 рубл…

15
Сен
2021

Набор на стажировку в Dell Technologies

Dell Technologies приглашает студентов дневного отделения технических вузов Санкт-Петербурга на оплачиваемую стажировку. На выбор есть 5 направлений: программирование на Java, C++ или Python, тестирование ПО, DevOps и администрирование.
— Читать дальше…

14
Сен
2021

🛠 Осваиваем инструменты QA-инженера или как ручному тестировщику работать с REST API

Изучишь REST API – останешься в Стране Чудес, и я покажу тебе, насколько глубоко уходит кроличья нора и как удобнее всего в нее нырнуть.

Пусть за спиной остался не один баг-репорт, написан не один ручной тест и пройден не один регресс, но почему все еще кажется, будто мир тестирования так и не открыл свои тайны? Ответ прост: пора двигаться дальше. Ведь баги возникают не просто так, и веб-браузер – это не картинка на экране.

Общение между сервером и клиентом, краткое определение REST API

Большинство веб-приложений в современном мире работают на клиент-серверной архитектуре. Основной ее смысл в том, что сетевая нагрузка распределена между поставщиком (сервер) и потребителем (клиент). Общение между ними осуществляется через сетевые протоколы, но для любого общения нужны правила, и тут мы как раз подходим к REST API.

Схема клиент-серверной архитектуры.
Схема клиент-серверной архитектуры.

REST (Representational State Transfer) – это набор правил взаимодействия компонентов распределенного приложения, которые включают в себя следующие требования (ограничения):

  • отделять в архитектуре клиент от сервера;
  • в период между запросами клиента никакая информация о его состоянии не должна храниться на сервере;
  • необходима возможность кэширования ответов сервера;
  • необходимо единообразие интерфейса для возможности независимого развития каждого сервера;
  • необходимо предоставлять возможность добавления слоев между клиентом и сервером для лучшей масштабируемости и безопасности.

Почему большинство веб-приложений используют REST?

Если REST API – набор способов, подчиняющихся определенным правилам, то зачем большинство web-приложений используют такое сочетание?

  • Правила порождают порядок и единообразие. Это облегчает работу с кодом, а также его чтение.
  • Сервисы становятся масштабируемыми, что дает возможность сделать приложение отказоустойчивым и более безопасным.
  • Появляется возможность более легкого исправления ошибок и внесения изменений.
  • Прозрачность связей между компонентами также упрощает чтение и работу с кодом.

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

Определяем где ошибка, классификация кодов HTTP

Хватит общих слов. Пора переходить к практике: нужно открыть devtools браузера (нажать клавишу F12) и перейти во вкладку Network (можно настроить фильтр на показ XHR, так будет удобнее).

Скриншот браузера с открытой панелью devtools.
Скриншот браузера с открытой панелью devtools.

Колонка статуса показывает статус выполнения запроса, прошел ли он успешно, или была допущена ошибка. Если кратко, то статусы можно для простоты сортировать следующим образом:

1xx Информационные сообщения. Например, 102 – идет обработка запроса.
2xx Успешное сообщение.
3xx Была проведена переадресация, т.е. запрашиваемая информация больше не находится по этому адресу и запрос полетел по другому адресу.
4xx Ошибка на стороне клиента. Т.е. нужно изменить запрос или его заголовки, например.
5xx Ошибка на стороне сервера. Можно открыть логи (если есть возможность) и поискать ошибку.

Допустим, был интересен определенный запрос, потому что именно его меняли в нужном релизе, или его статус указывает на ошибку. Чтобы посмотреть информацию по запросу, нужно дважды щелкнуть (уверена, что знаете, но проговорить нужно):

Скриншот браузера с открытой devtools.
Скриншот браузера с открытой devtools.

Основная информация, которую можно посмотреть по запросу, начиная работать с REST – это первые три вкладки:

  • Headers – заголовки и основная информация.
  • Preview – посмотреть тело запроса.
  • Response – посмотреть тело ответа.

Остальные вкладки можно рассмотреть как-нибудь потом.

На первой вкладке содержится общая информация по данному запросу, а также header, которые в нем используются (дополнительная информация к запросу, передаваемая между сервером и клиентом).

В общей информацией указан метод, который используется в запросе (в данном случае GET). Основные используемые методы (о других можно дополнительно почитать здесь).

GET Получение данных. Например, чтобы загрузить статью на странице.
POST Создание сущности.Например при создании нового пользователя.
PUT Обновление сущности. Например изменение пароля или логина у уже существующего пользователя или заголовка статьи.
DELETE Удаление сущности. Например удаление статьи, пользователя или теста. Иногда вместо DELETE используется PUT с пустым телом запроса.

Еще нужно обратить внимание на такой заголовок как Content-Type. Он отображает в каком формате передаются данные в запросе: json, xml или text.

Инструменты тестировщика для работы с REST

Существует множество удобных инструментов для работы и проверки REST-запросов. В статье я перечислю те которые удобны мне и подходят для решения начальных задач. При желании этот список легко расширить.

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

Второй инструмент, который всегда под рукой у пользователя Unix/Linux – это curl (в Windows нужно будет его специально установить). Чтобы посмотреть информацию по этой утилите, достаточно набрать следующую команду в терминале:

        man curl
# или
curl --help

    

Для начала можно попробовать отправить GET-запрос и получить ответ:

        curl -i https://proglib.io/posts/fetch
    
Непонятные символы появились, потому что нет русификации консоли.
Непонятные символы появились, потому что нет русификации консоли.

Был повторен GET-запрос и получен ответ. Используя ключ -i, можно посмотреть дополнительную информацию. Дальше можно попробовать отправить POST-запрос, сразу же отправив header content-type:

        curl -i -X POST -d '' -H 'content-type: application/json' https://proglib.io/post/info
    
Консоль с вызванным curl.
Консоль с вызванным curl.

В нашем запросе -X POST показывает, что используется метод POST (по умолчанию отправляется метод GET), -d ‘’ – тело запроса (в данном случае пустое) и -H 'content-type: application/json' – заголовок, показывающий, что тип сообщений – json. В ответ пришел статус 400, значит тело запроса нужно менять.

Немного освоив curl, можно переходить к более высокоуровневому инструменту. В статье я рассмотрю Postman, но есть и другие варианты.

Postman – свободно распространяемая программа с платным контентом для взаимодействия в команде. Для работе в ней нужно зарегистрировать свою почту на официальном сайте и скачать десктопную версию (хотя можно работать и через браузер). Также для Postman есть официальная документация и обучающие видео.

Начнем с отправки того же самого GET-запроса, что и с помощью curl:

Скриншот программы Postman.
Скриншот программы Postman.

На картинке видно, что заголовки были заполнены автоматически. Ответ более читаемый, чем при запросе с помощью curl.

Теперь можно отправить POST-запрос, тело которого также будет пустым, и будет прописан указывающий тип запроса header:

Скриншот программы Postman.
Скриншот программы Postman.

Был получен такой же ответ с таким же статусом, как и при отправке запроса с помощью curl.

Postman умеет еще множество вещей: можно собирать запросы в коллекции, писать тесты на Java Script, осуществлять мониторинг определенных запросов, документировать их и т.д.

Выводы

Можно продолжать тестировать только клиентскую часть, раз за разом проводя тест-дизайн, пытаться отловить ошибку и не пытаясь проанализировать ее с точки зрения кода программы… Но разве этого достаточно? Разве не хочется заглянуть под картинку и увидеть, как все работает?

В статье описаны основы и показаны некоторые инструменты. Открытие консоли браузера – только первый шаг, который ведет к нагрузочному тестированию, автоматизации rest-test или пониманию, как все устроено. Однако дорогу осилит идущий, а в следующих публикациях мы разберем и более сложные темы. Удачи!

***

Если вы только начинаете осваивать профессию, стоит обратить внимание на Факультет ручного тестирования образовательной онлайн-платформы GeekBrains. Обучение длится всего 10 месяцев и включает теоретическую часть, практику с четырьмя проектами в портфолио и как бонус – диплом о профессиональной переподготовке с гарантированным трудоустройством. Программа обучения актуальна, а занятия ведут практикующие специалисты российских технологических компаний.

07
Сен
2021

Test Automation Hackathon

EPAM проведёт первый в СНГ онлайн-хакатон для автоматизаторов – Test Automation Hackathon. Это командное соревнование как для действующих автоматизаторов, так и для всех, кому интересна автоматизация тестирования.
— Читать дальше «Test Automation Hacka…

01
Сен
2021

Курс «Профессия разработчик»

За 15 месяцев новички разберутся в сфере разработки, выберут направление и прокачаются в нём, чтобы устроиться в компанию или открыть свой бизнес в IT.
— Читать дальше «Курс «Профессия разработчик»»

31
Авг
2021

«Свою первую работу по тестированию я нашел случайно»

Порог входа в сфере тестирования ПО довольно низок, но стать высококлассным инженером по Quality Assurance непросто: Вячеслав Зимин рассказал нашему корреспонденту о своем пути в профессию.

31
Авг
2021

🗣 «Свою первую работу по тестированию я нашел случайно»

Порог входа в сфере тестирования ПО довольно низок, но стать высококлассным инженером по Quality Assurance непросто: Вячеслав Зимин рассказал нашему корреспонденту о своем пути в профессию.

Где вы учились и как решились пойти в тестирование?

Я из города невест – Иваново. Получил высшее образование по специальности физика, а также дополнительный диплом учителя. Еще во время обучения в университете устроился работать преподавателем. Вел два предмета – физику и информатику. После окончания вуза остался там работать, хоть это и не совсем то, что мне было нужно: изначально я хотел связать жизнь с программированием, к тому же меня не устраивали условия работы и не хватало зарплаты.


Я начал все чаще смотреть в сторону IT и в свободное время занимался программированием, одновременно изучая вакансии, и однажды наткнулся на вакансию тестировщика. 11 лет назад еще не было такого количества курсов, поэтому тестирование я тоже изучал самостоятельно. Курсы проходил уже после трудоустройства.


Как вы нашли первую работу?

Первую работу по тестированию я нашел случайно. Будущая жена скинула мне вакансию тестировщика игр с городского форума. После нескольких дней многочасового самостоятельного обучения я решил попробовать. Не помню, спрашивали тогда мое резюме или нет, но точно давали тестовое задание. Мое заключалось в том, чтобы найти и оформить баги в игре, которая уже была выложена в соцсеть. Его выполнение стало переломным моментов в моей карьере. Оказалось, что мне интересно тестировать, интересно смотреть, правильно ли все работает и находить баги.

После того тестового меня приняли. Это казалось чем-то невероятным. Приятный офис в бизнес-центре, кофе и сама атмосфера была отличная. Так началась моя карьера в тестировании. Тогда конкурс на стартовую позицию был намного ниже чем сейчас и требования были не такими высокими.

В то время никакие сертификаты для трудоустройства не требовались. Даже когда я сам через несколько лет принимал людей на работу, мы рекомендовали литературу и выдавали тестовые задания во время собеседований. Это только последние несколько лет наличие сертификата стало для работодателя одним их критериев первоначального отбора, поскольку оно подтверждает серьезность намерений кандидата. Поскольку многие рассматривают тестирование как временную работу, чтобы войти в сферу IT, работодатели с каждым годом повышают планку.

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

В первую компанию (как оказалось, это был стартап) только с общим представлением о профессии и с невероятным желанием работать в этой сфере. Может быть именно этот факт зацепил моего работодателя. В команде я был единственным тестировщиком, и все знания пришлось добывать самому. Отчасти мне помогла книга “tестирование dot com”. Еще я много общался с программистами, получал от них фидбек и смотрел, как сделать свою работу и процесс лучше и эффективнее. Каждый день читал форумы и статьи, чтобы понять все нюансы работы и выстроить правильный процесс тестирования.

Инструментов тестирования в компании тоже не было, все делали либо в чате, либо в документах Google. Я самостоятельно познакомился с Testlink (инструмент для хранения тест-кейсов), установил и начал в нем работать.

Легко ли вам было с начальной позиции перейти к уровню middle?

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

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

Когда мы только развивали тестирование, то не пользовались какими-то сложными техническими инструментами. По мере развития самой команды и тестирования в компании мы постепенно расширяли и техническую экспертизу. Мы тестировали игры, и по сути не было какого-то адекватного API – пришлось выкручиваться и пробовать реализовать end-to-end-тесты. Было перепробовано много инструментов и один из них мне запомнился: я его долго пытался приноровить к специфике тестирования игр – это TestComplete. К сожалению, он нам не подошел, и мы решили остановиться на скрипте по распознаванию изображений Sikuli. Именно тогда мы и стали развивать автоматизацию в компании.

Что касается инструментов ручного тестирования, то в ходу у нас были вполне стандартные Charles и Android SDK. В ручном тестировании каких-то специальных инструментов мы не использовали. Была админка игры и прямые руки тестировщика.

В этой компании я проработал лет 5 или 6. Хотя у нас и не было четкой градации по должностям, но точно могу сказать, что вырос за тот год из джуна в миддл-позицию. Еще через год я прошел курс тест-аналитика и стал уже лидом небольшой команды. Еще через год мы с руководителем отдела решили сделать внутренние курсы по тестированию. У меня было достаточно опыта и педагогическое образование, к тому же я постоянно обучался, так что особых проблем с созданием первого собственного курса не было. Плюс за все эти годы работы тестировщиком мое желание преподавать никуда не делось. И это как раз была отличная возможность соединить два любимых занятия: преподавание и тестирование.

Легко ли со средних позиций перейти к уровню senior QA и что для этого нужно?

Все зависит от самого человека, от его желания, мотивации и стремления. У меня был случай, когда сотрудник за год упорной работы перешел из джуна на позицию синьора, но он выкладывался по полной. И конечно же дело тут не ограничивается только хард-скиллами. Для меня senior QA – это не только сильный технический специалист, но и самостоятельный сотрудник, который может сам решать проблемы, организовывать свое время, расставлять приоритеты в работе и так далее. Тот человек, которому дал сложную задачу, и он ее выполнит в оговоренное время. При этом ты не переживаешь, что что-то может пойти не так.

Если хочешь из мидла вырасти в сеньора, ты должен стараться показывать своему руководителю, что готов брать на себя задачи и можешь самостоятельно решать проблемы. Однако главное тут – не перегнуть палку с самостоятельностью и инициативностью.

Если инженер по QA уровня middle считает себя готовым к переходу в высшую лигу, как проверить, что он не ошибается?

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

Если такой возможности нет, я обычно смотрю на развитие тестировщика за время работы в компании – как он себя показывал. Оцениваю, может ли он потенциально потянуть новые обязанности и как эффективно будет их выполнять. При необходимости можно опросить команду, иногда они дают полезную информацию. И обязательно нужно обговорить со специалистом, что произойдет, если он не справится, чтобы в дальнейшем не было сложностей и неприятных неожиданностей. Лучше проработать план «Б», если человек не потянет новую нагрузку.

Как самому сотруднику проверить, что он не ошибается и готов к переходу?

Я считаю, что если специалист уверенно справляется с текущими обязанностями и чувствует, что ему стало скучно, это повод задуматься о дальнейшем росте. Узнать наверняка, точно ли ты готов к переходу или нет, можно выполнив задачи более высокого уровня. Это можно сделать в свободное время или на своем проекте, попросив о таких заданиях руководителя.

Что потребуется изучить и какие навыки наработать, чтобы выйти на уровень senior?

Для позиции senior QA надо разделять направления и специализации. Если мы говорим про мобильное тестирование, опытный специалист должен знать основную базу того, с чем он работает. Как минимум это особенности тестирования мобильных устройств и операционных систем. У него должен быть уверенный опыт с инструментами тестирования мобильных приложений. Он должен знать и разбираться в таких вещах как Android SDK и XCode. Кроме того, будет плюсом если он знает про работу с эмуляторами и имеет опыт в автоматизации. Хорошо знает тестирование API, его особенности, умеет работать с инструментами тестирования API и разбирается в клиент-серверной архитектуре. Для веб-тестирования сюда же можно включить API и клиент серверную архитектуру, хорошее знание протоколов и запросов, знание HTML, CSS, DevTools.

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

Такой специалист должен идеально знать как составлять тест-кейсы, чек-листы, баг-репорты. Разбираться в терминологии тестирования, знать процессы тестирования и в целом процессы разработки ПО. Знать и уметь работать с основными инструментами (Bug Tracking System, Test Management System) и конечно иметь опыт в тестировании – обычно от 3 лет и выше. Также в некоторых компаниях синьор может выдавать фидбек младшим специалистам и быть для них наставником. В этом случае ему потребуется развивать и софт-скиллы.

Как лучше строить карьеру? Тут нет однозначного ответа. Каждый решает сам для себя. Кому-то комфортно расти в одной компании и никуда не уходить, а другим интересней работать в разных местах. По опыту скажу, что расти все-таки лучше в свободном плавании. В компании не всегда есть место для роста и это задерживает развитие кандидата. Кроме того, разные компании – это более обширный опыт.

Как у вас родилась идея создать собственное сообщество?

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

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

Если в самом начале я был один и обучал самостоятельно, то сейчас есть целая команда опытных тестировщиков, которые помогают начинающим специалистам обучиться и устроиться на работу.


Какие инструменты вы чаще всего используете и почему?
Так как я уже перешел из тестирования в управление тестированием, взаимодействовать с инструментами приходится все меньше. Тем не менее, иногда приходится браться за старое. Не могу выделить какие-то отдельные инструменты, которые используются чаще всего, потому что это зависит от задач. Единственный инструмент, которым я чаще всего пользовался в работе – это TestRail, так как тестировщик всегда имеет дело с тест-кейсами.

Что в тестировании самое важное?

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

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

***
Реклама
Если вы только задумались о карьере в Quality Assurance или ручные тесты вам уже не в диковинку, стоит обратить внимание на курс автоматизации тестирования на Python от образовательной онлайн-платформы GeekBrains. Практикующие специалисты помогут вам освоить основы профессии и техники тест-дизайна, а также научат писать автотесты на Python. Успешно завершившие курс студенты получат диплом о профессиональной переподготовке и добавят в портфолио 4 проекта, а площадка поможет им с трудоустройством.

31
Авг
2021

👨‍🔧️ Сколько зарабатывают тестировщики в России и в мире?

О тестировщиках стали говорить все чаще. Правда ли, что у специалистов по Quality Assurance низкая зарплата? Развеем мифы и рассмотрим советы по поиску работы в сфере QA и QC.

Пандемия способствовала расширению прав и свобод тестировщиков, ведь они могут работать на удаленке практически из любой точки мира. Однако, требования к специалистам увеличились, что не скажешь про уровень оплаты. Рассмотрим подробнее зарплаты и требования к QA и QC специалистам.

Заработная плата тестировщиков в России

В России зарплата тестировщика начинается от 20 000 рублей (да, да, скептики закидают меня помидорами, но таковы суровые рыночные реалии). Если верить данным сайта russia.trud.com, джуны получают 20 – 100 тысяч рублей в месяц, мидлы – в диапазоне 70 – 160 тысяч, а у сеньоров зарплата стартует от 100 тысяч рублей (некоторые зарабатывают в месяц и по 300 тысяч, кому как повезет).

По данным все того же russia.trud.com, средняя заработная плата тестировщика в России составляет 46 353 рубля в месяц. Это как средняя температура по больнице: если взять морг и инфекционное отделение, можно получить близкий к физиологической норме показатель.

Средний уровень зарплаты тестировщиков за год.
Средний уровень зарплаты тестировщиков за год.

Навыки специалиста напрямую влияют на уровень его заработной платы. Приведу минимальные требования работодателей.

Итак, если вы претендуете на позицию тестировщика, вам нужно:

  • Разбираться в локализации дефектов и уметь их заводить.
  • Знать техники тест-дизайна, тест-анализа и тестовой комбинаторики.
  • Иметь навык работы с баг-трекинговыми системами: Bugzilla, Jira, YouTrack, Redmine.
  • Уметь писать тест-кейсы и работать с их хранилищами.
  • Иметь навыки клиентского тестирования веб-приложений.

Посмотрим, сколько денег тестировщик может получить за свои знания, умения и навыки в различных областях России. Здесь мы снова имеем среднюю температуру по больнице, к тому же russia.trud.com берет средние показатели. Медианная зарплата дала бы нам более адекватную картину.


Города, в которых востребованы специалисты.
Города, в которых востребованы специалисты.
Отдельно стоит отметить навыки автоматизации, которые весьма востребованы. На рынке труда наблюдается дефицит специалистов нагрузочного и автоматизированного тестирования, что увеличивает размер их заработной платы в среднем на 20 – 25%.

Преимуществом перед конкурентами будет:

  • Умение разрабатывать скрипты нагрузочного тестирования.
  • Умение работать с драйверами и надстройками автоматизированного тестирования.
  • Наличие навыков работы с фрейморками автоматизированного тестирования (JUnit, TestNG и др.).
  • Умение работать с системами отчетности результатов автотестов.
Рейтинг зарплат смежных специалистов.
Рейтинг зарплат смежных специалистов.

Заработная плата тестировщиков в других странах

По данным dou.ua стажер QA будет получать в среднем $400, а минимальная оплата труда Senior QA Engineer оценивается в $2700 в месяц. Обратите внимание, что украинские товарищи не забыли о медианных показателях, за что им отдельное спасибо.


В Нью-Йорке годовой доход QA начинается от $50 000.


Работодатели в Сан-Франциско оценивают работу тестировщиков от $65 000 в год.


В Лондоне тестировщику готовы заплатить от £30 000 в год.


Тестировщикам в Мумбаи платят от 300 тысяч рупий в год.


Как оформить резюме, чтобы получить работу QA или QC с хорошим доходом?

Достаточный размер резюме составляет 1 – 1,5 страницы, на их чтение должно уходить не более двух минут.

Информацию следует подавать емко, описывая важные моменты:

  • Обязательно с разметкой: заголовки, списки с ключевыми моментами.
  • При описании результатов отталкиваетесь от структуры «какая ответственность возлагалась и достижения в этой области». Опишите важные релизы, какие фичи были выпущены, какой карьерный рост произошел.
  • Инструменты и опыт работы. Тестировщики мобильных приложений могут указать: Charles, Xcode, Android Studio, Fiddler. QA бэкенда используют Insomnia или Postman, либо что-то подобное. Обязательно указывайте те инструменты, с которыми был реальный опыт, а не просто теория и поверхностное знание.

Советы по прохождению интервью

Вы заинтересованы в работе настолько же, насколько компания заинтересована в хорошем сотруднике. Сохраняйте спокойствие, отвечайте на вопросы и задавайте свои. Шутки, позитивное настроение и коммуникабельность станут плюсом. Главное – не переборщить.

Как проходит процесс найма:

  • Вводное интервью. Рекрутер представляет компанию, говорит о коммуникации в команде, рассказывают об ожиданиях. Слушать это стоит внимательно, после потребуется задать вопросы (некоторые специалисты специально пропускают какие-то нюансы, проверяя кандидата).
  • Кандидату стоит рассказать о своем опыте, какими инструментами и методиками он пользовался ранее. Джуны могут говорить о курсах или личных проектах.
  • Получение и выполнение кейса. Тестовое задание отличается в зависимости от направления: мобильное тестирование, кроссфункциональное, бэкенд или др.
  • Вопросы от кандидата или инвертированное собеседование. На этом этапе происходит смена роли интервьюера, теперь претендент на вакансию может спросить про метод управления проектом (Scrum, Agile, Kanban), применяется ли CI/CD (Continuous integration & Continuous delivery), часто ли применяют автотесты, каким фреймовроком пользуются и почему… Подобные вопросы показывают заинтересованность кандидата.
  • В финале стоит озвучить зарплатные ожидания (минимум исходя из потребностей и максимум, согласно профессиональному и рыночному уровням), спросить про длительность испытательного срока и как оценивается его прохождение. Обратная связь от кандидата после собеседования помогает оставить положительное впечатление, даже если на данный момент специалист не подходит на вакантное место. Бывает так, что его могут пригласить сотрудничать через какое-то время.
В общении не стоит бояться рассказывать о своих неудачах на прошлом месте работы. Об этом можно и стоит говорить, но дополняя информацией о решении проблемы и сделанных выводах, которые помогут избежать повторения ситуации.

***

В зависимости от компании и специфики работы, может быть от одного до трех этапов собеседования. Тех, кто только хочет изучить данное направление, с тонкостями профессии Manual QA Engineer познакомят специалисты портала GeekBrains. Обучение длится всего 10 месяц и включает теоретическую часть, практику с четырьмя проектами в портфолио и как бонус – диплом о профессиональной переподготовке и гарантированное трудоустройство. Программа обучения актуальна, а занятия ведут практикующие специалисты российских технологических компаний.

30
Авг
2021

TestCon Moscow 2021

Международная конференция по тестированию и обеспечению качества ПО. 3 дня докладов и мастер-классов от ведущих мировых специалистов.
— Читать дальше «TestCon Moscow 2021»

25
Авг
2021

Курс «Специалист по тестированию на проникновение»

7 месяцев практических занятий, постоянная поддержка менторов-пентестеров, диплом о профессиональной переподготовке и международный сертификат HackerU.
— Читать дальше «Курс «Специалист по тестированию на проникновение»»