March 27, 2019

Усовершенствуем тестирование и выложим проект на GitHub #2

Этот урок посвящён усовершенствованию нашего теста. Проблема такая:

  • Тест запускает браузер
  • Сравнивает title сайта с заданным текстом
  • Если всё хорошо и тест PASSED, то браузер закрывается
  • Если тест FAILED (провален), то браузер на данный момент у нас не закрывается. Это не правильно

Давайте решим эту проблему.

Сверху в окошечке (в PyCharm) отредактируем конфигурацию.

Слева сверху от кода находим окно прямоугольной формы с названием нашего файла (red_test.py). Нажимаем стрелочку вниз, в выпадающем меню выбираем Edit Configurations...

В появившемся окне сверху слева выбираем плюс, что бы добавить новую конфигурацию, и из выпадающего списка выбираем последовательно: Python tests -> Pytest.

В открывшемся окне заполняем:

Name: run_test (имя нашей конфигурации)

Target: C:/Users/admin/Desktop/ITPavel Project/itpavel_test/red_test.py (путь к файлу с нашими тестами)

Additional Arguments: -vs (ключи, которые будут переданы в качестве параметров. О них поговорим подробнее позже)

Жмём apply, OK. Теперь над кодом сверху слева, в окошечке должно быть run_test, и если мы запустим эту конфигурацию, заработает тестирование. Отлично! Теперь не надо в консоли писать:

pytest -vs red_test.py

Одной проблемой меньше. Теперь вторая проблема. Если сработало исключение, наш браузер не закрывался. Давайте импортируем в наш код pytest, создадим фикстуру, возвращающую объект веб-браузера, затем закрывающую его (в виде декоратора). И создадим функцию (имя её должно начинаться со слова test_), которая принимает в качестве параметра веб-браузер, переходит по ссылке и выполняет assert (проверку). Получилось так:

from selenium import webdriver
import pytest


@pytest.fixture()
def browser():
    browser = webdriver.Chrome('chromedriver_win32\chromedriver.exe')
    yield browser
    browser.quit()


def test_title(browser):
    browser.get('http://127.0.0.1:8000/home/')
    assert browser.title == 'ITPavel'

Отлично! Теперь при любом из возможных вариантов, наш браузер будет закрыт. Удобно.

Давайте зальем наш проект на github. Подробное знакомство с git (система контроля версий), залью позже. Итак, перейдём в папку с проектом, (ITPavel Project), инициализируем новый гит и посмотрим что можно закоммитить:

git init
git status

Весь мусор, типа кэша, настроек PyCharm виртуальной среды, нам в гите не нужен. Поэтому создадим файл .gitignore и запишем в него то, чего не желаем видеть нашем репозитории:

.idea
.pytest_cache
__pycache__/
project_venv

Супер, теперь выгрузим из pip зависимости (то, что мы установили):

pip freeze > reqirements.txt

Осталось добавить всё остальное к коммиту и закоммитить с пометкой, что это начало проекта:

git add .
git commit -m "Start project"

Осталось засинхронизировать наш проект с GitHub:

  • Регистрируемся на github
  • Создаем репозиторий
  • Добавляем в наш гит удалённый репозиторий и пушим изменения:
git remote add origin https://github.com/*гusername*/*reponame*.git
git push -u origin master

Готово! Теперь наш проект доступен другим разработчиком. Полный и актуальный код проекта вы можете наблюдать в моё репозитории.