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

25
Ноя
2022

Можно ли писать негативные и позитивные тесты в одном методе?

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

15
Ноя
2022

Автоматизированное тестирование: Go или Python?

Какой язык лучше подойдёт для автоматизированного тестирования — Go или Python? Разобрали и разложили по полочкам преимущества и недостатки.
— Читать дальше «Автоматизированное тестирование: Go или Python?»

06
Ноя
2022

Пишем программу для тестирования на С++

Рассказываем, как написать программу тестирования для проверки работы или знаний человека. В качестве языка программирования используем С++.
— Читать дальше «Пишем программу для тестирования на С++»

20
Окт
2022

Как открыть POST запрос, при автоматизации браузера с использованием Selenium и Python?

Доброго времени суток!
Товарищи, возможно у кого то был подобный извращенный кейс:
Реализую автотест на одном из сайтов (связка Python + Selenium), суть проста: заходим на странницу, кликаем на кнопку, заполняем форму ФИО и телефон, кликае…

27
Авг
2022

Как с помощью девтулз и Постман определить на чей стороне баг на фронте или беке? [закрыт]

На сайте https://fix-price.com есть баг – не работают кнопки
увеличения/уменьшения кол-ва товара в корзине на странице товара. С
помощью девтулс и постман необходимо локализовать, на чьей стороне баг – фронтенд или
бэкенд.

04
Авг
2022

JAVA параметризованный тест JUnit

есть класс, который считает корни квадратного уравнения, нужно написать параметризованный тест
как правильно передать параметры в тест из метода getArguments?
выдает такую ошибку:
org.junit.jupiter.api.extension.ParameterResolutionExceptio…

09
Июл
2022

Тестирование python peewee

Применяю python ORM peewee,
подскажите пожалуйста как создать отдельный экземпляр бд(к примеру text_test.db) в peewee для тестирования(библиотека unittest)? может есть еще какие нибудь подходы? как модернизировать конструкцию?
from peewee …

06
Июл
2022

Кастомный JDBC не загружается в интеграционных тестах Spring Boot

Я делаю собственный драйвер JDBC, и мне нужно его протестировать (с помощью Spring-boot). Я добавил зависимость (я использую Maven) этого JAR-файла драйвера в другой проект, и он отлично работает в основной программе. Но когда я пытаюсь сд…

27
Июн
2022

Тестируем на Python: unittest и pytest. Инструкция для начинающих 

Python-разработчик Андрей Смирнов рассказал, как написать первые тесты и какие фреймворки выбрать: unittest или pytest.
— Читать дальше «Тестируем на Python: unittest и pytest. Инструкция для начинающих »

29
Май
2022

Ожидаемое условие не выполнено: ожидание видимости всех элементов, расположенных с помощью By.xpath

Падает тест, ошибка: org.openqa.selenium.TimeoutException: ожидаемое условие не выполнено: ожидание видимости всех элементов, расположенных с помощью By.xpath: //h5[text()=’Elements’] (попытка длилась 30 секунд с интервалом 500 миллисекун…

14
Апр
2022

Какой фремворк для интеграционного тестирования использует текстовое описание теста [закрыт]

Проблема:

Существуют ли юнитестфреймовки тесты в котором описываються текстовыми критериями а не кодом? Если да то что это за фреймворки

Пример: (как я его вижу)

Тестировщику поставлена задача написать автотест для проверки создания сущ…

10
Апр
2022

Как после выполнения теста selenium запустить скрипт на питоне?

Есть тест на selenium, сгенерированный selenium ide. Он скачивает с сайта файл .xls, есть скрипт на питоне, который проверяет этот файл на корректность. Как после выполнения теста автоматически запускать этот скрипт?

10
Апр
2022

Как после выполнения теста selenium запустить скрипт на питоне?

Есть тест на selenium, сгенерированный selenium ide. Он скачивает с сайта файл .xls, есть скрипт на питоне, который проверяет этот файл на корректность. Как после выполнения теста автоматически запускать этот скрипт?

19
Мар
2022

Не может найти xpath при автотесте входа mail ru

Я только начинаю изучать тестирование в Selenide JAVA. Я попытался создать простенький автотест со входом в свою учетную запись. Копирую Xpath ПКМ через настройки, до этого в других сайтах работала, но тут я вижу что при клике на TextBox h…

20
Фев
2022

Модульное тестирование REST сервиса

Пишу REST сервис на CDI. Используется библиотека helidon. При запуске этот сервис получает часть конфигурации с другого сервиса. Это сделано при помощи специального config-интерфейса org.eclipse.microprofile.config.spi.ConfigSource. Класс,…

09
Фев
2022

Хрупкие тесты при использовании моков репозиториев

Задача: нужно протестировать метод, который под капотом обращается к репозиторию:
public Result businecLoigc(int x, int y) {
int z = …; //шаг 1 – но основе x и y формируем z

T t = myRepository.get(z); //шаг 2

//… оставшая…

07
Фев
2022

Копирование mock сервиса из SoapUI в питоновский скрипт

Всем привет, есть мок сервис и запрос в soap проекте от разраба, можно ли заюзать мок сервис питоном? Отдельно запрос я могу отправить питоновским скриптом, взяв url и xml запроса из проекта, а что делать с мок сервисом? Только запускать в…

07
Фев
2022

Копирование mock сервиса из SoapUI в питоновский скрипт

Всем привет, есть мок сервис и запрос в soap проекте от разраба, можно ли заюзать мок сервис питоном? Отдельно запрос я могу отправить питоновским скриптом, взяв url и xml запроса из проекта, а что делать с мок сервисом? Только запускать в…

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();
    }

    

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


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

Выводы

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

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