Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-07-2015 15:33:38

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

[Resolu] Jenkins, Phpunit et ZF2

Bonjour à tous,

Voilà j'ai suivi un tuto de pascal Martin sur Jenkins et l'intégration continue :

http://blog.pascal-martin.fr/post/integ … et-phpunit

Cela m'a permis de créer mon build aux petits oignons.
Mais j'ai juste un souci.
En effet, mon projet est sous ZF2, donc les tests unitaires sont effectués module par module ce qui est problématique si j'utilise cette syntaxe, qui ne marche que pour un seul module :

Code:

[lang=xml]
<target name="phpunit">
        <exec logoutput="true" dir="${project.basedir}/${source}/Maintenance/tests" command="phpunit" escape="false" />
</target>

Quel serait le moyen le plus approprié pour d'une part exécuter mes tests pour plusieurs modules ? et obtenir un rapport coverage global ?

Merci.

Dernière modification par amelie (20-10-2015 10:43:09)

Hors ligne

 

#2 06-07-2015 16:34:12

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: [Resolu] Jenkins, Phpunit et ZF2

Salut,

Ce que tu demandes, j'avais galéré pour l'implémenter également,

J'ai réglé le soucis depuis maintenant 1 an. Mais ce ne fut pas évident et mon code a bien évolué depuis mais je me suis inspiré de tout cela pour faire ma solution :

-   https://samsonasik.wordpress.com/2013/1 … unit-test/
-   http://stackoverflow.com/questions/1662 … ntegration
-   http://stackoverflow.com/questions/1455 … ot-working
-   https://gist.github.com/Ocramius/3994325

EDIT : Le dernier lien est le gist d'Ocramius pour comprendre comment il as crée sont architecture des tests unitaires, je m'en suis inspiré largement, et mes Bootstrap de module ressemble de très près a ce qu'il as pu faire.


Voici ma question sur stack overflow traitant du problème :

-   http://stackoverflow.com/questions/2257 … ple-module

Et ma solution aujourd'hui de façon synthétique est celle ci :

j'ai un dossier test à la racine du projet ou mon build.xml pointe dessus avec ce code :

Code:

[lang=xml]
    <target name="phpunit" description="Lancement des tests unitaires">
        <exec logoutput="true"  dir="${basedir}/tests" executable="phpunit"/>
    </target>

Ensuite mon fichier phpunit.xml est comme suit

Code:

[lang=xml]
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
    bootstrap="Bootstrap.php"
    colors="true"
    stopOnError="true"
    stopOnFailure="false"
    strict="true"
    verbose="true">
    <testsuites>
        <testsuite name="All Modules">
            <directory>../module/*/tests/*Test</directory>
        </testsuite>
    </testsuites>
   <filter>
        <blacklist>
            <directory suffix=".php">../vendor</directory>
            <directory suffix=".php">../config</directory>
            <directory suffix=".php">../data</directory>
            <directory suffix=".php">../module/*/src/*/Controller</directory>
            <file>../module/*/Module.php</file>
            <file>../module/*/src/*/Factory/*ControllerFactory.php</file>
            <directory suffix=".php">../module/*/tests/*</directory>
        </blacklist>
    </filter>
    <php>
        <ini name="memory_limit" value="2047M" />
    </php>
    <logging>
      <log type="coverage-html" target="../build/tests/coverage/" charset="UTF-8"
           yui="true" highlight="false"
           lowUpperBound="35" highLowerBound="70"/>
      <log type="coverage-clover" target="../build/tests/clover.xml"/>
      <log type="junit" target="../build/tests/junit.xml" logIncompleteSkipped="false"/>
    </logging>
</phpunit>

tu peux voir qu'il demande un bootstrap.php voici le mien :

Code:

[lang=php]
<?php
$modules = include('../config/autoload/modules.global.php');
$moduleToNotTest = array(
    'DoctrineModule',
    'DoctrineORMModule',
    'ZendDeveloperTools',
    'TwbBundle',
    'ReverseProxy',
    'ZfcDatagrid',
    'SlmQueue',
    'SlmQueueDoctrine',
    'ZfcDatagrid',
    'Reporting'
);

foreach ($modules as $module) {
    if (!in_array($module, $moduleToNotTest)) {
        require_once __DIR__ . "/../module/{$module}/tests/{$module}Bootstrap.php";
    }
}

Mais ce fichier bootstrap est spécial, en fait je charge un fichier module.global.php qui retourne un tableau de tous mes modules lancé, et parmi eux, certains que je ne veux pas tester, de ce fait quand je ne veux pas les tester le code n'inclut pas le bootstrapTest du module en question.

Et si ton architecture de test ressemble a celle que j'ai cela devrait marcher.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#3 06-07-2015 17:13:56

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: [Resolu] Jenkins, Phpunit et ZF2

Salut,

Merci pour ta réponse, super c'est exactement ce que je cherchais !
Si je comprends bien ta démarche, tu as crée un dossier "tests" à la racine (déclaré dans ton build), dans lequel tu as mis ton phpunit.xml qui fait appel dans ce même dossier à un "bootstrap collectif" qui lui-même va appeler, via un fichier de conf et ce Bootstrap, les Bootstraps des modules ... ?

Dernière modification par amelie (06-07-2015 17:15:37)

Hors ligne

 

#4 06-07-2015 17:46:39

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: [Resolu] Jenkins, Phpunit et ZF2

Salut,

C'est ça !


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages