আপনার অ্যাপ্লিকেশনটির পরীক্ষা ডিরেক্টরি রয়েছে যখন জাজানোতে একটি নির্দিষ্ট পরীক্ষা মামলা চালাচ্ছে


165

জাজানো ডকুমেন্টেশন ( http://docs.djangoproject.com/en/1.3/topics/testing/#running-tests ) বলছে যে আপনি তাদের নির্দিষ্ট করে পৃথক পরীক্ষার মামলা চালাতে পারেন:

$ ./manage.py test animals.AnimalTestCase

এটি ধরে নিয়েছে যে আপনার জাজানো অ্যাপ্লিকেশনটির একটি টেস্ট.পি ফাইলটিতে আপনার পরীক্ষা রয়েছে। যদি এটি সত্য হয়, তবে এই আদেশটি প্রত্যাশার মতো কাজ করে।

টেস্ট ডিরেক্টরিতে আমার জাজানো অ্যাপ্লিকেশনটির জন্য আমার পরীক্ষা রয়েছে:

my_project/apps/my_app/
├── __init__.py
├── tests
   ├── __init__.py
   ├── field_tests.py
   ├── storage_tests.py
├── urls.py
├── utils.py
└── views.py

tests/__init__.pyফাইলটি একটি স্যুট () ফাংশন আছে:

import unittest

from my_project.apps.my_app.tests import field_tests, storage_tests

def suite():
    tests_loader = unittest.TestLoader().loadTestsFromModule
    test_suites = []
    test_suites.append(tests_loader(field_tests))
    test_suites.append(tests_loader(storage_tests))
    return unittest.TestSuite(test_suites)

আমি যে পরীক্ষাগুলি চালাতে পারি:

$ ./manage.py test my_app

একটি পৃথক পরীক্ষার কেস নির্দিষ্ট করার চেষ্টা করা একটি ব্যতিক্রম উত্থাপন করে:

$ ./manage.py test my_app.tests.storage_tests.StorageTestCase
...
ValueError: Test label 'my_app.tests.storage_tests.StorageTestCase' should be of the form app.TestCase or app.TestCase.test_method

ব্যতিক্রম বার্তা যা বলেছিল তা করার চেষ্টা করেছি:

$ ./manage.py test my_app.StorageTestCase
...
ValueError: Test label 'my_app.StorageTestCase' does not refer to a test

আমার পরীক্ষাগুলি একাধিক ফাইলে থাকা অবস্থায় আমি কীভাবে পৃথক পরীক্ষার মামলাটি নির্দিষ্ট করব?

উত্তর:


156

জ্যাঙ্গো-নাক চেকআউট করুন । এটি আপনাকে চালনার জন্য পরীক্ষাগুলি নির্দিষ্ট করার অনুমতি দেয়:

python manage.py test another.test:TestCase.test_method

বা মন্তব্যে উল্লিখিত হিসাবে বাক্য গঠনটি ব্যবহার করুন:

python manage.py test another.test.TestCase.test_method

ধন্যবাদ @ এসডোলান হেকিভিনট্রেনের মতো একই সমস্যার মুখোমুখি। জ্যাঙ্গো-নাকে স্যুইচ করা হয়েছে এবং এটি সেই সমস্যাটিকে স্থির করেছে, এটি ডিফল্ট জাজানো পরীক্ষার রানারের চেয়েও অনেক ভাল কাজ করে।
লিমোবাইল

এটি একটি পরীক্ষা চালায়, তবে কীভাবে একটি সম্পূর্ণ টেস্টকেস চালানো যায়?
jMlines

5
@ জেমাইলস:another.test:TestCase
স্যাম ডোলান

4
আমার মতো লোকেরা যারা স্ট্যাকওভারফ্লো থেকে অন্ধভাবে পেস্ট করেছেন: উল্লিখিত প্লাগইন ছাড়াই এটি ত্রুটি ঘটবে, অন্য উত্তরে বর্ণিত সিনট্যাক্সটি ব্যবহার করবে (এর পরিবর্তে :) যা জাজানো ১.6++ এ কাজ করে।
অ্যান্ডি স্মিথ

1
আমি এই উত্তরটিকে অগ্রাহ্য করেছি কারণ এটি আসলে ওপি-র প্রশ্নের উত্তর দেয় না, যা জ্যাঙ্গোতে এটি কীভাবে করা যায়। বরং এটি কেবল নোস্টেস্টে স্যুইচ করার পরামর্শ দেয়
জোশ ব্রাউন

175

যেহেতু জাজানো ১.6 আপনি যে উপাদানটি চালাতে চান তার জন্য সম্পূর্ণ ডট স্বরলিপি ব্যবহার করে আপনি একটি সম্পূর্ণ পরীক্ষার মামলা বা একক পরীক্ষা চালাতে পারেন।

স্বয়ংক্রিয় পরীক্ষার আবিষ্কার এখন কার্যকারী ডিরেক্টরি অনুসারে পরীক্ষার সাথে শুরু হওয়া যে কোনও ফাইলে পরীক্ষার সন্ধান করবে , সুতরাং আপনার ফাইলগুলির নাম পরিবর্তন করতে হবে এমন প্রশ্নের সমাধান করে, তবে এখন আপনি সেগুলি আপনার পছন্দ ডিরেক্টরিতে রাখতে পারেন can আপনি যদি কাস্টম ফাইলের নাম ব্যবহার করতে চান তবে বিকল্পের পতাকা সহ একটি প্যাটার্ন (ডিফল্ট জ্যাঙ্গো পরীক্ষা রানার) নির্দিষ্ট করতে পারেন --pattern="my_pattern_*.py"

সুতরাং আপনি যদি আপনার manage.pyডিরেক্টরিতে থাকেন এবং অ্যাপ্লিকেশন / মডিউলটির অধীনে কোনও ফাইলের test_aভিতরে TestCaseসাবক্লাসের মধ্যে পরীক্ষা চালাতে চান আপনি :Atests.pyexample

python manage.py test example.tests.A.test_a

আপনি যদি কোনও নির্ভরতা অন্তর্ভুক্ত করতে না চান এবং জ্যাঙ্গো ১.6 বা তার পরে থাকেন তবে আপনি এটি এটি করেন।

আরও তথ্যের জন্য জাজানো ডকুমেন্টেশন দেখুন


জ্যাঙ্গোতে এখন নির্মিত এই বৈশিষ্ট্যটি দেখে ভাল লাগছে।
হেকিভিন্ত্রান

আমি একেবারেই এটি কাজ করতে পারি না: error: option --pattern not recognizedএবংinvalid command name
জিওএডেসিক

এটি জাজানো ভি 3 তে দুর্দান্ত কাজ করে!

11

আমি নিজেই এই সমস্যাটি পেয়েছিলাম এবং এই প্রশ্নটি পেয়েছি, যদি অন্য কেউ আসেন তবে আমি যা খনন করেছি তা এখানে। জ্যাঙ্গো টেস্টসুইটরুনার বিল্ড_টেষ্ট (লেবেল) নামে একটি পদ্ধতি ব্যবহার করে যা লেবেলের উপর ভিত্তি করে কোন পরীক্ষার কেসগুলি চালায় তা নির্ধারণ করে। এই পদ্ধতির দিকে নজর দিলে দেখা যাচ্ছে যে তারা "মডেল" বা "পরীক্ষা" মডিউলটিতে একটি গেটআটার () করছেন। এর অর্থ আপনি যদি স্যুটটি ফেরত দেন পরীক্ষা চালক সেই স্যুটটিতে আপনার পরীক্ষার কেসগুলি সন্ধান করছেন না, এটি কেবল সেই মডিউলগুলির মধ্যে একটিতে দেখায়।

একটি দ্রুত পরিশ্রম হ'ল __init__.pyস্যুট সংজ্ঞায়নের পরিবর্তে সরাসরি আপনার পরীক্ষাগুলি আমদানি করার জন্য। এগুলি তাদের "পরীক্ষার" মডিউলটির অংশ করে তোলে এবং তাই বিল্ড_ টেস্ট (লেবেল) সেগুলি খুঁজে পেতে পারে।

আপনার উপরের উদাহরণের জন্য, tests/__init__.pyকেবল এগুলি থাকা উচিত:

from field_tests import *
from storage_tests import *

এটি খুব মার্জিত নয় এবং অবশ্যই যদি আপনি আপনার স্যুটটির সাথে আরও জটিল কিছু করার চেষ্টা করছেন তবে এটি কাজ করবে না, তবে এটি এই ক্ষেত্রেই ঘটবে।



4

আমিও এই সমস্যায় পড়েছি এবং জাঙ্গো-নাক ব্যবহার করার পরিবর্তে আমি এই লিঙ্কটি এখানে অনুসরণ করেছি: http://www.pioverpi.net/2010/03/10/organizing-django-tests-into-folders/ । আপনাকে init .py খুলতে হবে এবং আপনার পরীক্ষাগুলি আমদানি করতে হবে।

মধ্যে প্রাক্তন Init .py:from unique_test_file import *


3

এই কোডটি আপনার __init__.py এ রাখুন এবং এটি প্যাকেজ এবং উপ-প্যাকেজে সমস্ত পরীক্ষার ক্লাস আমদানি করবে। এটি আপনাকে প্রতিটি ফাইল ম্যানুয়ালি আমদানি না করে নির্দিষ্ট পরীক্ষা চালানোর অনুমতি দেবে।

import pkgutil
import unittest

for loader, module_name, is_pkg in pkgutil.walk_packages(__path__):
    module = loader.find_module(module_name).load_module(module_name)
    for name in dir(module):
        obj = getattr(module, name)
        if isinstance(obj, type) and issubclass(obj, unittest.case.TestCase):
            exec ('%s = obj' % obj.__name__)

একইভাবে, আপনার পরীক্ষার স্যুটটির জন্য আপনি সহজভাবে ব্যবহার করতে পারেন:

def suite():   
    return unittest.TestLoader().discover("appname.tests", pattern="*.py")

এখন নতুন পরীক্ষাগুলির জন্য আপনাকে যা যা করতে হবে তা হ'ল সেগুলি লিখুন এবং নিশ্চিত করুন যে সেগুলি পরীক্ষার ফোল্ডারে রয়েছে। আমদানি আর ক্লান্তিকর রক্ষণাবেক্ষণ!

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