
Java-Ausdrücke
In der Testdatentabelle des Testsuiteneditors können Sie das Format von Variablenwerten auf Java-Ausdrücke einstellen. Der Typ der Ausdrücke muss mit dem Typ der Variablen kompatibel sein. Der Java-Kontext sind die Variablen selbst sowie die gegebenenfalls auf der Seite 'Import' der Ansicht 'Testdatentabelle' definierten Importe.
Fragen und Antworten zu Java-Ausdrücken
Dieser Abschnitt enthält einige Fragen und Antworten zur Verwendung von Java-Ausdrücken in der Testdatentabelle des Testsuiteneditors.
Frage: Warum gibt es einen Nullwert für eine in einem Java-Ausdruck verwendete Variable?
Antwort: Die Variable wird in der Anforderungsnachricht nicht initialisiert, weil sie nicht in einem Aufruf verwendet wird. Sie müssen die Variable bei einem Testschritt verwenden, damit sie ordnungsgemäß initialisiert wird, beispielsweise 'Aufruf', 'Warten auf' oder 'Warten'.
- Anforderung einer neuen Kunden-ID senden
- Antwort mit der neuen Kunden-ID empfangen
- Mit der in Schritt 2 empfangenen Kunden-ID eine neue Anforderung senden
Antwort: Ja, dies ist ein typisches Verfahren zur Wiederverwendung der Variablen in der Testdatentabelle. Bei diesem Szenario wird die Kunden-ID in der Testdatentabelle als erwartete Variable ausgedrückt, die in einer nachfolgenden Anforderung verwendet werden kann.
Frage: Mir wurde eine Antwort zurückgegeben, die den Wert einer Kunden-ID enthält. Ich möchte mit der Kunden-ID einen Eingabeparameter einer neuen Anforderung füllen. Ich vermute, dass dazu ein Java-Ausdruck in der neuen Anforderung einen Wert mit dem Wert der Kunden-ID der ersten Antwort füllen muss, weiß aber nicht, auf welche Weise ein Java-Ausdruck diese Task ausführen kann. In der Testdatentabelle wird die Antwort als DOM-Dokument definiert und es scheint kein einfaches Verfahren zum Erstellen eines einzelnen Java-Ausdrucks zu geben, um einen Verweis auf die Kunden-ID abzurufen, die in einem der Knoten in dem DOM-Dokument enthalten ist. Gibt es eine Möglichkeit, dies mit einem Java-Ausdruck zu erreichen?
Antwort: Ja. Es gibt eine Dienstprogrammklasse namens 'com.ibm.wbit.comptest.ctnative.runtime.utils.DOMHelper', die intern dazu verwendet wird, die Werte in einem Objekt vom Typ DOM-Dokument zu extrahieren. Mithilfe der Dienstprogrammmethode getSelectedNode(target, xpathExpr, nsInfo) können Sie das Feld extrahieren, auf das Sie in Ihren anderen Variablen verweisen möchten. Bei Ihrem Szenario gibt das Ziel Ihr DOM-Dokumentobjekt zurück und xpathExpr ist der XPath des Werts der Kunden-ID. nsInfo ist bei Ihrem Szenario nicht relevant. Sie können dafür einfach den Wert Null festlegen. Anhand des folgenden Codefragments wird veranschaulicht, wie die Dienstprogrammklasse verwendet wird:
DOMHelper.getSelectedNode(responseDocument,
"soap:Envelope/soap:Body/ns5:operation1/input1/field1", null)
Beachten Sie, dass das Namensbereichspräfix in Ihrem XPath mit dem Namensbereichspräfix in Ihrer Antwortnachricht übereinstimmen muss. Um die Helper-Klasse zu verwenden, müssen Sie sie auf der Importseite der Ansicht 'Testdatentabelle' in Ihre Testsuite importieren. Sie können einfach zur Importseite wechseln und die DOMHelper-Klasse zu der Liste hinzufügen. Dadurch können Sie in Ihren Variablen mit dem Format des Java-Ausdrucks auf die Dienstprogrammklasse verweisen.
Alternativ können Sie auch selbst eine Dienstprogrammmethode erstellen, die einen DOM-Dokumenttyp als Parameter verwendet, um den gewünschten Wert zu extrahieren und Ihre Java-Klasse in Ihrem Komponententestprojekt zu speichern. Anschließend können Sie in der Ansicht 'Testdatentabelle' auf die Importseite wechseln und Ihre angepasste Java-Klasse zu der Liste hinzufügen. Nun können Sie in Ihren Variablen mit dem Format des Java-Ausdrucks auf Ihre Java-Klasse verweisen.
Frage: Ich habe bemerkt, dass DOMHelper.getSelectedNode ein Java-Objekt zurückgibt. Stellt das Objekt den Zeichenfolgewert des Elementwerts dar oder ist es ein Knoten, aus dem ich die Zeichenfolge extrahieren muss? Die Nachricht könnte beispielsweise dem folgenden Codefragment ähneln:
<soap:Envelope>
<soap:Body>
<ns5:operation1>
<input1>
<field1>hello world</field>
Gibt der Aufruf von DOMHelper.getSelectedNode ein Java-Objekt zurück, das ich in eine Zeichenfolge umsetzen kann, die 'hello world' enthält? Oder ist es eine Art Knotenobjekt, mit dem ich eine weitere Operation ausführen muss?
Antwort: Es wird entweder eine Zeichenfolge oder ein DOM-Knoten zurückgegeben. In Ihrem Beispiel wird die Zeichenfolge 'hello world' zurückgegeben. Wenn der Knoten keinen Textwert enthält (wie input1 in Ihrem Beispiel), wird ein Knotentyp zurückgegeben. Wenn Sie 'hello world' abrufen möchten, müssen Sie am Ende Ihres XPath '/text()' anhängen. Sonst wird stattdessen der DOM-Knotentyp abrufen. Analog dazu gilt: Wenn das Feld, das Sie extrahieren möchten, ein Attribut ist, müssen Sie vor dem Knotennamen '@' in Ihren XPath einfügen.
Frage: Wie gehe ich vor, wenn ich mehrere Java-Ausdrücke benötige, um zu ermitteln, ob ein Test erfolgreich war?
- Erstellen Sie eine Java-Klasse im Testprojekt (wenn Sie möchten, in einem neuen Java-Paket).
- Erstellen Sie eine öffentliche statische Methode, die einen booleschen Wert zurückgibt, der die Prüflogik ausführt.
- Da die Logik in der Regel die Variable aus der Datentabelle benötigt, ist das Methodenargument normalerweise ein Datenobjekt (DataObject).
- Schreiben Sie die Prüflogik.
- Klicken Sie in der Testdatentabelle mit der rechten Maustaste auf die Variable und wählen Sie Operator hinzufügen > Bedingung aus.
- Bearbeiten Sie den Ausdruck, so dass er Ihre Testmethode aufruft.
myVar:MyVar
-- myData:MyData
----data1:String
----data2:String
Sie möchten prüfen, ob data2 entsprechend dem Wert von data1 den erwarteten Wert aufweist. - Erstellen Sie in einem Komponententestprojekt eine Klasse namens mytestpackage.Tester:
package mytestpackage; import commonj.sdo.DataObject; public class Tester { public static boolean checkValues(DataObject dObj) { boolean isPassed = true; System.out.println("Checking values"); String d1 = dObj.getDataObject("myData").getString("data1"); String d2 = dObj.getDataObject("myData").getString("data2"); if (d1.startsWith("a123")) { if (s.equals("b456")) isPassed = true; else isPassed = false; } return isPassed } } - Speichern Sie die Klasse und stellen Sie sicher, dass keine Kompilierungsfehler auftreten.
- Klicken Sie in der Testdatentabelle mit der rechten Maustaste auf die Variable myVar und wählen Sie Operator hinzufügen > Bedingung aus.
- Bearbeiten Sie die Bedingung (standardmäßig ist der Wert des Ausdrucks 'true') so, dass sie 'Tester' aufruft.
mytestpackage.Tester.checkValues(myVar)
Frage: Wie kann ich ermitteln, ob ein Array die erforderliche Anzahl an Elementen besitzt?
- Klicken Sie in der Datentabelle mit der rechten Maustaste auf bo2 und wählen Sie Operator hinzufügen > Bedingung aus.
- Klicken Sie auf die erwartete Zelle, um sie in den Bearbeitungsmodus zu versetzen, und ändern Sie den Wert Null in bo1.getList("bo2").size() == 5.
- Optional: Geben Sie in den Feldern von bis zu fünf bo2-Elementen erwartete Werte ein. Sie können neben dem Festlegen einer Bedingung zur Array-Größe auch die Werte der verschachtelten Array-Daten prüfen.