Come scrivere i test di integrazione per un sistema distribuito altamente dipendente dalla data corrente e dal flusso di tempo?

1

Il mio team e io stiamo provando a impostare alcuni test di integrazione di un sistema distribuito che dipende in gran parte dal flusso di tempo e dagli eventi provenienti da fonti esterne. Solo per darti un'idea su cosa stiamo lavorando:

when event A is received within 8:00 AM and 9:00 AM, and afterward, within 5 minutes, a second event B is received, then write a record into the DB with the timestamp at which event A has been received.

Ora ... scrivere un test di integrazione contro il sistema reale sembra complesso.

Come impostare la data del sistema in prova?

Il sistema in prova dovrebbe idealmente funzionare con un tempo definito dai test di integrazione. Forse il test di integrazione dovrebbe impostare il tempo del server alle "9:00" quando inizia il test? Qualche altro consiglio?

Come inviare eventi a una velocità nota?

Gli eventi dovrebbero essere inviati con un ritmo riproducibile e conosciuto, vale a dire l'evento di fuoco A alle 9:05 e l'evento B alle 9:06. Forse un programmatore programmabile semplice può essere utilizzato qui?

Come affrontare i test che richiedono grandi timeout?

Alcuni scenari di test richiedono il passaggio di una grande quantità di tempo tra due eventi. È possibile accelerare artificialmente il flusso del tempo per comprimere un'ora in solo qualche secondo nel test? Penso però ad accelerare il clock del sistema (non nel senso dell'overclocking, solo nel senso di avere i secondi più veloci). Mi sembra che questo non possa essere fatto in un vero pezzo di hardware ma forse in una macchina virtuale è possibile. Qualche consiglio su questo argomento?

Vincoli

  • Non tutti i moduli che fanno parte dei test di integrazione sono sotto il nostro diretto controllo.
posta danidemi 17.01.2018 - 16:22
fonte

1 risposta

6

Non manipolare mai l'ora o la velocità effettive del sistema su cui si sta effettuando il test solo per testare la logica del tempo. È difficile avere ragione e avere un sacco di effetti collaterali imprevisti.

Al contrario, disaccoppia tutte le funzionalità relative al tempo nella tua base di codice; il codice aziendale utilizzerà un'implementazione banale che si limita a delegare alle normali funzioni e durante i test è possibile simulare il tempo e facilmente simulare qualsiasi sequenza di eventi che si desidera.

    
risposta data 17.01.2018 - 16:32
fonte

Leggi altre domande sui tag