Практическая работа выполнена в рамках курса Автотестирование (Осень 2022) от VK Образование.
Автор: Владимир Логутов
- Тестирование портала https://target-sandbox.my.com/
- Настроить окружение для запуска UI тестов, UI тесты должны запускаться через марк -m UI
- В качестве браузера используем Google Chrome версии 105.0.5195.19. Устанавливаться драйвер должен через webdriver_manager.
- Необходимо передать в качестве входного аргумента pytest (в метод pytest_addoption) значение
parser.addoption('--headless', action='store_true')
Разбалловка:
- Написать тест на логин (0.5 балла).
- Написать тест на логаут (0.5 балла)
- Написать два (или более) негативных теста на авторизацию (1 балл).
- Написать тест на редактирование контактной информации в профиле https://target-sandbox.my.com/profile/contacts - 1 балл
- Написать параметризованный тест на переход на страницы портала через кнопки Аудитории/Баланс/Статистика/PRO/Профиль/Инструменты/Помощь в шапке меню (на любые 2). Каждый из этих тестов должен переходить по выбранным меню и проверять, что был выполнен переход именно на выбранную страницу - 1 балл (0.5 за параметризацию, 0.5 за корректно проходящий тест). Проверка может осуществляться по наличию какого-то уникального для страницы локатора.
-
Описание тестов
- Тест логина. Данные пользователя передаются через функцию в test.py
- Тест логаута
- Негативный тест авторизации №1, если вместо email стоит невалидный набор символов
- Негативный тест авторизации №2, если неправильный логин и/или пароль
- Заполнение контактной информации (ФИО, ИНН, телефон). Данные передаются через функцию в test.py
- Параметризированный тест перехода в разделы "Профиль" и "Инструменты".
-
Настроено окружение для корректного запуска UI тестов:
- добавлен марк -m UI
- выбрана версия 105.0.5195.19 chromedriver
- настроены зависимости requirements.txt
- Научиться более продвинуто работать с элементами и действиями с браузером.
- Изучение паттерна PageObject.
- Научиться писать тесты под параллельный запуск Selenium.
- Научиться формировать отчет о тестировании.
- Тестирование портала https://target-sandbox.my.com/
- UI тесты должны запускаться через марк -m UI
- В качестве браузера используем Google Chrome версии 105.0.5195.19. Устанавливаться драйвер должен через webdriver_manager.
- Необходимо передать в качестве входного аргумента pytest (в метод pytest_addoption) значение
parser.addoption('--headless', action='store_true')
(как в первой ДЗ) - Необходимо реализовать фикстуру, которая будет сама авторизовываться и возвращать в тест PageObject главной страницы.
- Общее (4 балла):
- Тесты должны уметь запускаться параллельно (библиотека pytest-xdist) через –n (2 балла).
- Тесты должны иметь хороший информативный отчет в allure (шаги, логи, скриншоты) (2 балла).
- UI (12 баллов):
- Написать тест на создание рекламной кампании любого типа и проверять что она создана (4 балла).
- Написать тест на создание сегмента в аудиториях с типом "Приложения и игры в соцсетях" и проверить что сегмент создан (2 балла).
- Написать тест на создание сегмента, добавив в источники данных группу VK образования. После этого вам нужно создать сегмент (как и в п.2) с типом "Группы OK и VK", проверить, что он есть, а затем удалить именно этот сегмент и добавленный источник данных (3 балла).
- Весь код должен быть реализован на паттерне PageObject (3 балла).
-
Описание тестов
- Тест на создание рекламной кампании, который проверяет её успешное создание. Параметры: URL группы, название кампании, заголовок объявления и текст объявления передаются через метод и могут быть любыми. По умолчанию имя кампании уникальное (=time.time()). (это актуально для всех тестов)
- Тест на создание сегмента в аудиториях с типом "Приложения и игры в соцсетях" и проверка его создания. Метод создания сегментов общий для 2 и 3 тестов. Тип сегмента выбирается константой из /ui/constants.py
- Тест на создание сегмента с группой VK образования. Группа перед созданием сегмента добавляется в источники. После именно этот сегмент и добавленный источник данных удаляются.
-
Особенности окружения
- Весь код реализован на паттерне PageObject.
- Сделана генерация пошагового отчёта Allure и логирование. На запуск команда pytest -m UI test.py --alluredir=C:\tests\allure (здесь - путь до отчета Allure)
- Тесты проходят в headless-режиме
- Поддерживается многопоточность, проверял на 2 и 4 потоках. Команда pytest -m UI test.py -n=4
- Научиться делать то же самое, что и браузер, но самостоятельно через API-запросы. Работа с API идет без документации, просто по аналогии с тем, как работает браузер с запросами (на примере сущностей из ДЗ №2).
- Научиться писать тесты с использованием библиотеки requests.
- Тестирование портала https://target-sandbox.my.com
- Настроить окружение для запуска API-тестов.
- API-тесты должны запускаться через марк -m API.
- Все тесты должны работать как минимум в 2 потока (через pytest-xdist с аргументом -n 2).
- Описание ДЗ (10 баллов):
- Написать API клиент, который будет иметь возможность авторизовываться на портале (3 балла).
- Написать тест на работу с кампанией кампании любого типа через API: кампания должна быть создана, затем проверена, что она создана, после этого - удалена (2 балла). Все в рамках одного теста.
- Написать тест на работу с сегментами в аудиториях через API : сегмент должен быть создаен, затем проверен, что он создался, после этого - удален (2 балл). Все в рамках одного теста.
- Написать тест на создание сегмента, предварительно добавив в источники данных группу VK образования. После этого вам нужно создать сегмент (как и в пункте выше) с типом "Группы OK и VK", проверить, что он есть, а затем удалить именно этот сегмент и добавленный источник данных (3 балла)
-
Описание тестов
- Тест на создание сегмента в аудиториях через API. Сегмент создаётся, проверяется и удаляется.
- Тест на создание сегмента с источником в виде группы VK Образование. Сегмент создается, проверяется удаляется. Источник добавляется, а после работы теста удаляется. Хитрость: метод на добавление группы в источники предварительно проверяет наличие этой группы в источниках. Если группа уже есть, повторное добавление не производится, а метод возвращает существующее четырехзначное id. Таким образом, не нужно готовить аккаунт вручную перед проведением теста.
-
Особенности тестов и окружения:
- Тесты запускаются в несколько потоков через марк API (команда pytest -m API test_api/test.py -n=3)
- Логин вынесен в отдельный тест для наглядности. Но его выполнение необязательно, так как логин происходит при инициализации клиента
- Все названия создаваемых сегментов уникальны и берутся из текущего времени (функция time.time())
- Создание/удаление сегментов и источников вынесено в отдельные setup-teardown фикстуры в base.py
- Анализировать nginx логи
- Освоить написание bash скриптов в одну строчку
- Научиться писать bash/python скрипты
-
Написать скрипты на bash и python для анализа готового access.log (на python)
-
Должен быть README.md файл, который описывает как работает каждый скрипт.
-
Слово "запрос" далее означает конкретный location(path! внимательно прочитайте что это такое, буду душнить и снижать баллы), который был запрошен у сервера
-
Для приложенного в задании access.log файла должна собираться следующая информация:
-
Общее количество запросов (1 балл)
-
Общее количество запросов по типу, например: GET - 20, POST - 10 и т.д. (1 балл)
-
Топ 10 самых частых запросов (1 балл):
должен выводиться url должно выводиться число запросов
-
Топ 5 самых больших по размеру запросов, которые завершились клиентской (4ХХ) ошибкой (1 балл):
должен выводиться url должен выводиться статус код должен выводиться размер запроса должен выводиться ip адрес
-
Топ 5 пользователей по количеству запросов, которые завершились серверной (5ХХ) ошибкой (1 балл):
должен выводиться ip адрес должно выводиться количество запросов
-
-
Результаты нужно сохранять в произвольный файл (должен быть указан в README.md) в формате "какая информация собирается" <перенос строки> "результат"
-
Дополнительное задание (1 балл):
- Для Python скрипта реализовать возможность сохранять собранные данные в JSON (флаг запуска --json), скруктура JSON произвольная
-
Сделать выводы в чем минусы и плюсы решения на BASH и на PYTHON.
-
Для тех кто дочитал, в Python части можно сделать только 2, 3 и 4 или 5 (3 в сумме) задания, рекомендую использовать библиотеку re
- Для bash реализован подсчёт всех пяти заданий
- На Python реализован подсчёт 2, 3 и 5 заданий в соответствии с ТЗ
- Запись результатов в JSON не сделана
- Подробное описание в README
- Научиться работать с СУБД из Python
- Получить навыки использования ORM (sqlalchemy)
-
Написать в формате тестов код для создания БД и добавления access логов из домашнего задания №5.
-
Все нижеперечисленные действия должны выполняться из Python. Все баллы за задания эквивалентны прошлому ДЗ, за исключением пункта с опцией
--json
для python скрипта, т.е. нужно:2.1. Создать mysql БД для результатов подсчета прямо из тестов, на каждый запуск тестов БД должна пересоздаваться. 2.2. Переписать скрипт на python из предыдущего домашнего задания в формат тестов pytest, так, чтобы данные по каждому заданию заливались в БД. 2.3. Каждое задание заливается в отдельную таблицу.
-
Проверить работу своего кода нужно по итоговому количеству записей в БД для каждого задания. В идеале - проверять и наполнение. То есть, если вам нужно вывести топ-10 записей, то проверяем, что их действительно столько. НЕ ХАРДКОДИТЬ, т.е. мы можем попросить выводить топ-30 записей и т.д.
-
Базу данных поднимаем и настраиваем так же как это делалось в лекции (127.0.0.1:3306, user=root, password=pass). Имя БД - TEST_SQL.
- БД MySQL находится в контейнере Docker, запущенном локально.
- Работа с БД реализована с использованием sqlalchemy
- В ассертах проверяется не просто количество записей в таблице БД, а сравнивается содержимое
- Код для обработки 2, 3 и 5 заданий взят из HW5
- 1 и 4 задания дописаны
- Исходный лог-файл access.log должен находиться в /data
- Научиться создавать HTTP-клиенты и Mock сервера с использованием различных библиотек и фреймворков;
- Научиться писать тесты, когда необходимо использовать Mock сервера.
Максимум 10 баллов.
Взаимодействие может производиться с теми же сущностями (люди), либо вы можете предложить собственную реализацию.
- Разобраться в библиотеке fastapi (базовые функционал) и повтроить функционал на базе кода из лекции:
- переписать и дополнить код клиента, разнеся его на отдельные классы и методы (запуск, отправка get/post-запросов в мок) - 2 балла;
- реализовать обработчик ответов и выводить в лог-файл результат запроса и ответа: код ответа, заголовки, тело ответа - 2 балл;
- Используя mock из лекции, реализовать обработку PUT (для обновления) и DELETE (для удаления) запросов - 2 балл.
- Написать тесты на собственный Mock сервер (необходимое и достаточное количество, чтобы убедиться, что Mock работает корректно) - 2 балла
- Привести код из лекции в порядок согласно концепциям, рассмотренных на курсе - 2 балла:
- все разложено по классам
- использутся фикстуры и хуки
- код оптимизирован, убрана копипаста
- можно трогать код приложения (app/app.py)
- поправить логгирование мока запущенного в треде, чтобы выводил в файл
- запускать flask на протоколе HTTP/1.1
- код из лекции был разнесен на разные классы и методы. Дублирование кода было убрано. Использованы фикстуры.
- Реализованы PUT и DELETE запросы
- Написаны тесты для проверки мока
- Работа выполнена на примере автомобилей, их возраста и номеров. Для генерации случайной модели автомобиля задействована библиотека faker_vehicle VehicleProvider