Domanda

Io sono incaricato di test di unità di scrittura per una suite di software di rete scritto in python. Scrivendo unità per i costruttori di messaggio e di altri metodi statici è molto semplice, ma ho colpito un muro quando si tratta di scrivere un test per la rete di fili in loop.

Ad esempio: Il server si connette a potrebbe essere su qualsiasi porta, e voglio essere in grado di testare la capacità di connettersi a numerosi porti (in sequenza, non parallelo) senza la necessità di eseguire numerosi server. Che cosa è un buon modo per avvicinarsi a questo? Forse fare la costruzione di server e una parte la distruzione del test? Qualcosa mi dice che ci deve essere una risposta semplice che mi sfugge.

Devo immaginare che ci sono metodi per Unit Testing discussioni in rete, ma non riesco a trovare alcuna.

È stato utile?

Soluzione

Vorrei cercare di introdurre una fabbrica nel codice esistente che pretende di creare oggetti socket. Poi, in un passaggio di prova in una fabbrica finta che crea prese finte che ha appena fingono hanno collegati ad un server (o non per i casi di errore, che volete anche per testare, non è vero?) E registrare il traffico di messaggi da dimostrare che il codice ha usato le porte giuste per collegarsi ai giusti tipi di server.

Non tentare di utilizzare le discussioni appena ancora, per semplificare il test.

Altri suggerimenti

Dipende da come il software di rete è stratificata e il livello di dettaglio che si desidera i test per essere, ma è certamente fattibile in alcuni scenari per rendere configurazione del server e strappare-down parte del test. Per esempio, quando stavo lavorando sul pacchetto di registrazione Python (prima di diventare parte di Python), ho avuto un test (non ho usato pyunit / unittest - era solo uno script ad-hoc), che licenziato (in una prova) quattro server per l'ascolto su TCP, UDP, HTTP e HTTP / SOAP porte, e poi inviati traffico di rete a loro. Se siete interessati, la distribuzione è qui e la rilevante script di test in archivio da guardare è log_test.py. Il pacchetto di registrazione Python ha ovviamente venire qualche strada da allora, ma il vecchio pacchetto è ancora in giro per l'utilizzo con le versioni di Python <2.3 e> = 1.5.2.

Ho alcuni casi di test che vengono eseguiti un server nel setup e chiuderlo nel tearDown. Non so se è un modo molto elegante per farlo ma funziona di per me.

Sono felice di averlo e mi aiuta molto.

Se il server di init è molto lunga, un'alternativa sarebbe quella di automatizzare con la formica. formica correva / arrestare il server prima / dopo l'esecuzione dei test.

qui per molto interessante tutorial su formica e pitone

Si avrebbe bisogno di creare socket finte. Il modo esatto per farlo sarebbe dipenderà da come si creano i socket e la creazione di un generatore di presa sarebbe una buona idea. È inoltre possibile utilizzare una libreria beffardo come pymox per rendere la vita più facile. Può anche eventualmente eliminare la necessità di creare un generatore presa solo per il solo scopo di test.

Utilizzando pymox, si potrebbe fare qualcosa di simile:

def test_connect(self):
    m = mox.Mox()
    m.StubOutWithMock(socket, 'socket')
    socket_mock = m.MockAnything()
    m.socket.socket(socket.AF_INET, socket.SOCK_STREAM).AndReturn(socket_mock)
    socket_mock.connect(('test_server1', 80))
    socket_mock.connect(('test_server2', 81))
    socket_mock.connect(('test_server3', 82))

    m.ReplayAll()
    code_to_be_tested()
    m.VerifyAll()
    m.UnsetStubs()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top