मैं कैसे nosetests के साथ एक फ़ाइल में एकल परीक्षण निर्दिष्ट कर सकता हूं?


102

मेरे पास एक फ़ाइल है, जिसे test_web.py नाम दिया गया है जिसमें एक वर्ग TestWeb और कई विधियाँ जैसे test_something () नाम हैं।

मैं हर परीक्षा को कक्षा में चला सकता हूँ जैसे:

$ 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
...

लेकिन मैं व्यक्तिगत परीक्षण चलाने के लिए प्रतीत नहीं कर सकता। एक ही पीडब्ल्यूडी में चलने पर ये मुझे "ऐसी कोई परीक्षा नहीं" त्रुटि देते हैं:

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

यहां क्या गलत हो सकता है?


जब तक आप अपने परीक्षण के मामलों या SSCCE को पोस्ट नहीं कर सकते , मैं आपकी मदद नहीं कर सकता , मैंने सिर्फ आपके मशीन पर नाक से इस्तेमाल किए गए वाक्यविन्यास की कोशिश की और यह ठीक काम किया।
जेफ ट्रैटनर

जवाबों:


148

आपको इसे इस तरह निर्दिष्ट करना होगा: nosetests <file>:<Test_Case>.<test_method>या

nosetests test_web.py:TestWeb.test_checkout

डॉक्स देखें


6
पृथ्वी पुस्तकालय क्यों 'के बजाय': 'का उपयोग करता है?' ;)
ओमिक्रॉन

2
शायद एक मॉड्यूल और एक वर्ग के बीच में परिसीमन करना आसान है?
क्रिस

@omikron जब मैंने फ़ाइल निर्दिष्ट की तो मेरे पास कोई आयात त्रुटियां नहीं थीं
gabeio

2
वाह यह भयानक है, क्लासिक अजगर पुस्तकालयों, मौजूदा इंटरफेस की परवाह नहीं है
Dagrooms

16

आप एक मॉड्यूल भी निर्दिष्ट कर सकते हैं:

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users

1
मुझे नहीं पता कि यह पाइथन का एक अलग संस्करण है nosetestsया क्या, लेकिन यह वाक्य रचना विफल है। क्या काम करता है , हालांकि, है:, nosetests tests/test_integration:IntegrationTests.test_user_search_returns_usersअर्थ - संदर्भ फ़ाइलों के रूप में फाइलें, पायथन मॉड्यूल नहीं, /इसके बजाय का उपयोग करते हुए.
dwanderson

1
@ डांडरसन दोनों usages काम करना चाहिए, जैसे कि nose.readthedocs.io/en/latest/usage.html#selecting-tests । आपकी विफलता testsआपके सेटअप में मॉड्यूल नहीं होने के कारण हो सकती है ?
माइकलजोसेफ

1
आह, यह सही है, मैं निर्देशिका __init__.pyमें एक भूल गया tests। बहुत बढ़िया! धन्यवाद
dwanderson

11

कमांड लाइन पर नाम निर्दिष्ट करना जैसे अन्य उत्तर बताते हैं कि काम करता है और उपयोगी है। हालाँकि, जब मैं लिखने के परीक्षण के बीच में होता हूं, तो मैं अक्सर पाता हूं कि मैं केवल उस परीक्षण को चलाना चाहता हूं जिस पर मैं काम कर रहा हूं, और जिन नामों को मुझे कमांड लाइन पर लिखना होगा, वे लिखने के लिए बहुत लंबे और बोझिल हैं। । ऐसे मामले में, मैं एक कस्टम डेकोरेटर और ध्वज का उपयोग करना पसंद करता हूं।

मैं परिभाषित करता हूं wipd("प्रगति डेकोरेटर में काम") इस तरह:

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

यह एक डेकोरेटर को परिभाषित करता है @wipdजो उन wipवस्तुओं पर विशेषता निर्धारित करेगा जो इसे सजाता है। उदाहरण के लिए:

import unittest
class Test(unittest.TestCase):

    @wipd
    def test_something(self):
        pass

फिर -a wipकमांड लाइन पर परीक्षण के निष्पादन को चिह्नित करने के लिए उपयोग किया जा सकता है @wipd

नामों पर ध्यान दें ...

मैं इस तरह की समस्या से बचने के @wipdलिए डेकोरेटर के नाम का उपयोग कर रहा हूं @wip:

import unittest
class Test(unittest.TestCase):

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

    def test_something_else(self):
        pass

importकर देगा wipडेकोरेटर एक सदस्य वर्ग के हैं, और सभी वर्ग में परीक्षण का चयन किया जाएगा। attribप्लगइन चेकों एक परीक्षा पद्धति के जनक वर्ग करता है, तो विशेषता चयनित वहाँ भी मौजूद है को देखने के लिए, और विशेषताओं बनाया है और जांच की जाती है कि द्वारा attribकर एक अलग अंतरिक्ष में मौजूद नहीं। इसलिए यदि आप परीक्षण करते हैं -a fooऔर आपकी कक्षा सम्‍मिलित है foo = "platypus", तो प्लगइन द्वारा कक्षा में सभी परीक्षणों का चयन किया जाएगा।


3

कई विशिष्ट परीक्षण चलाने के लिए, आप उन्हें अंतरिक्ष से अलग करके कमांड लाइन में जोड़ सकते हैं।

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

0

मेरे परीक्षणों में, मॉड्यूल नामों के साथ परीक्षण निर्दिष्ट करने से काम नहीं होता है

आपको वास्तविक पथ निर्दिष्ट करना होगा .py:

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

इसके साथ nose==1.3.7


0

मेरी आवश्यकता एक परीक्षण फ़ाइल में एक एकल परीक्षण चलाने की थी जो किसी अन्य विंडोज़ निर्देशिका में थी - यह एनाकोंडा कमांड प्रॉम्प्ट से किया गया था :

भाग गया nosetests से:

(base) C:\Users\ABC\Documents\work\

लेकिन test_MyTestFile.py और methodsFile.py में थे:

 (base) C:\Users\ABC\Documents\work\daily\

उद्धरणों के साथ पथ सहित एकल परीक्षण चलाएं :

(base) C:\Users\ABC\Documents\work>nosetests "daily\\test_MyTestFile.py:MyTestClass.test_add_integers"

test_MyTestFile.py इस तरह देखा:

import methodsFile
import unittest

class MyTestClass(unittest.TestCase):

    def test_add_integers(self):
        assert methodsFile.add(5, 3) == 8

    def test_add_integers_zero(self):
        assert methodsFile.add(3, 0) == 3

MethodFile.py इस तरह देखा:

def add(num1, num2):
        return num1 + num2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.