Skip to content

VK-Education-QA-Python/2022-2-VK-QA-PYTHON-freezenook

Repository files navigation

Практическая работа выполнена в рамках курса Автотестирование (Осень 2022) от VK Образование.

Автор: Владимир Логутов

Домашнее задание №1: Базовые навыки работы с Selenium

Задача

  • Тестирование портала 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 за корректно проходящий тест). Проверка может осуществляться по наличию какого-то уникального для страницы локатора.

Что было сделано (4 балла из 4)

  • Описание тестов

    • Тест логина. Данные пользователя передаются через функцию в test.py
    • Тест логаута
    • Негативный тест авторизации №1, если вместо email стоит невалидный набор символов
    • Негативный тест авторизации №2, если неправильный логин и/или пароль
    • Заполнение контактной информации (ФИО, ИНН, телефон). Данные передаются через функцию в test.py
    • Параметризированный тест перехода в разделы "Профиль" и "Инструменты".
  • Настроено окружение для корректного запуска UI тестов:

    • добавлен марк -m UI
    • выбрана версия 105.0.5195.19 chromedriver
    • настроены зависимости requirements.txt

Домашнее задание №2: Продвинутые навыки работы с Selenium

Цель домашнего задания

  • Научиться более продвинуто работать с элементами и действиями с браузером.
  • Изучение паттерна 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 главной страницы.
  1. Общее (4 балла):
    • Тесты должны уметь запускаться параллельно (библиотека pytest-xdist) через –n (2 балла).
    • Тесты должны иметь хороший информативный отчет в allure (шаги, логи, скриншоты) (2 балла).
  2. UI (12 баллов):
    • Написать тест на создание рекламной кампании любого типа и проверять что она создана (4 балла).
    • Написать тест на создание сегмента в аудиториях с типом "Приложения и игры в соцсетях" и проверить что сегмент создан (2 балла).
    • Написать тест на создание сегмента, добавив в источники данных группу VK образования. После этого вам нужно создать сегмент (как и в п.2) с типом "Группы OK и VK", проверить, что он есть, а затем удалить именно этот сегмент и добавленный источник данных (3 балла).
    • Весь код должен быть реализован на паттерне PageObject (3 балла).

Что было сделано (15 баллов из 18)

  • Описание тестов

    • Тест на создание рекламной кампании, который проверяет её успешное создание. Параметры: 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

Домашнее задание №3: Работа с API myTarget

Цель домашнего задания

  • Научиться делать то же самое, что и браузер, но самостоятельно через 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 балла)

Что было сделано (10 баллов из 10)

  • Описание тестов

    • Тест на создание сегмента в аудиториях через API. Сегмент создаётся, проверяется и удаляется.
    • Тест на создание сегмента с источником в виде группы VK Образование. Сегмент создается, проверяется удаляется. Источник добавляется, а после работы теста удаляется. Хитрость: метод на добавление группы в источники предварительно проверяет наличие этой группы в источниках. Если группа уже есть, повторное добавление не производится, а метод возвращает существующее четырехзначное id. Таким образом, не нужно готовить аккаунт вручную перед проведением теста.
  • Особенности тестов и окружения:

    • Тесты запускаются в несколько потоков через марк API (команда pytest -m API test_api/test.py -n=3)
    • Логин вынесен в отдельный тест для наглядности. Но его выполнение необязательно, так как логин происходит при инициализации клиента
    • Все названия создаваемых сегментов уникальны и берутся из текущего времени (функция time.time())
    • Создание/удаление сегментов и источников вынесено в отдельные setup-teardown фикстуры в base.py

Домашнее задание №5: Backend: Linux

Цель домашнего задания

  • Анализировать nginx логи
  • Освоить написание bash скриптов в одну строчку
  • Научиться писать bash/python скрипты

Задача

Bash/Python scripting (максимум 6 баллов)
  • Написать скрипты на 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

