2016-10-28 6 views
13

Wenn ich pytest --collect-only laufen lasse, um die Liste meiner Tests zu erhalten, bekomme ich sie in einem Format wie <Function: test_whatever>. Wenn ich jedoch pytest -k ... verwende, um einen bestimmten Test auszuführen, muss ich die "Adresse" des Tests im Format foo::test_whatever eingeben. Ist es möglich, eine Liste aller Adressen aller Tests im selben Format zu erhalten, das -k benötigt?Pytest: Adressen von allen Tests erhalten

+0

Warum möglicherweise machen Sie das brauchen? Um alle Tests auszuführen, die '--collect-only' Sie erhalten würde, ist es ausreichend,' pytest' ohne Parameter auszuführen. Und wenn sich der Satz von Tests geändert hat, ist Ihre Liste abgestanden, egal welches Format sie hat. –

Antwort

2

In conftest.py, können Sie die ‚Sammlung‘ Haken außer Kraft setzen Informationen über gesammelt test ‚Artikel‘ drucken

Sie einführen können. Ihre eigene Befehlszeilenoption (wie --collect-only) Wenn diese Option angegeben wird, die Prüflingen drucken (in welcher Weise Sie mögen) und Ausfahrt

Probe conftest.py unten (getestet lokal):..

import pytest 

def pytest_addoption(parser): 
    parser.addoption("--my_test_dump", action="store", default=None, 
     help="Print test items in my custom format") 

def pytest_collection_finish(session): 
    if session.config.option.my_test_dump is not None: 
     for item in session.items: 
      print('{}::{}'.format(item.fspath, item.name)) 
     pytest.exit('Done!') 

Weitere Informationen zu pytest Haken finden Sie unter:

http://doc.pytest.org/en/latest/_modules/_pytest/hookspec.html

+0

Wie vergleicht 'pytest_collection_finish' mit 'pytest_collectreport'? Letzteres ist unter [offizielle Plugin-Dokumentation] (http://doc.pytest.org/en/latest/writing_plugins.html) aufgeführt, während das erste nicht ist. Sollten wir das eine oder das andere bevorzugen, oder funktionieren die Funktionen grundlegend anders? – ravron

2

Die Verwendung ist nicht so, wie Sie es angeben. Aus der Dokumentation: http://doc.pytest.org/en/latest/usage.html

pytest -k stringexpr # only run tests with names that match the 
         # "string expression", e.g. "MyClass and not method" 
         # will select TestMyClass.test_something 
         # but not TestMyClass.test_method_simple 

so, was Sie ‚-k‘ passieren müssen, ist eine Zeichenfolge in allen aufrufbaren Funktionen enthalten Sie überprüfen möchten (Sie logischen Operator zwischen diesen Strings verwenden können). Für Ihr Beispiel (alle defs vorausgesetzt werden von einem foo:: Präfix:

pytest -k "foo::" 
Verwandte Themen