Статьи

8 должны иметь инструменты обеспечения качества PHP

Это популярное сообщение было обновлено 30 июня 2017 года и теперь содержит новейшие технологии и инструменты.


Для кода качества доставки мы должны иметь в виду тестирование во время кодирования (если не выполняем TDD). Тем не менее, с широким спектром инструментов для тестирования PHP, сделать выбор трудно! Изучение PHP — это увлекательное приключение (премиум курс об этом здесь !), Но сложно собрать поясной инструмент, который не слишком тяжел для ношения!

Эта популярная статья расскажет о самых популярных инструментах тестирования и была обновлена, чтобы отразить состояние инструментов QA в 2017 году.

Непроверенный код — это неработающий код.

Иллюстрация среды лабораторного тестирования

PHPUnit

PHPUnit — это платформа для тестирования PHP. Он был создан Себастьяном Бергманном в 2004 году и имеет версию 6, для которой требуется PHP 7.

У нас есть множество учебных пособий, но вот некоторые из них вы уже можете использовать.

Огурец

Огурец является основой для создания приемочных испытаний из спецификаций. Он известен своими описательно сгенерированными текстами, которые можно читать как обычный английский. Официальная реализация PHP для Cucumber — Behat .

Behat логотип

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

Feature: Listing command
  In order to change the structure of the folder I am currently in
  As a UNIX user
  I need to be able see the currently available files and folders there

  Scenario: Listing two files in a directory
    Given I am in a directory "test"
    And I have a file named "foo"
    And I have a file named "bar"
    When I run "ls"
    Then I should get:
      """
      bar
      foo
      """

Atoum

Логотип Atoum

Atoum — это еще одна инфраструктура модульного тестирования для PHP. Это автономный пакет, который вы можете установить через GitHub, Composer или через исполняемый файл PHAR.

Тесты Atoum очень удобочитаемы с выразительными именами методов и цепочкой.

 $this->integer($classInstance->myMethod())
        ->isEqualTo(10);

$this->string($classInstance->myMethod())
        ->contains("Something heppened");

Вы хотите узнать больше о модульном тестировании PHP с Atoum, вы можете следовать этому руководству .

Селен

Selenium — это инструмент для автоматического тестирования браузеров (интеграционное и приемочное тестирование). Он преобразует тесты в команды браузера API и утверждает ожидаемые результаты. Он поддерживает большинство доступных браузеров.

Мы можем использовать Selenium с PHPUnit, используя расширение.

 composer require --dev phpunit/phpunit
composer require --dev phpunit/phpunit-selenium

Вот простой пример:

 class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase
{
    public function testFormSubmissionWithUsername()
    {
        $this->byName('username')->value('name');
        $this->byId('subscriptionForm')->submit();
    }
}

Вы можете следить за этой серией, если вы хотите узнать больше о тестировании с PHPUnit и Selenium .

смеркаться

Laravel Dusk Logo

Dusk от Laravel — еще один инструмент автоматизации браузера. Может использоваться автономно (с хромедривером ) или с селеном. Он имеет простой в использовании API и охватывает все возможности тестирования, такие как ожидание элементов, загрузка файлов, управление мышью и т. Д. Вот простой пример:

 class LanguagesControllerTest extends DuskTestCase
{
    public function testCreate()
    {
        $this->browse(function (Browser $browser) {
            $user = $this->getAdminUser();

            $browser->loginAs($user)
                ->visit('/panel/core/languages')
                ->click('#add')
                ->assertPathIs('/panel/core/languages/create')
                ->type('name', 'Arabic')
                ->select('direction', 'rtl')
                ->press('Submit')
                ->assertSee('Language: Arabic')
                ->assertSee('ar')
                ->assertSee('rtl')
                ->assertSee('Language created');
        });
    }
}

Вы можете проверить это руководство, чтобы начать тестирование в Dusk.

Кэлен

Логотип Кэлан

Kahlan — это полнофункциональная среда тестирования Unit & BDD, в которой используется синтаксис description-it.

 describe("Positive Expectation", function() {
    it("expects that 5 > 4", function() {
        expect(5)->toBeGreaterThan(4);
    });
});

Из приведенного выше синтаксиса видно, что он похож на тесты Behat. Kahlan поддерживает окурки и насмешки из коробки без каких-либо зависимостей, покрытия кода, отчетов и т. Д.

 it("makes a instance double with a parent class", function() {
    $double = Double::instance(['extends' => 'Kahlan\Util\Text']);

    expect(is_object($double))->toBe(true);
    expect(get_parent_class($double))->toBe('Kahlan\Util\Text');
});

php_testability

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

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

 composer require edsonmedina/php_testability "dev-master"

Затем запустите это так:

 vendor/bin/testability . -x vendor

Сервисы непрерывной интеграции (CI)

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

Большие пальцы руки вверх и вниз в одном

Существует множество сервисов, предлагающих хорошие ценовые уровни, но вы также можете использовать инструменты с открытым исходным кодом:

Вывод

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

Каков ваш опыт работы с инструментами, упомянутыми выше? Мы что-то пропустили? Дайте нам знать, и мы сделаем все возможное, чтобы расширить список необходимыми инструментами!