Mit einem Paketconverter wird ein Strom von Recorderpaketen umgewandelt. Sie verwenden Paketconverter, um die von den Recordern erfassten Rohdaten in ein Format umzuwandeln, das von den Testgeneratoren verwendet werden kann.
Ein Converter folgt in der Regel einem der folgenden Muster:
- Mit einem Filterconverter werden Eingabepakete entfernt, die einem bestimmten Kriterium nicht entsprechen. Dabei werden weder Pakete geändert noch neue Pakete in den Ausgabedatenstrom eingefügt. Das Produkt wird mit einem generischen Converter mit der ID "com.ibm.rational.test.lt.testgen.core3.filter"geliefert. Sie können zu diesem Converter Parameter mit Bedingungen hinzufügen.
- Mit einem Annotator-Converter werden keine Pakete im Eingabedatenstrom entfernt oder geändert, sondern zusätzliche Pakete in den Ausgabedatenstrom eingefügt. Bei diesen Paketen handelt es sich um Anmerkungspakete, mit denen zusätzliche Informationen aus den anderen Paketen weitergeleitet werden. Ein Converter kann z. B. nach Sitzungs-, Verbindungs- oder Seitenbegrenzungen in einem Paketdatenstrom suchen und dann bei Erkennen einer Begrenzung im Eingabedatenstrom ein Begrenzungspaket hinzufügen. Dies unterstützt den Testgenerator bei der Ermittlung von Begrenzungen, ohne dass der Paketdatenstrom vorausschauend untersucht werden muss.
- Mit einem Converter zum Ändern der Reihenfolge werden keine Pakete im Eingabedatenstrom hinzugefügt, geändert oder entfernt, sondern ihre Ausgabe erfolgt in einer geänderten Reihenfolge. Ein typisches Beispiel ist die im Produkt enthaltene Paketsortierkomponente, mit der Pakete nach ihrer Startzeitmarke sortiert ausgegeben werden. Die ID der Sortierkomponente lautet "com.ibm.rational.test.lt.testgen.core3.packetSorter".
- Ein Aggregator-Converter weist unterschiedliche Eingabe- und Ausgabepakettypen auf. Mit ihm werden mehrere Eingabepakete in einem Ausgabepaket zusammengefasst. Normalerweise setzt dieser Converter ein Protokoll einer niedrigeren Ebene in ein Protokoll einer höheren Ebene um. Beispielsweise wird das Produkt mit einem Converter geliefert, mit dem Rohdaten in einem Bytestrom, der zwischen einem Client und einem HTTP-Server ausgetauscht wird, in zusammengefasste HTTP-Pakete (Anforderung/Anwort-Paare) umgewandelt werden.
Zum Definieren eines neuen Converters müssen Sie folgende Schritte ausführen:
- Deklarieren Sie in der Datei plugin.xml einen neuen Paketconvertertyp. Verwenden Sie dazu den Erweiterungspunkt com.ibm.rational.test.lt.testgen.core3.packetConverter.
- Weisen Sie dem Paketconverter eine eindeutige ID und einen Namen zu.
- Deklarieren Sie die erforderlichen Eigenschaften des Paketeingabedatenstroms, der vom Converter empfangen wird. Das Framework weist die erforderlichen Converter in der Konvertierungsphase auf, sodass diese Eigenschaften überprüft werden, wenn die Pakete den Converter erreichen. Wenn die Eingabepakete für den Converter z. B. nach ihren Startzeitmarken sortiert sein müssen, geben Sie sorted an.
- Deklarieren Sie, welche Eigenschaften im Vergleich zu den Eigenschaften des Eingabedatenstroms von diesem Converter zum Ausgabedatenstrom hinzugefügt oder aus dem Ausgabedatenstrom entfernt werden. Ein Converter kann z. B. die Eigenschaft ordered des Eingabedatenstroms unterbinden. In diesem Fall muss der Parameter sorted in der Klasse "removedProperties" enthalten sein.
- Wenn der Converter unterschiedliche Eingabe- und Ausgabepakettypen aufweist und als Pakettypconverter angesehen werden kann, deklarieren Sie ihn als an den Konvertierungen von Pakettypen beteiligt und geben Sie die Typen der entsprechenden Eingabe- und Ausgabepakete an, die vom Converter produziert werden.
- Definieren Sie eine Implementierungsklasse, mit der die Schnittstelle "com.ibm.rational.test.lt.testgen.core.conversion.IPacketConverter" implementiert wird.
Berücksichtigen Sie in Bezug auf Implementierungen von "IPacketConverter" die folgenden Fakten:
- Normalerweise erweitern Sie die Klasse "com.ibm.rational.test.lt.testgen.core.conversion.BasePacketConverter", die eine Basisimplementierung bereitstellt und nur das Überschreiben der speziellen Methoden erfordert.
- Bei einem Paketconverter handelt es sich um eine "IPacketReferenceOutputStream"-Schnittstelle, die in eine andere "IPacketReferenceOutputStream"-Schnittstelle schreibt. Mit anderen Worten: Ein Paketconverter weist eine Methode des Typs "writePacket()" auf, die vom Framework für jedes verarbeitete Eingabepaket aufgerufen wird. Die Aufgabe des Paketconverters besteht darin, immer dann die Methode "getContext().getOutputStream().writePacket()" aufzurufen, wenn ein Paket an die Ausgabe gesendet werden muss.
- Ein Paketconverter kann Optionen aufweisen. Diese Optionen stehen in der Methode "getContext().getConfiguration()" zur Verfügung, die normalerweise in der Methode "initialize()" aufgerufen wird.
- Ein Paketconverter kann zusätzliche Pakete an seine Ausgabe in der Methode "complete()" senden. Diese Methode wird aufgerufen, wenn keine weiteren Eingabepakete zur Verwendung anstehen.
- Verwenden Sie die Methode "getContext().logMessage()", um Nachrichten des Testgenerators (inkl. Fehlernachrichten) für den Benutzer auszugeben. Wenn sich die Nachricht auf einen nicht behebbaren Fehler bezieht, wird der Prozess der Testgenerierung vom Framework gestoppt.
Aus Gründen der Skalierbarkeit werden Objekte des Typs "IRecorderPacketReference" und nicht Objekte des Typs "IRecorderPacket" von Convertern bearbeitet. Führen Sie die folgenden Verfahren aus, um beim Schreiben von Paketconvertercode optimale Ergebnisse zu erzielen:
- Eine Schnittstelle des Typs "IRecorderPacket" kann aus einer Referenz abgerufen werden, die mit der Methode "IRecorderPacketReference.getRecorderPacket()" arbeitet.
- Ein Converter, der dasselbe Paket wie das empfangene an seine Ausgabe zurückmelden muss, muss dieselbe Referenzinstanz wie die vom Converter empfangene schreiben.
- Wenn ein Converter ein neues Recorderpaket instanziiert, kann er das Paket mithilfe der Methode "getContext().createPacketReference()" in eine neue Referenz einschließen, damit das Paket als Ausgabe gesendet werden kann.
- Wie Recorder können auch Converter Paketanhänge erzeugen. Zum Erstellen eines neuen Anhangs verwenden Sie die Methode "getContext().createPacketAttachment()".
- Wenn der Converter ein Paket eine lange Zeit vor dem Senden als Ausgabe aufnehmen muss, kann das Paket vom Converter entladen und nur ein Verweis auf das Paket beibehalten werden. Dazu rufen Sie die Methode "unload()" für den Paketverweis auf.
- Converter bieten eine Funktion zum effizienten Zusammenfassen großer Paketzahlen und zum einzelnen Löschen oder Weitergeben an die Ausgabe. Weitere Informationen zu diesem Thema finden Sie bei der Klasse "com.ibm.rational.test.lt.testgen.core.store.IPacketReferenceStore". Ein Paketspeicher kann mit der Methode "getContext().createPacketStore()" erstellt werden.