Skip to content

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

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

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

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

Что было сделано:

  • Настроено окружение для корректного запуска UI тестов:

    • добавлен марк -m UI
    • выбрана версия 105.0.5195.19 chromedriver
    • добавлены входные аргументы в метод pytest_addoption
    • настроены зависимости requirements.txt
  • Написаны тесты:

    • Класс TestValidLogin c валидными параметрами на логин:
      • test_valid_login на корректную авторизацию
    • Класс TestInvalidLogin на некорректную авторизацию:
      • параметризованный test_invalid_login на некорректный ввод данных при попытке входа
      • параметризованный test_unregister_user_login на авторизацию незарегистрированных пользователей
    • Класс TestLoggedInUser c валидными параметрами логина на поведение авторизованного пользователя:
      • test_logout на выход из аккаунта
      • параметризованный test_edit_user_info на редактирование контактной информации в профиле
      • параметризованный test_page_transition на переход между страницами портала

Домашнее задание №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 балла).
  • Самостоятельно: попробовать установить селеноид и научиться им пользоваться. Мы не будем проверять эту часть, но она вам потребуется на итоговом проекте. Также вы можете впоследствии самостоятельно позапускать домашку с selenoid'ом вне рамок сдачи ДЗ.
  • Так же можно приложить в мр линк на видео успешного запуска селеноида у вас локально, за это можно будет получить два дополнительных бонусных балла (2 балла)

Что было сделано:

  • Настроено окружение для корректного запуска UI тестов:

    • добавлен марк -m UI
    • выбрана версия 105.0.5195.19 chromedriver
    • добавлены входные аргументы в метод pytest_addoption
    • настроены зависимости requirements.txt
    • реализована фикстура, которая авторизовывается и возвращает в тест PageObject главной страницы
    • добавлена поддержка параллельного запуска (библиотека pytest-xdist)
    • использован паттерн PageObject
    • добавлен файл valid_creds.txt с валидными значения логина и пароля для авторизации
    • реализована генерация информативного отчета в allure (шаги, логи, скриншоты)
  • Написаны тесты:

    • Класс TestCampaign:
      • test_special_campaign на создание и проверку рекламной кампании "Специальные возможности"
    • Класс TestSegment:
      • test_game_app_segment на создание и проверку сегмента в аудиториях с типом "Приложения и игры в соцсетях"
      • test_vk_ok_segment на создание, проверку и удаление сегмента c источником данных группы VK образование, а также удаление самого источника данных

Домашнее задание №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 балла)

Что было сделано:

  • Настроено окружение для корректного запуска API тестов:

    • добавлен марк -m API
    • настроены зависимости requirements.txt
    • добавлена поддержка параллельного запуска (библиотека pytest-xdist)
    • добавлен файл valid_creds.txt с валидными значения логина и пароля для авторизации
    • написан API клиент, который может авторизовываться на портале
  • Написаны тесты:

    • Класс TestCampaignApi:
      • test_campaign_creation_deletion на создание, удаление и проверку рекламной кампании "Специальные возможности"
    • Класс TestSegmentApi:
      • параметризованный test_segment_creation_deletion на создание, удаление и проверку сегмента в аудиториях с типом "Приложения и игры в соцсетях"
      • параметризованный test_vk_ok_source_segment_creation_deletion на создание, удаление и проверку сегмента с источником данных группы "VK образование", а также проверку на удаление самого источника данных

Домашнее задание №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

Что было сделано:

  • Написан bash script:
    • > result.txt создает файл result.txt(далее файл)

    • echo "Общее число запросов" >> result.txt выводит в файл заголовок для первого результата

    • wc -l < access.log >> result.txt выводит в файл общее число строк (в данном случае это будут все запросы) без имени файла

    • echo >>result.txt | echo "Общее количество запросов по типу" >> result.txt выводит в файл заголовок для второго результата

    • cat access.log | awk '{print $6}' | sort | uniq -c | sort -nr >> result.txt из содержимого access.log выбираются методы по расположению в строке, которые затем сортируются, чтобы потом отсортировать их по уникальности в порядке убывания и в результате вывести в файл общее количество запросов по типу в виде:

       число запросов тип запроса
      
    • echo >>result.txt | echo "Топ 10 самых частых запросов" >> result.txt выводит в файл заголовок для третьего результата

    • cat access.log | cut -d " " -f 7 | sort | uniq -c | sort -nr | head -n 10 | awk '{print $2, "\n" $1}' >> result.txt из содержимого access.log выбираются урлы по расположению в строке, которые затем сортируются, чтобы потом отсортировать их по уникальности в порядке убывания, выбираются только первые 10 строк и в конце настраивается порядок вывода в файл в виде:

       url
       число запросов
      
    • echo >>result.txt | echo "Топ 5 самых больших по размеру запросов, которые завершились клиентской (4ХХ) ошибкой" >> result.txt выводит в файл заголовок для четвертого результата

    • cat access.log | awk '$9 ~/4./' | sort -k10 -nr | head -n 5 | awk '{print $7, "\n" $9, "\n" $10, "\n" $1}' >> result.txt из содержимого access.log выбираются строки только с 4XX ошибками, которые потом сортируются по убыванию размера запроса, затем выбираются только первые 5 строк и в конце настраивается порядок вывода в файл в виде:

       url
       статус код
       размер запроса
       ip адрес
      
    • echo >>result.txt | echo "Топ 5 пользователей по количеству запросов, которые завершились серверной (5ХХ) ошибкой" >> result.txt выводит в файл заголовок для пятого результата

    • cat access.log | awk '$9 ~/5./' | awk '{print $1}' | uniq -c | sort -nr| head -n 5 | awk '{print $2, "\n" $1}' >> result.txt из содержимого access.log выбираются строки только с 5XX ошибками, потом выбираются ip адреса, которые сортируются по количеству в порядке убывания, выбираются только первые 5 строк и в конце настраивается порядок вывода в файл в виде:

       ip адрес
       количество запросов
      
  • Написан python script:
    • функция top_methods для вывода общего количества запросов по типу в файл py_result.txt (далее файл)
    • функция top_reqs для вывода топ 10 самых частых запросов в файл
    • функция top_big_reqs для вывода топ 5 самых больших по размеру запросов, которые завершились клиентской (4ХХ) ошибкой

Выводы:

Bash скрипты в одну строку мне показались намного удобнее для поиска необходимой информации в строках, так как в python скриптах приходится заморачиваться с открытием/чтением файла, всякими типами данных для сортировки нужной информации и т.д. Конечно python позволяет затем что угодно делать с полученными данными, но именно лаконичность bash скриптов мне кажется очень весомым плюсом.

Домашнее задание №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.

Что было сделано:

  • Настроено создание базы данных mysql с ORM(sqlalchemy):

    • база данных TEST_SQL (127.0.0.1:3306, user=root, password=pass) создается с 3 таблицами перед тестами и удаляется после завершения тестов
  • Написаны тесты:

    • Класс TestMysql:
      • test_top_methods на заполнение таблицы total_methods по заданию на "Общее количество запросов по типу" и проверку количества записей
      • test_top_reqs на заполнение таблицы top_reqs по заданию на "Топ 10 самых частых запросов" и проверку количества записей
      • test_top_big_reqs на заполнение таблицы top_big_reqs по заданию "Топ 5 самых больших по размеру запросов, которые завершились клиентской (4ХХ) ошибкой" и проверку количества записей

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •