2012-11-07 10 views
7

Quindi ho cercato di ottenere pytest per eseguire test di selenio su diversi ambienti basati su alcuni argomenti della riga di comando. Ma si continua a gettare questo errore:Impossibile ottenere pytest per capire gli argomenti della riga di comando sui setup

TypeError: setup_class() takes exactly 2 arguments (1 given) 

sembra che è la comprensione che setup_class prende 2 argomenti, ma host non viene superato. Ecco il codice per setup_class:

def setup_class(cls, host): 
     cls.host = host 

E qui è il file conftest.py:

def pytest_addoption(parser): 
    parser.addoption("--host", action="store", default='local', 
     help="specify the host to run tests with. local|stage") 

@pytest.fixture(scope='class') 
def host(request): 
    return request.config.option.host 

Quello che è strano è che host viene visto dalle funzioni (quindi se faccio un test_function e passaggio host come parametro, lo fa bene), sono solo gli apparecchi setup che non funzionano.

mi sono guardato intorno e ho trovato questo, pytest - use funcargs inside setup_module ma che non sembra funzionare (e non è aggiornato dal 2.3.

Qualcuno sa che cosa sto facendo male? Utilizzando py.test 2.3.2 .

Grazie

risposta

1

setup_module/classe/metodo e gli amici non possono lavorare con i dispositivi pytest direttamente. il modo in cui pytest-2.3 di fare l'equivalente è quello di utilizzare autouse fixtures. Se è possibile è meglio passare infissi esplicitamente a funzioni di test o per inserire un usefixtures marker su una classe o un modulo.

+0

[qui] (http://pytest.org/latest/fixture.html#working-with-a-module-shared-fixture) si dice "Il nome del dispositivo è di nuovo SMTP e si può accedere ai suoi risultati elencando il nome smtp come parametro di input in qualsiasi test o funzione di installazione ". Quindi posso usarlo su Setup e così via, no? E 'autouse' e' uses' fanno in modo che tutti i test eseguano quel codice, voglio solo il set up per farlo. – Nacht

+0

Ti darò la risposta. Anche se non hai risposto alla mia risposta specifica, mi hai dato un'idea come soluzione. Questo è strano, i documenti dicono che puoi farlo, ma non sembra essere il caso. Comunque, grazie. – Nacht

+1

hai ragione, i documenti sono fuorvianti. O in realtà, ho appena caricato una correzione che sostituisce "funzione di setup" con "funzione fixture". scusa! – hpk42

19

Per accedere alle opzioni della riga di comando dall'interno delle funzioni di configurazione, è possibile utilizzare l'oggetto pytest.config. Ecco un esempio ... adattati secondo necessità.

import pytest 

def setup_module(mod): 
    print "Host is %s" % pytest.config.getoption('host') 
+1

Per i futuri visitatori, salta la risposta accettata e usala. Questo funziona e prende meno passaggi rispetto alla risposta accettata. – pr4bh4sh

Problemi correlati