2013-07-10 11 views
12

Sto usando pytest. Ho due file in una directory. In uno dei file c'è un caso di test di lunga durata che genera un po 'di output. Nell'altro file c'è un caso di test che legge quell'output. Come posso garantire il corretto ordine di esecuzione dei due casi di test? C'è qualche alternativa oltre a mettere i casi di test nello stesso file nell'ordine corretto?Ordine di esecuzione del test case in pytest

+3

in generale non è una buona idea avere casi di test dipendenti l'uno dall'altro. Se è necessario utilizzare gli stessi dati in 2 casi di test, perché non aggiungerlo alla sezione 'setup'? – Brad

+0

Lo so. Non mi piace neanche ma in questo momento ne ho bisogno. – Kocka

+1

Non voglio aggiungerlo alla sezione di installazione, perché ci vogliono circa 15-20 minuti. – Kocka

risposta

7

In generale è possibile configurare il comportamento di praticamente qualsiasi parte di pytest utilizzando il suo well-specified hooks.

Nel proprio caso, si desidera l'hook "pytest_collection_modifyitems", che consente di riordinare i test raccolti sul posto.

Detto questo, sembra che ordinare i tuoi test sia più semplice - dopo tutto, questo è Python! Così ho scritto un plugin per ordinare test. Controlla il docs o installalo da pypi. In questo momento raccomando di usare @ pytest.mark.first e @ pytest.mark.second, o uno dei @ pytest.mark.order # marker, ma ho alcune idee su API più utili. Suggerimenti benvenuti :)

+0

Hey. Grazie per aver creato questo plugin. Puoi modificarlo in modo tale da estrarre semplicemente le cifre finali come l'ordine. E.g Se dico @ pytest.mark.custom1, 1 dovrebbe essere l'ordine. Questo sarebbe di grande aiuto! –

+0

Posso provare. Penso che v0.2 abbia questo comportamento con un marker "order", invece di marker arbitrari. Potresti scrivere questo come richiesta di funzionalità nella pagina github di order-order? https://github.com/ftobia/pytest-ordering –

+0

Il link hooks dovrebbe andare a: http://pytest.org/latest/writing_plugins.html#well-specified-hooks –

1

Forse si può considerare l'utilizzo di plug-in dependency pytest, dove è possibile impostare le dipendenze di prova facilmente:

@pytest.mark.dependency() 
def test_long(): 
    pass 

@pytest.mark.dependency(depends=['test_long']) 
def test_short(): 
    pass 

In questo modo test_short verrà eseguito solo se test_long è successo e forza la sequenza di esecuzione anche.

+0

Sopra non funziona per me per il sequenziamento degli ordini. Ad esempio: se si capovolge l'ordine. Cioè da molto tempo. In tal caso, viene saltato a lungo. – peaxol

3

C'è anche un plug-in pytest-ordering che sembra soddisfare le tue esigenze.

+0

La risposta di Frank T. menziona già questo plugin ed è stata postata 3 anni prima di questa risposta. – Ave

+0

uh, ma non ha menzionato il nome. questo è il motivo per cui mi sono persuaso del tutto. –