Umgang mit Optionen im gehandelten Preis

Der modulare Ansatz der Trade Federation basiert auf dem Umgang mit Optionen. Insbesondere sind Optionen sind der Mechanismus, durch den Developer, Integrator und Test Runner zusammenarbeiten können, ohne die Arbeit der anderen duplizieren müssen. Einfach ausgedrückt ermöglicht unsere Implementierung des Optionsbehandlungs die Ein Entwickler markiert ein Java-Klassenmitglied als konfigurierbar. Dann wird der Wert dieses Mitglieds kann vom Integrator erweitert oder überschrieben und später durch den Test-Runner. Dieser Mechanismus funktioniert für alle intrinsischen Java-Typen sowie für alle Map- oder Collection-Werte unveränderlicher Typen.

Hinweis:Der Mechanismus der Optionenbehandlung funktioniert nur bei Klassen, in denen eine der Schnittstellen, die im Testlebenszyklus enthalten sind, und nur, wenn diese Klasse durch die Lebenszyklusmaschine instanziiert.

Entwickler

Zu Beginn markiert der Entwickler ein Mitglied mit der @Option-Anmerkung. Sie geben mindestens die Werte name und description an, die den Namen des Arguments für diese Option und die Beschreibung, die auf der TF-Konsole, wenn der Befehl mit --help oder --help-all ausgeführt wird.

Nehmen wir als Beispiel an, wir möchten einen funktionalen Telefontest erstellen, mit dem eine Vielzahl von Telefonnummern und erwartet, von jeder nachfolgenden Nummer eine Folge von DTMF-Tönen zu erhalten verbindet.

public class PhoneCallFuncTest extends IRemoteTest {
    @Option(name = "timeout", description = "How long to wait for connection, in millis")
    private long mWaitTime = 30 * 1000;  // 30 seconds

    @Option(name = "call", description = "Key: Phone number to attempt.  " +
            "Value: DTMF to expect.  May be repeated.")
    private Map<String, String> mCalls = new HashMap<String, String>;

    public PhoneCallFuncTest() {
        mCalls.add("123-456-7890", "01134");  // default
    }

Das sind alles, was der Entwickler braucht, um zwei Konfigurationspunkte dafür einzurichten. testen. Er könnte dann mWaitTime und mCalls wie gewohnt verwenden, ohne dabei auf die Konfiguration zu achten. Da die @Option-Felder werden nach der Instanziierung der Klasse festgelegt, aber vor dem run wird aufgerufen. Diese Methode bietet eine einfache Möglichkeit für Implementierer, Standardeinstellungen für oder eine Art Filterung für die Felder Map und Collection durchführen, die Andernfalls sind nur Anfügungen möglich.

Hersteller

Der Integrator arbeitet mit Konfigurationen, die in XML geschrieben sind. Konfigurationsformat ermöglicht dem Integrator das Festlegen (oder Anfügen) eines Werts für ein beliebiges @Option-Feld. Beispiel: Angenommen, der Integrator möchte einen Test mit geringerer Latenz definieren, der die Standardnummer sowie als lang andauernden Test, bei dem verschiedene Nummern angerufen werden. Er könnte ein Paar Konfigurationen erstellen, etwa so aussehen:

<?xml version="1.0" encoding="utf-8"?>
<configuration description="low-latency default test; low-latency.xml">
    <test class="com.example.PhoneCallFuncTest">
        <option name="timeout" value="5000" />
    </test>
</configuration>
<?xml version="1.0" encoding="utf-8"?>
<configuration description="call a bunch of numbers; many-numbers.xml">
    <test class="com.example.PhoneCallFuncTest">
        <option name="call" key="111-111-1111" value="#*#*TEST1*#*#" />
        <option name="call" key="222-222-2222" value="#*#*TEST2*#*#" />
        <!-- ... -->
    </test>
</configuration>

Test-Ausführer

Der Test Runner hat auch über die Trade Federation-Konsole Zugriff auf diese Konfigurationspunkte. Zunächst führt er einen Befehl (d. h. eine Konfiguration und alle ihre Argumente) mit dem Anweisung run command <name> (oder kurz run <name>). Darüber hinaus können sie eine beliebige Liste von Argumenten im Befehl angeben, die oder Anfügen an Felder, die durch Lebenszyklusobjekte in jeder Konfiguration angegeben sind.

Zum Ausführen des Tests mit niedriger Latenz mit den many-numbers-Telefonnummern benötigt der Test-Ausführer ausführen könnten:

tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#

Um einen ähnlichen Effekt aus der entgegengesetzten Richtung zu erzielen, könnte der Test-Ausführer die Wartezeit verkürzen für den many-numbers-Test:

tf> run many-numbers.xml --timeout 5000

Reihenfolge der Optionen

Die zugrunde liegende Implementierung der Option call ist ein Map sodass alle --call in der Befehlszeile gespeichert werden.

Die Option timeout, der die Implementierung von long zugrunde liegt kann nur einen Wert speichern. Es wird also nur der zuletzt angegebene Wert gespeichert. --timeout 5 --timeout 10 ergibt timeout mit 10.

Bei einem List oder Collection als zugrunde liegende Implementierung werden alle Werte in der in der Befehlszeile angegebenen Reihenfolge gespeichert.

Boolesche Optionen

Die Optionen des booleschen zugrunde liegenden Typs können auf true gesetzt werden, indem die Optionsname, z. B. --[option-name], und kann mit false festgelegt werden. die Syntax --no-[option-name].

Siehe auch:

Optionen an Suite und Module weitergeben