- Изучить минимальный набор знаний и навыков для работы с 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
на переход между страницами портала
- Класс TestValidLogin c валидными параметрами на логин:
- Научиться более продвинуто работать с элементами и действиями с браузером.
- Изучение паттерна 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 балла).
- Самостоятельно: попробовать установить селеноид и научиться им пользоваться. Мы не будем проверять эту часть, но она вам потребуется на итоговом проекте. Также вы можете впоследствии самостоятельно позапускать домашку с 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 образование, а также удаление самого источника данных
- Класс TestCampaign:
- Научиться делать то же самое, что и браузер, но самостоятельно через 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 образование", а также проверку на удаление самого источника данных
- параметризованный
- Класс TestCampaignApi:
- Анализировать 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 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 скриптов мне кажется очень весомым плюсом.
- Научиться работать с СУБД из 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 с 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ХХ) ошибкой" и проверку количества записей
- Класс TestMysql: