Packagegenerator für Projekte¶
Hinweise zur Verwendung finden Sie im Abschnitt Packagegenerator im Kapitel Projekt-Editor.
Die Packagegeneratoren werden im Projektgeneratoren-Verzeichnis abgelegt.
Die Schnittstelle von Projekt-Packagegeneratoren ist in der Package Generator API dokumentiert.
Info
Jede Python-Datei darf nur genau eine Klasse PackageGenerator enthalten.
Jedes CycleData-Objekt repräsentiert ein generiertes Package. Allgemein kann folgender Workflow
verwendet werden, um Packages zu generieren:
Ein
CycleData-Objekt mittelscd = self.CreateCycleData()erzeugen.Die Testschritte auf dem CycleData-Objekt erzeugen (über
cd.packageInstance).Über
yield cdwird das generierte Package an ecu.test übergeben und sofort ausgeführt.
Diese Schritte können beliebig oft wiederholt werden, um die gewünschte Zahl von Packages zu generieren.
Info
Für kompliziertere Fälle wird empfohlen, zunächst ein Package (im folgenden Template-Package genannt) zu erstellen, das der Packagegenerator über die Object API geeignet modifizieren kann, um die gewünschten Packages zu erzeugen.
Damit der Generator bei dieser Strategie z.B. in CreateCycleData in jeder Iteration stets
auf das nicht modifizierte Template-Package zugreift, sollte man die Modifikationen nach dem
Öffnen des Template-Packages in einem try-Block kapseln und im anschließenden
finally-Block das Template-Package schließen.
Beispiele¶
Einfaches Beispiel für die Implementierung der API¶
# -*- coding: utf-8 -*-
from tts.core.project.generator.PackageGenerator import PackageGenerator
import os
import wx
class PgTextParser(PackageGenerator):
ID = 'b0905230-d72b-11e2-9566-dc801fb4729d'
NAME = 'Textdatei Parser'
DESCRIPTION = 'Verarbeitet eine Textdatei zeilenweise'
SERIALIZE = {'filename' : ('FILENAME', 'unicode', r'')}
def __init__(self):
self.filename = r''
self.parameterDicts = []
self.targetItemCount = 0
def GetDialog(self):
return DlgFileSelector(self)
def GetParameterText(self):
return 'Filename: {}'.format(self.filename)
def PreGeneration(self):
self.parameterDicts = []
self.targetItemCount = 0
with open(self.filename, 'r') as fileDescriptor:
for textLine in fileDescriptor.readlines():
comment = "'{0}'".format(textLine.strip())
self.parameterDicts.append({'comment': comment})
self.targetItemCount += 1
def GetTargetItemCount(self):
return self.targetItemCount
def GenerationIterator(self):
for params in self.parameterDicts:
cd = self.CreateCycleData()
testStep = cd.objectApi.PackageApi.TestStepApi.CreateTsComment(params['comment'])
cd.packageInstance.AppendTestStep(testStep)
yield cd
def PostGeneration(self):
pass
def Check(self):
if not os.path.exists(self.filename):
return ['Datei existiert nicht!']
return []
class DlgFileSelector(wx.FileDialog):
def __init__(self, generator):
super().__init__(None,
'Select text file',
wildcard='Text files (*.txt)|*.txt',
style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
self.generator = generator
def ShowModal(self):
result = super().ShowModal()
if result == wx.ID_OK:
self.generator.filename = self.Path
return result
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.
Package generator example¶
Im Verzeichnis <Projektgeneratoren-Verzeichnis>/PackageGenExample des Beispiel-Workspaces findet sich der
Packagegenerator PkgGenDLC. Dieser veranschaulicht den Grundaufbau eines Generators
und den Zugriff auf die DataBrowser- und die Internal API von ecu.test, welcher er sich
bedient, um dort vorhandene Informationen als Grundlage für die Generierung zu verwenden.
Der Generator realisiert eine einfache Prüfung der Botschaftslängen auf dem CAN. Dafür verfügt der Generator über einen Dialog zur Festlegung eines Bussystems. Die in der Testkonfiguration für dieses Bussystem festgelegte Beschreibungsdatei wird dann im Folgenden als Quelle für die Generierung verwendet. Dabei werden die Botschafts-Id und die Längendefinition (DLC) aus der Beschreibung abgefragt. Außerdem wird aus jeder Botschaft ein Signal ermittelt und zur Aufnahme registriert, damit die Botschaft aufgezeichnet wird. Im Verlauf des Testfalls wird die Buskommunikation nun aufgezeichnet und anschließend wird in der über Botschafts-Id und DLC parametrierten Traceanalyse geprüft, ob der DLC jeder Botschaft der Spezifikation entspricht.
Der Generator findet im Projekt ProjectWithPackageGenerator im Verzeichnis
<Package-Verzeichnis>/ExamplePackages/PackageGenExample des mitgelieferten Beispiel-Workspaces
Verwendung. Um diesen auszuführen, muss das Projekt in ecu.test geöffnet und durch einen
Rechtsklick auf den Generator DLC check Generator die Option ‚Projekt generieren‘ ausgewählt
werden. Nach Eingabe eines Projektnamens, wird das Projekt generiert und ist im Package-Verzeichnis
des Workspaces zu finden.
Eine implizite Ausführung des Generators durch Ausführung des Projektes ist nur möglich, wenn eine Testkonfiguration, eine Testbenchkonfiguration, eine dazugehörige Busdatenbank sowie ein geeigneter Trace zur Verfügung gestellt werden.