Frage Wie gebe ich einen einzelnen Test in einer Datei mit nosetests an?


Ich habe eine Datei namens test_web.py, die eine Klasse TestWeb und viele Methoden wie test_something () enthält.

Ich kann jeden Test in der Klasse so ausführen:

$ nosetests test_web.py 
...
======================================================================
FAIL: checkout test
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/me/path/here/test_web.py", line 187, in test_checkout
...

Aber ich kann nicht scheinen, einzelne Tests zu laufen. Diese geben mir "Keine solche Test" -Fehler, wenn sie in der gleichen PWD laufen:

$ nosetests test_web.py:test_checkout
$ nosetests TestWeb:test_checkout

Was könnte hier falsch sein?


76
2017-07-02 00:26


Ursprung


Antworten:


Sie müssen es wie folgt angeben: nosetests <file>:<Test_Case>.<test_method>, oder

nosetests test_web.py:TestWeb.test_checkout

Sehen die Dokumente


110
2017-07-02 00:58



Sie können auch ein Modul angeben:

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users

15
2017-08-20 10:19



Das Angeben von Namen in der Befehlszeile, wie die anderen Antworten vorschlagen, funktioniert und ist nützlich. Wenn ich jedoch gerade dabei bin, Tests zu schreiben, stelle ich oft fest, dass ich nur den Test ausführen möchte, an dem ich gerade arbeite, und die Namen, die ich in der Befehlszeile schreiben müsste, werden ziemlich lang und mühsam . In diesem Fall bevorzuge ich einen benutzerdefinierten Dekorateur und eine Flagge.

Ich definiere wipd ("work in progress decorator") so:

from nose.plugins.attrib import attr
def wipd(f):
    return attr('wip')(f)

Dies definiert einen Dekorator @wipd was wird die setzen wip Attribut für Objekte, die es dekoriert. Zum Beispiel:

import unittest
class Test(unittest.TestCase):

    @wipd
    def test_something(self):
        pass

Dann -a wip kann in der Befehlszeile verwendet werden, um die Ausführung des Tests auf diejenigen zu beschränken, die mit markiert sind @wipd.

Hinweis zu Namen ...

Ich benutze den Namen @wipd eher für den Dekorateur @wip um diese Art von Problem zu vermeiden:

import unittest
class Test(unittest.TestCase):

    from mymodule import wip    
    @wip
    def test_something(self):
        pass

    def test_something_else(self):
        pass

Das import wird das machen wip Dekorateur ein Mitglied der Klasse, und alle Tests in der Klasse werden ausgewählt. Das attrib plugin überprüft die Elternklasse einer Testmethode, um zu sehen, ob das ausgewählte Attribut dort auch existiert und welche Attribute erstellt und getestet werden attrib existieren nicht in einem getrennten Raum. Also, wenn Sie mit testen -a foo und deine Klasse enthält foo = "platypus", dann werden alle Tests in der Klasse vom Plugin ausgewählt.


8
2017-07-08 15:09



Um mehrere spezifische Tests auszuführen, können Sie sie einfach durch Leerzeichen getrennt zur Befehlszeile hinzufügen.

nosetests test_web.py:TestWeb.test_checkout test_web.py:TestWeb.test_another_checkout

3
2018-05-22 09:21



In meinen Tests Das Angeben von Tests mit Modulnamen funktioniert nicht

Sie müssen den tatsächlichen Pfad zum .py:

nosetests /path/to/test/file.py:test_function

Dies mit nose==1.3.7


0
2018-06-14 14:06