Projektgenerator

Hinweise zur Verwendung finden Sie im Abschnitt Projektgenerator im Kapitel Projekt-Editor.

Dieser Generator kann zur dynamischen Erstellung von Projekten verwendet werden. Die Verwendung erfolgt analog zum Packagegenerator für Projekte . Die API unterscheidet sich nur dahingehend, dass ausschließlich Projektschritte verwendet werden dürfen.

Die Projektgeneratoren werden im Projektgeneratoren-Verzeichnis abgelegt.

Die Schnittstelle von Projektgeneratoren ist in der Project Generator API dokumentiert.

Jedes CycleData-Objekt repräsentiert ein generiertes Projekt. Allgemein kann folgender Workflow verwendet werden, um Projekte zu generieren:

  1. Ein CycleData-Objekt mittels cd = self.CreateCycleData() erzeugen.

  2. Die Projektschritte auf dem CycleData-Objekt erzeugen (über cd.projectInstance).

  3. Über yield cd wird das generierte Projekt an ecu.test übergeben und sofort ausgeführt.

Diese Schritte können beliebig oft wiederholt werden, um die gewünschte Zahl von Projekten zu generieren.

Beispiele

Einfaches Beispiel für die Verwendung der API

# -*- coding: utf-8 -*-

import os

from datetime import date

from tts.core.project.generator.ProjectGenerator import ProjectGenerator


class ProjectGeneratorExample(ProjectGenerator):

    ID = '64ada5a1-d42f-11e3-9cdf-080027005456'
    NAME = 'Project generator example'
    DESCRIPTION = 'Create a project with all packages from the "everyday" directory and on ' \
                  'weekeends additional with all packages from the weekend sub directory.'
    SERIALIZE = {}

    def __init__(self):
        pass

    def GetDialog(self):
        return None

    def PreGeneration(self):
        print('Start generation')

    def GenerationIterator(self):
        print('Run generation')

        cd = self.CreateCycleData()  # creates cycledata object
        cd.SetName('GeneratedExample')
        project = cd.projectInstance  #  The project instance to be completed and executed
        objectApi = cd.objectApi # The Object API which is used to create test steps
        componentApi = objectApi.ProjectApi.ComponentApi

        pkgBasePath = os.path.join(self.api.GetSetting('packagePath'), "ExamplePackages",
                                   "ProjectGenExample")
        everydayPath = os.path.join(pkgBasePath, "everyday")
        for root, dirnames, filenames in os.walk(everydayPath):
            for filename in filenames:
                packageCall = componentApi.CreatePackageCall(filename,
                                                             os.path.join(root, filename))
                project.AppendComponent(packageCall)

        if date.today().weekday() in (5, 6):  # 5 == Saturday, 6 == Sunday
            weekendPath = os.path.join(pkgBasePath, "weekend")
            for root, dirnames, filenames in os.walk(weekendPath):
                for filename in filenames:
                    packageCall = componentApi.CreatePackageCall(filename,
                                                                 os.path.join(root, filename))
                    project.AppendComponent(packageCall)
        yield cd

    def PostGeneration(self):
        print('Generation finished')

Mitgelieferte Beispiele

Um das mitgelieferte Beispiel verwenden zu können, muss dieses zunächst in Ihren Workspace kopiert werden.

Aktivieren Sie hierzu im Dialog zur Workspace-Auswahl die Option Beispiele kopieren. Dadurch werden die nötigen Beispiele in den Workspace übernommen.

Project generator example

Der Projektgenerator Project generator example zeigt die Verwendung der API zur flexiblen Projektgenerierung. Er erzeugt ein Projekt mit Packages aus dem Verzeichnis „everyday“ und zusätzlich an Wochenenden mit den Packages aus dem Verzeichnis „weekend“.