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:
Ein
CycleData-Objekt mittelscd = self.CreateCycleData()erzeugen.Die Projektschritte auf dem CycleData-Objekt erzeugen (über
cd.projectInstance).Über
yield cdwird 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“.