тестовое задание
Задание: Написать и автоматизировать тест-кейсы для нескольких endpoint'ов https://httpbin.org/ /headers /status/:code /redirect/:n
Требования к тестам :
-
Запуск тестов должен осуществляться средствами (Pytest или Junit).
-
Все запросы на сервер и ответы должны быть залоггированы.
Ограничений в библиотеках нет - любые сторонние библиотеки и\или плагины можно использовать по своему усмотрению. Логирование помимо запросов-ответов тоже по своему усмотрению. Плюсами будут:
1. Возможность собирать отчёт.
2. Возможность собрать документацию по автотестам.
3. Возможность настраивать глобальное логгирование при запуске тестов.
Тест-кейсы: 1. Раздел Status_codes. Так как в реальности методы обычно имею разные названия внутри одной точки (path) сделаем проверку каждого метода. В реализации httpbin.org можно было бы обойтись универсальным методом для тестирования передавая в качестве параметров( тип метода, код, результат). Установка кодов 302 и 303 возвращают 200 статус код с сервера httpbin.org, также проверим тип возвращаемого контента в тестах.
1.1. Проверка метода GET status
на корректность возвращаемого значения (передаем ожидаемый код, сверяем его значение с полученным, любые значения от 100 до 999)
1.2. Проверка метода POST status
на корректность возвращаемого значения (передаем ожидаемый код, сверяем его значение с полученным, любые значения от 100 до 999)
1.3. Проверка метода PUT status
на корректность возвращаемого значения (передаем ожидаемый код, сверяем его значение с полученным, любые значения от 100 до 999)
1.4. Проверка метода PATCH status
на корректность возвращаемого значения (передаем ожидаемый код, сверяем его значение с полученным, любые значения от 100 до 999)
1.5. Проверка метода DELETE status
на корректность возвращаемого значения (передаем ожидаемый код, сверяем его значение с полученным, любые значения от 100 до 999)
1.6 Проверка типа содержимого в ответе — ожидается content-type = text/html
в header ответного сообщения для любых методов: GET, POST, PUT, PATCH, DELETE
2. Проверка метода /headers
Проверка метода /headers также предполагает предварительную установку тестовых значений на сервере httpbin.org, а потом сверку установленного значения headers с возвращаемым значением в поле headers при вызове метода /headers
2.1 Проверка статус кода метода /headers. Ожидается значение 200.
2.2 Проверка типа содержимого в ответе — ожидается content-type = application/json
в header ответного сообщения
2.3 Проверка наличия в body ответного пакета JSON- структуры с именем поля «headers» в заголовке структуры( т.к. сервер httpbin.org принимает запрос GET headers
и в ответ в body пакета отсылает принятое значение headers при запросе)
3. Проверка метода /redirect/{n}
Перенаправление запроса на несколько адресов
3.1 Проверяем статус код на вызов метода /redirect/n — ожидаем код ответа 302 для всех n, пробуем с разными n(0,1,2,10)
3.2 Тип контента в перенаправленном урле должен быть text/html'
3.3 Проверяем количество перенаправлений на запрос /redirect/n ,пробуем со значениями n=1,2,3,10,20. Количество редиректов должно совпадать с указанным значением n
3.4 Редирект c /redirect/{n} должен осуществляться на следуюшие url: последнее значение n: /redirect/{n} для всех остальных значений /relative-redirect/{n-1}, /relative-redirect/{n-2}, … , /relative-redirect/1.
Особенности тестирования:
- Так как ресурс httpbin.org бывает не доступен, долго отвечает, а также наблюдались сбои при обращении из-за нагрузки со стороны других пользователей тестирование проводилось на локальном сервере путем разворачивания ресурса httpbin.org в докере(docker run -p 80:80 kennethreitz/httpbin) по адресу http://0.0.0.0:80 — меняется в настройках проекта.
- После запуска команды $pytest в корне проекта обносляются файлы в папке alluredir
- Создание отчета выполнятся запуском команды $allure serve <путь к папке alluredir в проекте>. Отчет успешно создается с отображением логов на запросы/ответы. Предварительно в системе должен быть установлен allure. В реальной жизни отчеты allure интегрируется в систему CI/CD, что более удобно для просмотра.
Настройки проета:
- Установка необходимых пакетов для работы проекта: pip install -r requirements.txt
- Запуск тестов: $pytest -v
- Создания отчета: $allure serve <путь к папке alluredir в проекте>
- Настройка домена в файле setting.py переменная DOMEN_NAME
- Настройки запуска pytest - файл pytest.ini
- Запуск тестируемого проекта(httpbin.org) в докере: docker run -p 80:80 kennethreitz/httpbin