IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques tierces Python Discussion :

Executer un CppUnittest avec un script python


Sujet :

Bibliothèques tierces Python

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Points : 44
    Points
    44
    Par défaut Executer un CppUnittest avec un script python
    Salut chers developpeurs!
    J'aimerais executer du CppUnittest et du NUnittest à l'aide d'un script python.
    Dans le code qui suit, il me faudra implementer le script "cppunit_runner.py" qui pourra m'executer les tests "BaseTest.sln" et "UtilTest.sln" par exemple. A la fin de l'execution, il doit avoir envoir de mail aux personne designer.
    Je ne sais pas comment commencer à ecrire ce scripte.
    Qulqu'un peut-il me donner une idée. Une exquise d'exemple ou un lien m'aiderait beaucoup.

    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- fichier de configuration pour tous les tests-->
    <run>
        <!-- parametres globaux !-->   
        <global>
            <!-- Path pour installation.! -->
            <basepath path="..\.."/>
     
            <!-- Path dans lequel les fichiers de protocol et d''archive sont deposés !-->
            <output path="..\Logs"/>
     
            <!-- Quelles personnes doivent être informés à propos d''erreurs de compilation? !-->
            <notify>
                <email name="xxx@hfg.de"/>
            </notify>
     
            <!-- Quel script dois etre executé pour le test? !-->
            <suiterunner type="CppUnit" script="./suiterunners/cppunit_runner.py"/>
        </global>
     
        <!-- Liste de tests à executer !-->
        <tests>
            <suite type="CppUnit">
                <!-- configuration generale pour la compilation et le cours du test !-->
                <configuration>
                    <!-- Path pour les tests. !-->
                    <testcasepath path="..\..\Source\Projects"/>
                    <!-- Executer le test seulement en version Debug ou en version release ou bien dans les deux versions? !-->
                    <runtests>
                        <debug/>
                        <release/>
                    </runtests>
                    <!-- Optionel: Quelles personnes doivent être informés à propos d''erreurs de compilation? !-->
                    <notify>
                        <email name="xxx@hkg.de" type="always"/>
                    </notify>
                </configuration>
                <test name="Base" path="Base\BaseTest\BaseTest.sln"/>
                <test name="Util" path="Util\UtilTest\UtilTest.sln"/>
            </suite>
        </tests>
    </run>

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Cela semble être la suite de la discussion:

    http://www.developpez.net/forums/d78...er-xml-python/

    pour lequel vous avez déjà un script.
    Que voulez vous y ajouter?
    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Cela semble être la suite de la discussion:

    http://www.developpez.net/forums/d78...er-xml-python/

    pour lequel vous avez déjà un script.
    Que voulez vous y ajouter?
    -W

    Merci pour la reaction. Je dois tout d'abordvdire que je suis nouveau en python.
    En fait, j'ai essayer de lire le fichier avec le code qui suit, et je suis bloqué quant à la continuité de la lecture.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    #  cppunit_runners.py
    from xml.dom import minidom
    buildReceivers = []  # Liste der Leute die den Mail enpfangen
    configFile = minidom.parse('config.xml')
    #print configFile.toxml()
     
    # Read global data                                                                                     
    glob = configFile.getElementsByTagName(u"run")[0].getElementsByTagName(u"global")[0]
    #print glob.toxml()
     
    BasePath = glob.getElementsByTagName(u"basepath")[0].getAttribute(u"path")
    #print BasePath
     
    repository = glob.getElementsByTagName(u"output")[0].getAttribute(u"path")
    #print repository
     
    for receivers in glob.getElementsByTagName(u"notify")[0].getElementsByTagName(u"email"):               
        buildReceivers.append( receivers.getAttribute(u"name") )
        #print receivers.toxml()

    Citation Envoyé par wiztricks;10/08/2009
    Le fichier XML pourrait être l'entrée de testrunner.py.
    Dans ce cas, la modification pourrait se résumer à l'ajout d'un elif pour lancer
    testrunner.py lorsque l'extension du fichier est .XML et le laisser s'en débrouiller.
    Je n'ai bien compris ce que tu as voulu par là dire.
    Peux-tu s'il te plait me faire un exemple pour que je puisse mieux comprendre le processus?

    Merci d'avanace

    Merlinerick

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Envoyé par wiztricks;10/08/2009
    Le fichier XML pourrait être l'entrée de testrunner.py.
    Dans ce cas, la modification pourrait se résumer à l'ajout d'un elif pour lancer
    testrunner.py lorsque l'extension du fichier est .XML et le laisser s'en débrouiller.
    Je n'ai bien compris ce que tu as voulu par là dire.
    Peux-tu s'il te plait me faire un exemple pour que je puisse mieux comprendre le processus?
    Dans ses commentaires, le .XML dit qu'il a été construit pour être interprété par testrunner.py.
    Je pensais que vous disposiez de testrunner et que votre soucis était de l'interfacer avec le script que vous donniez alors
    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Dans ses commentaires, le .XML dit qu'il a été construit pour être interprété par testrunner.py.
    Je pensais que vous disposiez de testrunner et que votre soucis était de l'interfacer avec le script que vous donniez alors
    -W
    Salut, wiztricks!
    Justement, je ne dispose pas encore du test_runner. C'est en fait la premiere chose que je dois faire et la, je suis coincé.
    Voici ce que j'ai pu faire jusqu'ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    #  testrunner.py
     
    def has_child_node(nodeList, name ):
        """Returns true if the xml node list nodeList contains a node of the given name."""
        for node in nodeList:
            if node.nodeName == name:
                return True
        return False
    # def has_child_node()
     
     
    from xml.dom import minidom
     
    buildReceivers = []  # Liste der Leute die den Mail enpfangen
    runTests = []
     
    configFile = minidom.parse('config.xml')
    print configFile.toxml()
     
     
    # Read global data                                                                                      
    glob = configFile.getElementsByTagName(u"run")[0].getElementsByTagName(u"global")[0]
    print glob.toxml()
     
    hicadBasePath = glob.getElementsByTagName(u"hicadbasepath")[0].getAttribute(u"path")
    print hicadBasePath
     
    repository = glob.getElementsByTagName(u"output")[0].getAttribute(u"path")
     
    for receivers in glob.getElementsByTagName(u"notify")[0].getElementsByTagName(u"email"):                
        buildReceivers.append( receivers.getAttribute(u"name") )
        print receivers.toxml()
     
     
     
     
     
     
    ### Read configuration data
    conf = configFile.getElementsByTagName(u"run")[0].getElementsByTagName(u"tests")[0]\
           .getElementsByTagName(u'suite')[0].getElementsByTagName(u'configuration')[0]
    print conf.toxml()
     
    testCasePath = conf.getElementsByTagName(u"testcasepath")[0].getAttribute(u"path")
    print testCasePath
     
    ##                                                                                                        
    if ( has_child_node( conf.getElementsByTagName(u"runtests")[0].childNodes, u"debug") ):        
        runTests.append(u"debug")
     
    if ( has_child_node( conf.getElementsByTagName(u"runtests")[0].childNodes, u"release") ):      
        runTests.append(u"release")
     
    print runTests
    J'ai besoin de ton aide pour la continuité (parser le fichier xml, etc...).

    Merci d'avance

  6. #6
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Points : 44
    Points
    44
    Par défaut
    J'ai pu "parser" le fichier xml (je ne sais pas si c'est juste) comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    #  cppunit_runners.py
     
    def has_child_node(nodeList, name ):
    ##    nodeList = nodeList
    ##    name = name
        """Returns true if the xml node list nodeList contains a node of the given name."""
        for node in nodeList:
            if node.nodeName == name:
                return True
        return False
    # def has_child_node()
     
     
    from xml.dom import minidom
     
    buildReceivers = []  # Liste der Leute die den Mail enpfangen
    runTests = []
    solutionDirs = []    # Source directories to watch for changes
    projectName = []
     
     
    configFile = minidom.parse('config.xml')
    #print configFile.toxml()
     
    # Read global data                                                                                      
    glob = configFile.getElementsByTagName(u"run")[0].getElementsByTagName(u"global")[0]
    #print glob.toxml()
    basePath = glob.getElementsByTagName(u"hicadbasepath")[0].getAttribute(u"path")
    #print basePath
    repository = glob.getElementsByTagName(u"output")[0].getAttribute(u"path")
    #print repository         
     
    for receivers in glob.getElementsByTagName(u"notify")[0].getElementsByTagName(u"email"):                
        buildReceivers.append( receivers.getAttribute(u"name") )
        #print receivers.toxml()
     
    ### Read configuration data
    Test = configFile.getElementsByTagName(u"run")[0].getElementsByTagName(u"tests")[0]
    #print Test.toxml()
    testSuite = Test.getElementsByTagName(u"suite")[0]
    #print TestSuite.toxml()
    suiteType = Test.getElementsByTagName(u"suite")[0].getAttribute(u"type")
    #print suiteType
    conf = testSuite.getElementsByTagName(u"configuration")[0]
    #print conf.toxml()
    testSuiteRunner = conf.getElementsByTagName(u"suiterunner")[0].getAttribute(u"script")
    #print testSuiteRunner
    testCasePath = conf.getElementsByTagName(u"testcasepath")[0].getAttribute(u"path")
    #print testCasePath
     
    if ( has_child_node( conf.getElementsByTagName(u"runtests")[0].childNodes, u"debug") ):        
        runTests.append(u"debug")
    if ( has_child_node( conf.getElementsByTagName(u"runtests")[0].childNodes, u"release") ):      
        runTests.append(u"release")
    #print runTests
     
    for receivers in conf.getElementsByTagName(u"notify")[0].getElementsByTagName(u"email"):                
        buildReceivers.append( receivers.getAttribute(u"name") )
        #print receivers.toxml()
     
    for Name in testSuite.getElementsByTagName(u"test"):               
        projectName.append( Name.getAttribute(u"name") )
    print projectName
     
    for Solution in testSuite.getElementsByTagName(u"test"):
        solutionDirs.append( Solution.getAttribute(u"path") )
    print solutionDirs
    Comment est-ce que je peux maintenant executer le CppUnitTest avec le à l'aide du code ci-dessus?

    Merci une fois de plus de votre aide

    Merlinerick

  7. #7
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par merlinerick Voir le message
    J'ai pu "parser" le fichier xml (je ne sais pas si c'est juste) comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    #  cppunit_runners.py
     
    def has_child_node(nodeList, name ):
    ##    nodeList = nodeList
    ##    name = name
        """Returns true if the xml node list nodeList contains a node of the given name."""
        for node in nodeList:
            if node.nodeName == name:
                return True
        return False
    # def has_child_node()
     
     
    from xml.dom import minidom
     
    buildReceivers = []  # Liste der Leute die den Mail enpfangen
    runTests = []
    solutionDirs = []    # Source directories to watch for changes
    projectName = []
     
     
    configFile = minidom.parse('config.xml')
    #print configFile.toxml()
     
    # Read global data                                                                                      
    glob = configFile.getElementsByTagName(u"run")[0].getElementsByTagName(u"global")[0]
    #print glob.toxml()
    basePath = glob.getElementsByTagName(u"hicadbasepath")[0].getAttribute(u"path")
    #print basePath
    repository = glob.getElementsByTagName(u"output")[0].getAttribute(u"path")
    #print repository         
     
    for receivers in glob.getElementsByTagName(u"notify")[0].getElementsByTagName(u"email"):                
        buildReceivers.append( receivers.getAttribute(u"name") )
        #print receivers.toxml()
     
    ### Read configuration data
    Test = configFile.getElementsByTagName(u"run")[0].getElementsByTagName(u"tests")[0]
    #print Test.toxml()
    testSuite = Test.getElementsByTagName(u"suite")[0]
    #print TestSuite.toxml()
    suiteType = Test.getElementsByTagName(u"suite")[0].getAttribute(u"type")
    #print suiteType
    conf = testSuite.getElementsByTagName(u"configuration")[0]
    #print conf.toxml()
    testSuiteRunner = conf.getElementsByTagName(u"suiterunner")[0].getAttribute(u"script")
    #print testSuiteRunner
    testCasePath = conf.getElementsByTagName(u"testcasepath")[0].getAttribute(u"path")
    #print testCasePath
     
    if ( has_child_node( conf.getElementsByTagName(u"runtests")[0].childNodes, u"debug") ):        
        runTests.append(u"debug")
    if ( has_child_node( conf.getElementsByTagName(u"runtests")[0].childNodes, u"release") ):      
        runTests.append(u"release")
    #print runTests
     
    for receivers in conf.getElementsByTagName(u"notify")[0].getElementsByTagName(u"email"):                
        buildReceivers.append( receivers.getAttribute(u"name") )
        #print receivers.toxml()
     
    for Name in testSuite.getElementsByTagName(u"test"):               
        projectName.append( Name.getAttribute(u"name") )
    print projectName
     
    for Solution in testSuite.getElementsByTagName(u"test"):
        solutionDirs.append( Solution.getAttribute(u"path") )
    print solutionDirs
    Comment est-ce que je peux maintenant executer le CppUnitTest avec le à l'aide du code ci-dessus?

    Merci une fois de plus de votre aide

    Merlinerick
    Salut!
    Je reviens en ce qui est de l'execution des CppUnitTest
    Je vais du fait que le code du "parsage" du fichier xml est juste.
    J'ai avec moi moi le code suivant (le code d'execution du CppUnitTest) avec lequel je dois executer l'ensemble.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    # -*- coding: latin1 -*-
     
    """Script pour execution de CppUniTest.
    """
     
    import os
     
     
    ################################################################################
    # BuildError
    class BuildError(Exception):
     
    ################################################################################
    # shell_command
    def shell_command(cmd):
        """Start a Process and return the Output of the process as Stringlist
        """
        cmd2 = cmd + ' 2>&1'
        p = os.popen(cmd2)
        lines = []
        line = p.readline()
        while line:
            lines.append(line)
            line = p.readline()
        try:
            status = p.close()
        except KeyboardInterrupt, e:
            raise
        except:
            raise BuildError(''.join(lines))
        if status:
            raise BuildError(''.join(lines))
        print line
        return lines
     
    ################################################################################
    # execute_config
    def execute_testscripts(path, logpath, config):
        """cherche dans le repertoire des scriptes finissant par  .test.pl, .test.py ou .test.bat endenet les execute. 
        """
        messages = {};
        for root, dirs, files in os.walk(path):
            if root.find('.svn') < 0: # pas les fichiers dans le repertoire .svn 
                for file in files:
                    cmd = None
                    if file.lower().endswith('.test.pl'):
                        cmd = 'perl.exe '
                    elif file.lower().endswith('.test.py'):
                        cmd = 'python.exe '
                    elif file.lower().endswith('.test.bat'):
                        cmd = 'cmd /C '
                    if cmd:
                        cmd += root + '\\' + file
                        print '%-30s ' % file,
                        try:
                            if 'Debug' in dirs:
                                shell_command('rmdir /S /Q ' + root + '\\Debug')   # Efface tous les fichiers du dernier test
                            shell_command(cmd + ' %s' % config)
                            print 'ok'
                            messages[file] = ''
                        except BuildError, e:
                            print 'Fehler'
                            messages[file] = str(e)
        return messages
     
    ################################################################################
    # main
    def main():
        """The main programm".
        """
        import sys
     
        messages = execute_testscripts(rootpath, logpath, 'Debug')   # Debug usw. muss ins Config-File
     
        has_errors = False
        for file in sorted(messages.keys()):
            if messages[file]:
                has_errors = True
     
                log.writeLog( "Loading configuration file: config.xml", "Configuration" )
     
        return has_errors
     
    ################################################################################
    if __name__ == '__main__':
        main()
    Comment devrais-je adapter celà au code plus haut dans le [QUOTE]?
    Je pense aussi que je devrais juste utiliser le Main-programm pour adapter celà. Quelqu'un a-t-il une idée?

    Merci d'avance


    Merlinerick

Discussions similaires

  1. Se loguer automatiquement avec un script python
    Par bastien981 dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 14/05/2012, 15h45
  2. comparaison de deux fichiers textes avec un script python
    Par zekruss dans le forum Général Python
    Réponses: 1
    Dernier message: 10/11/2009, 05h52
  3. edition d'un fichier .txt avec un script python
    Par ziedzekri dans le forum Général Python
    Réponses: 7
    Dernier message: 06/10/2009, 00h14
  4. Pb d'execution de requete avec un script php
    Par ythierrin dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/08/2003, 14h34
  5. Pb d'execution de requete avec un script php
    Par ythierrin dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 22/08/2003, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo