Почему важно тестирование?

Написание тестового примера похоже на выполнение упражнений, это болезненно, но мы все знаем, что упражнения могут улучшить наше здоровье, в основном разработчики никогда не пытаются писать тесты, потому что они находят это скучным или напрасной тратой времени. Некоторые из них, пытаясь, не охватывают альтернативные сценарии или напишут базовые тесты.

Поэтому важно писать тесты для вашего кода, потому что, пока вы не выполните свою строку кода, вы не знаете, может ли эта строка вообще работать. Вам нужно написать базовый набор тестов для проверки вашего кода.

Тесты важны для особо крупномасштабных приложений, поскольку все мы знаем, что детали могут быть изменены, поэтому должен быть способ сказать нам, что мы в надежных руках.

Что можно сделать при тестировании?

  • При рефакторинге он обеспечивает быстрый автоматизированный способ тестирования вашего кода.
  • Модульные тесты доказывают, что ваш код действительно работает.
  • Если вы не можете написать тест для чего-то, значит, вы этого не понимаете.
  • Если вы или другой разработчик измените код, есть шанс нарушить ожидаемое поведение, поэтому мы можем решить эту проблему, запустив модульные тесты.
  • Потратив немного времени на написание тестов, можно сэкономить часы на будущую отладку.

Никакое количество тестов не может доказать правильность программного обеспечения, один тест может доказать, что программное обеспечение ошибочно ~ Амир Гахрай

  • Мы можем справиться с неожиданными сценариями ввода.
  • Стресс-тест, чтобы убедиться, что приложение может выдерживать высокие нагрузки.
  • Ошибки, обнаруженные ранее, легче исправить, ошибки, обнаруженные позже, обычно являются результатом множества изменений, и мы не знаем, какое из них вызвало ошибку.

Что нельзя делать при тестировании?

  • Тесты отлично подходят для поддержки поддерживаемого приложения, но они не могут проверить целостное поведение приложения.
  • Тесты не улучшают качество, в отличие от разработчиков.

Что такое Codeception?

Codeception - это фреймворк, написанный на PHP для тестирования приложений, и его многофункциональный фреймворк для тестирования, основанный на известной PHPUnit Framework.

~ Элегантное и эффективное тестирование для PHP ~

Он может управлять модулем, функционалом и приемкой для веб-приложения, давайте поговорим о наборах Codeception.

Наборы Codeception

Основным преимуществом Codeception является то, что нам не нужно работать только с одним типом тестирования, Codeception предлагает идею наборов (коллекций), Codeception по умолчанию состоит из трех наборов, которые следующие:

  1. Модульный тест.
  2. Вступительный тест.
  3. Функциональный тест.

При желании вы можете добавить любой другой набор по вашему выбору, поэтому здесь мы добавим набор API.

4. Тест API.

1. Модульные тесты

Тестирование наименьшей функциональной единицы, обычно функции / метода. Модульные тесты должны быть сосредоточены на тестировании конкретной функции, например, тестирование метода pop, когда стек пуст, должен вызывать исключение.

Мы можем написать множество тестовых функций для одного метода, который может обрабатывать валидацию, генерировать исключение и успешный сценарий. Таким образом, модульный тест помогает нам улучшить качество кода и избавить нас от сюрпризов.

В классе модуля есть предопределенные функции __before и _after, вы можете использовать их для создания объекта перед каждым тестом и уничтожения после.

В приведенном выше примере мы создали класс User и сделали функцию для проверки длины пароля, если длина меньше 4 символов, верните false, в противном случае верните true.

Затем мы создали модульный тест для класса пароля, в этом тестовом классе у нас есть две тестовые функции, поэтому мы можем протестировать каждую строку validLength из класса пароля.

2. Приемочные испытания

Приемочный тест позволяет нам тестировать наше приложение так же, как посещение браузера, заполнение формы и отправка, но с той лишь разницей, что нам не нужно открывать браузер, чтобы повторить этот шаг, благодаря приемочному тесту это тестирование проводится на стороне клиента. Обычно это называется пользовательским приемочным тестом, это тестирование может выполнить любой нетехнический специалист.

Мы можем выполнить это тестирование, используя phpBrowser или настоящий браузер, используя веб-драйвер Selenium. Но у phpBrowser есть и недостатки:

  • Вы нажимаете только действительные ссылки
  • Вы не можете заполнять внешние поля формы.

3. Функциональный тест

Функциональное тестирование почти такое же, как приемочное тестирование, за исключением того, что для выполнения тестов не требуется браузер. Он напрямую взаимодействует с вашим приложением / api и имеет отдельный модуль для php-фреймворков, например:

  • Symfony2
  • Laravel5
  • Yii2
  • Zend Framework

Все фреймворки имеют один и тот же интерфейс, поэтому ваши тесты не зависят от фреймворка, вам просто нужно включить желаемый модуль в функциональном наборе конфигурации, это не означает, что Codeception поддерживает только вышеупомянутые фреймворки, но в большинстве случаев для разработчиков достаточно списка поддерживаемых фреймворков. .

Функциональные тесты - это действия по проверке, чтобы ответить на вопрос: «Мы создали правильно работающий продукт?», Тогда как приемочные тесты - это действия по проверке сортировки, чтобы убедиться, что мы построили правильный продукт.

Примечание. Если вы не используете фреймворк, вы не можете писать функциональные тесты, потому что он просто поддерживается самим фреймворком. Посмотрите на пример:

4. Тесты API

Codeception имеет возможность создавать собственные наборы, поэтому мы можем создать набор API с помощью команды, предоставленной Codeception.

vendor/bin/codecept generate:suite api

Вышеупомянутая команда создаст новую папку с именем tests/api. У каждого пакета будет свой файл конфигурации. Откройте api.suite.yml и добавьте необходимую информацию. ваш файл должен выглядеть так:

  • Если вы используете Laravel, вы можете добавить модуль Laravel вместо phpBrowser .

Вот пример теста API:

Вы можете скачать исходный код с примерами набора здесь.

Установка Codeception?

Мы можем установить Codeception из композитора:

composer require codeception/codeception — dev

После этого выполните следующую команду, которая создаст папку /tests в вашем проекте.

/vendor/bin/codecept bootstrap

Конфигурация Codeception

У нас будет codeception.yml в нашем корневом каталоге, который создается с помощью вышеупомянутой команды. Давайте посмотрим на codeception.yml файл, и я также добавил несколько комментариев, описывающих каждую строку:

Подробнее о доступной конфигурации вы можете прочитать здесь.

Структура каталога Codeception

Если вы войдете в каталог /tests, созданный в результате выполнения команды ./vendor/bin/codecept bootstrap. Там вы увидите следующую структуру каталогов:

  • _data
    В этом каталоге может быть DB /file/Fixtures, если вам это нужно.
  • _output
    Этот каталог содержит результаты тестов в случае сбоя.
  • _support
    В этом каталоге могут быть помощники, если вы напишете их для поддержки своих тестов.
  • прием
    Этот каталог полезен, если вам нужно написать приемочные тесты.
  • api
    Этот каталог полезен при написании тестов API. Этот каталог отсутствует по умолчанию, но он будет создан в результате команды создания пакета API.
  • функциональный
    Этот каталог полезен, если вам нужно написать функциональные тесты.
  • unit
    Этот каталог полезен, если вам нужно написать модульные тесты.
  • _bootstrap.php
    Этот файл полезен для автозагрузки любого файла, который вы хотите включить.
  • accept.suite.yml
    Этот файл содержит конфигурацию пакета принятия.
  • api.suite.yml
    Этот файл содержит конфигурацию пакета API.
  • financial.suite.yml
    Этот файл содержит конфигурацию функционального пакета.
  • unit.suite.yml
    Этот файл содержит конфигурацию набора модулей.

Также в каталоге /api находится _bootstrap.php ,. Это полезно, если вы хотите включить и автоматически загрузить любой файл только в пакет API .

использованная литература

  1. Http://codeception.com
  2. Https://medium.com/agilix/codeception-101-start-to-test-8d59bb47e630
  3. Https://www.toptal.com/php/php-testing-with-codeception
  4. Http://www.compilehorrors.com/test-driven-development-tdd-vs-test-last-development-tld-a-comparative-study/