8 outils d’assurance qualité PHP indispensables

Pour expédier du code de qualité, nous devons avoir les tests en tête tout en codant (si nous ne faisons pas de TDD). Cependant, avec le large éventail d’outils de test PHP disponibles, il est difficile de faire un choix !

Cet article met en avant les outils de test les plus populaires et a été mis à jour pour refléter l’état des outils d’assurance qualité en 2021.

PHPUnit

PHPUnit est le framework de test par excellence pour PHP. Il a été créé par Sebastian Bergmann en 2004 et actuellement en version 6 qui nécessite PHP 7.

Nous avons de nombreux tutoriels à venir à ce sujet.

Cucumber

Cucumber est un framework permettant de créer des tests d’acceptation à partir de spécifications. Il est connu pour ses textes descriptifs générés qui peuvent être lus en anglais simple. L’implémentation PHP officielle de Cucumber est Behat.

Logo Behat

L’exemple ci-dessous, tiré de la documentation, illustre bien l’expressivité de ces attentes.

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

Logo Atoum

Atoum est un autre framework de test unitaire pour PHP. C’est un paquetage autonome que vous pouvez installer via GitHub, Composer ou via un fichier exécutable PHAR.

Les tests d’Atoum sont très lisibles avec des noms de méthodes et des enchaînements expressifs.

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

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

Sélénium

Sélénium est un outil de test automatisé du navigateur (tests d’intégration et d’acceptation). Il transforme les tests en commandes API de navigateur et affirme les résultats attendus. Il supporte la plupart des navigateurs disponibles sur le marché.

Nous pouvons utiliser Selenium avec PHPUnit en utilisant une extension.

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

Voici un exemple simple :

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

Crépuscule

Logo Laravel Dusk

Dusk de Laravel est un autre outil d’automatisation du navigateur. Il peut être utilisé de manière autonome (avec chromedriver) ou avec Selenium. Il a une API facile à utiliser et couvre toutes les possibilités de test comme l’attente d’éléments, le téléchargement de fichiers, le contrôle de la souris, etc. Voici un exemple simple :

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');
        });
    }
}

Kahlan

Logo Kahlan

Kahlan est un cadre de test Unit & ; BDD complet qui utilise une syntaxe describe-it.

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

Vous pouvez voir de la syntaxe ci-dessus qu’elle est similaire aux tests Behat. Kahlan prend en charge le stubbing et le mocking dès le départ, sans dépendances, la couverture de code, les rapports, etc.

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

    expect(is_object($double))->toBe(true);
    expect(get_parent_class($double))->toBe('KahlanUtilText');
});

php_testability

Le dernier paquet que je veux mentionner ici est Testabilité de PHP. Il s’agit d’un outil d’analyse statique qui vous indique les problèmes de testabilité de votre programme et génère un rapport détaillé.

Le paquet n’a pas actuellement de version balisée sur laquelle vous pouvez compter, mais vous pouvez l’utiliser sans risque en développement. Vous pouvez l’installer via Composer :

composer require edsonmedina/php_testability "dev-master"

Exécutez-le ensuite comme ceci :

vendor/bin/testability . -x vendor

Services d’intégration continue (CI)

Une partie importante de la livraison du code lors du travail en équipe est la capacité de vérifier automatiquement le code avant qu’il ne soit fusionné au dépôt officiel du projet. La plupart des services/outils d’intégration continue disponibles permettent de tester le code sur différentes plates-formes et configurations afin de s’assurer que votre code peut être fusionné en toute sécurité.

Les pouces en haut et en bas en un seul geste

Il existe de nombreux services qui proposent de bons tarifs, mais vous pouvez également utiliser des outils open source :

Conclusion

Adopter la culture du test est difficile, mais cela se développe lentement avec la pratique. Si vous tenez à votre code, vous devez le tester !

Nouveau Tutoriel

Newsletter

Ne manquez jamais les nouveaux conseils, tutoriels et autres.

Pas de spam, jamais. Nous ne partagerons jamais votre adresse électronique et vous pouvez vous désabonner à tout moment.