2016-03-21 6 views
1

Ich habe gerade begonnen, pytest in Kombination mit xdist zu verwenden, um Tests parallel auszuführen. Ich meine contest.py Ich habe einen Konfigurations-Hook, um einige Testdaten Directories (mit einem Zeitstempel) und Dateien, die ich für meinen Testlauf benötige, zu erstellen. Alles funktioniert gut, bis ich xdist verwende. Es sieht aus wie das pytest_configure zuerst ausgeführt wird und dann wieder für jeden Prozess wieder was:pytest konfiguriere Upfront vor dem parallelen Ausführen mit xdist

INTERNALERROR> OSError: [Errno 17] File exists: '/path/to/file' 

Und ich mit n + 1 Verzeichnissen am Ende (ein paar Sekunden entfernt). Gibt es eine Möglichkeit, den Testlauf vor der Verteilung zu konfigurieren?

Edit: Ich könnte eine Lösung für mein Problem here gefunden haben. Ich muss es trotzdem testen.

+0

Ich denke, Sie Ihr eigenes Schloss Mechaniker schreiben soll. –

+0

Können Sie mir ein Beispiel zeigen, wie ich das machen kann? –

Antwort

1

Ja, das hat mein Problem gelöst. Ich habe den Beispielcode von link hinzugefügt, wie ich ihn implementiert habe. Es verwendet ein Fixture, um Daten in das slaveinput dict einzufügen, das nur vom Master-Prozess in pytest_configure geschrieben wird.

def pytest_configure(config):   
    if is_master(config): 
     config.shared_directory = os.makedirs('/tests/runs/') 

def pytest_configure_node(self, node): 
    """xdist hook""" 
    node.slaveinput['shared_dir'] = node.config.shared_directory 

@pytest.fixture 
def shared_directory(request): 
    if is_master(request.config): 
     return request.config.shared_directory 
    else: 
     return request.config.slaveinput['shared_dir'] 

def is_master(config): 
    """True if the code running the given pytest.config object is running in a xdist master 
    node or not running xdist at all. 
    """ 
    return not hasattr(config, 'slaveinput')