পাইলেন্সে নাকের সাথে আমি কীভাবে একটি একক পরীক্ষা চালাব


152

পরীক্ষার / কার্যকরী ডিরেক্টরিতে একগুচ্ছ পরীক্ষার সাথে আমার কাছে পাইলনস 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, এটি হল মডিউল / ফাইলের পাথ এবং ফাইলের মধ্যে থাকা বস্তুগুলি পৃথক করে colon module.pathফাইলের (যেমন tests/my_tests.py:ClassNameInFile.method_name) সম্পর্কিত আপেক্ষিক পথ ।


1
আহ, এক সংমিশ্রণ আমি চেষ্টা করিনি। দীর্ঘশ্বাস । ধন্যবাদ!
বেন

2
যা পরীক্ষার নিয়ামক / মডিউলটিতে প্রতিটি পরীক্ষা চালায়। একক পরীক্ষা পদ্ধতি চালানোর বিষয়ে কী? কিছু একটা appname.tests.functional.test_controller.name_of_test_method
ryonLive

69
একটি নির্দিষ্ট পরীক্ষা শ্রেণি এবং পদ্ধতি চালনার জন্য ফর্মের একটি পাথ ব্যবহার করুন module.path:ClassNameInFile.method_name, এটি হল মডিউল / ফাইলের পাথ এবং ফাইলের মধ্যে থাকা বস্তুগুলি পৃথক করে colon
জেমস মুর্টি

9
অন্য কারও বিভ্রান্তির জন্য: module.pathফাইলটির আপেক্ষিক পথ (উদাহরণস্বরূপ my_tests.py:ClassNameInFile.method_name), আপনি যে importবিবৃতিতে ব্যবহার করবেন সেই পথটি নয়
bcoughlan

1
@bcoughlan আমি এটি উত্তরে যুক্ত করেছি! এটা সত্যিই বিভ্রান্তিকর ছিল।
স্ক্লামার

47

আমার জন্য নোসেটসেস ১.৩.০ ব্যবহার করার জন্য এই রূপগুলি কাজ করছে (তবে __init__.pyআপনার পরীক্ষার ফোল্ডারে আপনার রয়েছে তা নিশ্চিত করুন ):

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

নোট করুন যে মডিউল নাম এবং শ্রেণীর নামের মধ্যে একক কোলন।


1
দ্বিতীয় বিকল্পের জন্য ধন্যবাদ, ব্যাশ স্বতঃপূরণের সাহায্যে অবশ্যই সবচেয়ে সুবিধাজনক।
পিটার কিলকুক

এটি লক্ষণীয় হবে যে প্যারামিটারাইজড টেস্টগুলি কল করার জন্য (যেগুলি @ প্যারামিটারাইজড.এক্সপ্যান্ড ব্যবহার করে) আপনার এই সিনট্যাক্সটি ব্যবহার করতে হবে: test_file.py:ClassNameInFile.MethodName_TestNumber, যেখানে টেস্টনাম্বার 1, 2, 3, ... প্রতি এক হতে পারে প্যারামিট্রাইজড পরীক্ষা
লুকা

2

আমাকে ".py" ফাইলের এক্সটেনশন যুক্ত করতে হবে, অর্থাৎ,

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

সম্ভবত এটি কারণ ফাইলটিতে আমার কোনও ক্লাস নেই। ছাড়া .py, নাক অভিযোগ করছিল:

ফাইল / পাথ_ টো / মাই_ফায়লে কলযোগ্য টেস্টফ্যান্স_সিটি খুঁজে পাওয়া যায় না: ফাইলটি পাইথন মডিউল নয়

এবং এটি যদিও আমার __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

নোট করুন যে আমার পরীক্ষা যেখানে ক্লাসে নেই। পরীক্ষার পদ্ধতিগুলি একটি একক ফাইলে ছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.