मैं नाइल के साथ पाइलन्स में एक एकल परीक्षण कैसे चलाऊं


152

मेरे पास परीक्षण / कार्यात्मक निर्देशिका में परीक्षणों के एक समूह के साथ एक Pylons 1.0 ऐप है। मुझे अजीब परीक्षा परिणाम मिल रहे हैं और मैं सिर्फ एक परीक्षण चलाना चाहता हूं। नाक के प्रलेखन का कहना है कि मुझे कमांड लाइन पर एक परीक्षण नाम से पारित करने में सक्षम होना चाहिए, लेकिन मुझे कोई फर्क नहीं पड़ता कि मैं क्या करूं

उदाहरण के लिए:

nosetests -x -s sometestname

देता है:

Traceback (most recent call last):
  File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.egg/nose/loader.py", line 371, in loadTestsFromName
   module = resolve_name(addr.module)
  File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.egg/nose/util.py", line 334, in resolve_name
   module = __import__('.'.join(parts_copy))
ImportError: No module named sometestname

मुझे उसी के लिए त्रुटि मिलती है

nosetests -x -s appname.tests.functional.testcontroller

सही सिंटैक्स क्या है?

जवाबों:


233

nosetests appname.tests.functional.test_controllerकाम करना चाहिए, जहां फ़ाइल का नाम है test_controller.py

एक विशिष्ट परीक्षण वर्ग और विधि को चलाने के लिए फॉर्म के एक पथ का उपयोग करें module.path:ClassNameInFile.method_name, जो कि बृहदान्त्र के साथ मॉड्यूल / फ़ाइल पथ और फ़ाइल के भीतर की वस्तुओं को अलग करता है। module.pathफ़ाइल (जैसे tests/my_tests.py:ClassNameInFile.method_name) के सापेक्ष पथ है ।


1
आह, एक संयोजन मैंने कोशिश नहीं की। आह । धन्यवाद!
बेन

2
जो हर परीक्षा को एक परीक्षण नियंत्रक / मॉड्यूल में चलाएगा। एकल परीक्षण विधि चलाने के बारे में क्या? कुछ इस तरह appname.tests.functional.test_controller.name_of_test_method
रयोनलाइफ़

69
एक विशिष्ट परीक्षण वर्ग और विधि को चलाने के लिए फॉर्म के एक पथ का उपयोग करें module.path:ClassNameInFile.method_name, जो कि बृहदान्त्र के साथ मॉड्यूल / फ़ाइल पथ और फ़ाइल के भीतर की वस्तुओं को अलग करता है।
जेम्स मुर्टी

9
किसी और को भ्रमित module.pathकरने के लिए: फ़ाइल के सापेक्ष पथ है (उदाहरण के लिए my_tests.py:ClassNameInFile.method_name), उस पथ का नहीं जिसे आप एक importबयान में उपयोग करेंगे
bcoughlan

1
@bcoughlan मैंने इसे उत्तर में जोड़ा! यह वास्तव में भ्रामक था।
schlamar

47

मेरे लिए Nosetests 1.3.0 का उपयोग करके ये संस्करण काम कर रहे हैं (लेकिन सुनिश्चित करें कि __init__.pyआपके परीक्षण फ़ोल्डर में आपके पास है):

nosetests [options] tests.ui_tests
nosetests [options] tests/ui_tests.py
nosetests [options] tests.ui_tests:TestUI.test_admin_page

ध्यान दें कि मॉड्यूल नाम और वर्ग के नाम के बीच एकल कोलन।


1
दूसरे विकल्प के लिए धन्यवाद, बैश स्वतः पूर्ण की मदद से निश्चित रूप से सबसे सुविधाजनक है।
पीटर किल्गुकुक

यह ध्यान देने योग्य होगा कि पैरामीटर किए गए परीक्षणों को कॉल करने के लिए (जो @ पैरामीटरized.expand का उपयोग करते हैं) आपको इस सिंटैक्स का उपयोग करना होगा: test_file.py :ClassNameInFile.MethodName_TestNumber, जहां TestSumber 1, 2, 3, ... प्रति एक हो सकता है। पैराट्राइज्ड टेस्ट
लूका

2

मुझे ".py" फ़ाइल एक्सटेंशन जोड़ना है, अर्थात

r'/path_to/my_file.py:' +  r'test_func_xy'

शायद इसका कारण यह है कि मेरे पास फ़ाइल में कोई वर्ग नहीं है। बिना .pyनाक, नाक की शिकायत थी:

फ़ाइल / path_to / my_file में कॉल करने योग्य test_func_xy नहीं मिल सकती: फ़ाइल एक pththon मॉड्यूल नहीं है

और यह हालांकि मेरे पास __init__.pyफ़ोल्डर में है /path_to/


0

मैंने यह छोटी सी स्क्रिप्ट लिखी थी, जो पिछले उत्तरों पर आधारित थी:

#!/usr/bin/env bash

# 
# Usage:
# 
#     ./noseTest <filename> <method_name>
# 
# e.g.:
# 
#     ./noseTest test/MainTest.py mergeAll
#     
# It is assumed that the file and the test class have the _same name_ 
# (e.g. the test class `MainTest` is defined in the file `MainTest.py`).
# If you don't follow this convention, this script won't work for you.
#

testFile="$1"
testMethod="$2"

testClass="$(basename "$testFile" .py)"

nosetests "$testFile:$testClass.test_$testMethod"

0

निम्नलिखित ने मेरे लिए अच्छा काम किया:

nosetests test_file.py:method_name

ध्यान दें कि मेरे परीक्षण एक कक्षा में नहीं हैं। टेस्ट के तरीके एक ही फाइल में थे।

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