Что было сделано (5 баллов из 6)

  • Для bash реализован подсчёт всех пяти заданий
  • На Python реализован подсчёт 2, 3 и 5 заданий в соответствии с ТЗ
  • Запись результатов в JSON не сделана
  • Подробное описание в README

Домашнее задание №6 - Backend: MySQL

Цель домашнего задания:

  • Научиться работать с СУБД из Python
  • Получить навыки использования ORM (sqlalchemy)

Задача (максимум 7 баллов)

  1. Написать в формате тестов код для создания БД и добавления access логов из домашнего задания №5.

  2. Все нижеперечисленные действия должны выполняться из Python. Все баллы за задания эквивалентны прошлому ДЗ, за исключением пункта с опцией --json для python скрипта, т.е. нужно:

    2.1. Создать mysql БД для результатов подсчета прямо из тестов, на каждый запуск тестов БД должна пересоздаваться. 2.2. Переписать скрипт на python из предыдущего домашнего задания в формат тестов pytest, так, чтобы данные по каждому заданию заливались в БД. 2.3. Каждое задание заливается в отдельную таблицу.

  3. Проверить работу своего кода нужно по итоговому количеству записей в БД для каждого задания. В идеале - проверять и наполнение. То есть, если вам нужно вывести топ-10 записей, то проверяем, что их действительно столько. НЕ ХАРДКОДИТЬ, т.е. мы можем попросить выводить топ-30 записей и т.д.

  4. Базу данных поднимаем и настраиваем так же как это делалось в лекции (127.0.0.1:3306, user=root, password=pass). Имя БД - TEST_SQL.

Что было сделано (7 баллов из 7)

  1. БД MySQL находится в контейнере Docker, запущенном локально.
  2. Работа с БД реализована с использованием sqlalchemy
  3. В ассертах проверяется не просто количество записей в таблице БД, а сравнивается содержимое
  4. Код для обработки 2, 3 и 5 заданий взят из HW5
  5. 1 и 4 задания дописаны
  6. Исходный лог-файл access.log должен находиться в /data

Домашнее задание №7 - Http Mock

Цель домашнего задания:

  • Научиться создавать HTTP-клиенты и Mock сервера с использованием различных библиотек и фреймворков;
  • Научиться писать тесты, когда необходимо использовать Mock сервера.

Условия:

Максимум 10 баллов.

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

  • Разобраться в библиотеке fastapi (базовые функционал) и повтроить функционал на базе кода из лекции:
    • переписать и дополнить код клиента, разнеся его на отдельные классы и методы (запуск, отправка get/post-запросов в мок) - 2 балла;
    • реализовать обработчик ответов и выводить в лог-файл результат запроса и ответа: код ответа, заголовки, тело ответа - 2 балл;
  • Используя mock из лекции, реализовать обработку PUT (для обновления) и DELETE (для удаления) запросов - 2 балл.
  • Написать тесты на собственный Mock сервер (необходимое и достаточное количество, чтобы убедиться, что Mock работает корректно) - 2 балла
  • Привести код из лекции в порядок согласно концепциям, рассмотренных на курсе - 2 балла:
    • все разложено по классам
    • использутся фикстуры и хуки
    • код оптимизирован, убрана копипаста
    • можно трогать код приложения (app/app.py)
    • поправить логгирование мока запущенного в треде, чтобы выводил в файл
    • запускать flask на протоколе HTTP/1.1

Что было сделано (10 баллов из 10)

  • код из лекции был разнесен на разные классы и методы. Дублирование кода было убрано. Использованы фикстуры.
  • Реализованы PUT и DELETE запросы
  • Написаны тесты для проверки мока
  • Работа выполнена на примере автомобилей, их возраста и номеров. Для генерации случайной модели автомобиля задействована библиотека faker_vehicle VehicleProvider

About

2022-2-VK-QA-PYTHON-freezenook created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •