La gestione delle opzioni è al centro dell'approccio modulare della Trade Federation. In particolare, le opzioni
sono il meccanismo mediante il quale sviluppatore, integratore e runner di test possono collaborare senza
dover duplicare il lavoro reciproco. In parole povere, la nostra implementazione della gestione delle opzioni consente
Sviluppatore per contrassegnare un membro di classe Java come configurabile, a quel punto il valore di quel membro
può essere ampliato o sostituito dall'integratore e può essere successivamente aumentato o sostituito da
l'esecutore del test. Questo meccanismo funziona per tutti i tipi intrinseci Java, nonché per qualsiasi
Map
o Collection
di tipo intrinseco.
Nota. Il meccanismo di gestione delle opzioni funziona solo per i corsi che implementano uno dei interfacce incluse nel ciclo di vita dei test e solo quando la classe è basato dai macchinari del ciclo di vita.
Sviluppatore
Per iniziare, lo sviluppatore contrassegna un membro con
Annotazione @Option
.
Indicano (come minimo) i valori name
e description
, che
specificare il nome dell'argomento associato all'opzione e la descrizione che verrà visualizzata
nella console TF quando il comando viene eseguito con --help
o --help-all
.
Ad esempio, supponiamo di voler creare un test telefonico che consenta di numeri di telefono, e si aspetta di ricevere una sequenza di toni DTMF da ogni numero dopo si connette.
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 }
È tutto ciò che serve allo sviluppatore per impostare due punti di configurazione.
test. Dopodiché potrebbe usare mWaitTime
e mCalls
normalmente,
senza prestare molta attenzione al fatto che sono configurabili. Poiché
I campi @Option
vengono impostati dopo la creazione dell'istanza del corso, ma prima del
Viene chiamato il metodo run
, che consente agli implementatori di configurare facilmente i valori predefiniti per
o eseguire un qualche tipo di filtro sui campi Map
e Collection
, che sono
altrimenti in sola aggiunta.
Azienda integrativa
L'integratore funziona nel mondo delle configurazioni, che sono scritte in XML. Il formato della configurazione
consente all'integratore di impostare (o aggiungere) un valore per qualsiasi campo @Option
. Ad esempio,
supponiamo che l'integratore volesse definire un test a latenza inferiore che chiami anche il numero predefinito,
è un test a lungo termine che chiama una varietà di numeri. Potrebbe creare un paio di configurazioni
che potrebbe avere il seguente aspetto:
<?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>
Esecutore test
L'esecutore del test ha accesso anche a questi punti di configurazione tramite la console della Trade Federation.
Innanzitutto, eseguiranno un comando (ovvero una configurazione e tutti i suoi argomenti) con
run command <name>
(o run <name>
in breve).
Inoltre, possono specificare qualsiasi elenco di argomenti del comando, che può sostituire
aggiungere ai campi specificati da Oggetti ciclo di vita all'interno di ogni configurazione.
Per eseguire il test a bassa latenza con i numeri di telefono di many-numbers
, utilizza l'esecutore del test
potrebbe eseguire:
tf> run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#
In alternativa, per ottenere un effetto simile dalla direzione opposta, il responsabile del test potrebbe ridurre il tempo di attesa
per il test many-numbers
:
tf> run many-numbers.xml --timeout 5000
Ordine delle opzioni
Potresti notare che l'opzione call
di base dell'implementazione è Map
quindi se ripeti il comando --call
nella riga di comando, saranno tutti archiviati.
L'opzione timeout
, con un'implementazione di base di long
,
può memorizzare un solo valore. Verrà quindi archiviato solo l'ultimo valore specificato.
--timeout 5 --timeout 10
genererà timeout
contenente 10.
Nel caso di un'implementazione sottostante List
o Collection
,
verranno archiviati tutti i valori, nell'ordine specificato nella riga di comando.
Opzioni booleane
Le opzioni del tipo sottostante booleano possono essere impostate su true
trasmettendo direttamente il valore
nome dell'opzione, ad esempio --[option-name]
e può essere impostato su false
utilizzando
la sintassi --no-[option-name]
.