ফাইল থেকে কোন পাইস্ট টেস্ট চালানো উচিত তা নির্দিষ্ট করার কোনও উপায় আছে?


190

pytestএকটি ফাইল থেকে চালানোর জন্য পরীক্ষা নির্বাচন করার কোনও উপায় আছে ? উদাহরণস্বরূপ, foo.txtসম্পাদিত হওয়ার জন্য পরীক্ষার একটি তালিকা সম্বলিত একটি ফাইল :

tests_directory/foo.py::test_001
tests_directory/bar.py::test_some_other_test

বা, পাইস্টের সাথে বিভিন্ন ডিরেক্টরি থেকে পরীক্ষার নামে সাধারণ প্যাটার্ন না পেয়ে একাধিক পরীক্ষা নির্বাচন করার কোনও উপায় আছে কি?

pytest -k <pattern> একক প্যাটার্ন অনুমতি দেয়।

pytest.markপ্রতিটি পরীক্ষার বিপরীতে একটি বিকল্প হ'ল , তবে আমার প্রয়োজনটি হ'ল বিভিন্ন ফাইল থেকে পরীক্ষার বিভিন্ন সংমিশ্রণ চালানো।

একাধিক নিদর্শন এবং প্রতিটি প্যাটার্নের জন্য একটি পরীক্ষার ফাইলের নাম নির্দিষ্ট করার কোনও উপায় আছে কি?

অথবা

কোনও ফাইলের সঠিক পরীক্ষার পাথ নির্দিষ্ট করার এবং সেই ফাইলটিকে ইনপুট হিসাবে খাওয়ানোর কোনও উপায় আছে কি pytest?

অথবা

এই উদ্দেশ্যে ব্যবহার করা যেতে পারে এমন কোনও হুক ফাংশন আছে কি?

উত্তর:


231

আপনি বিভিন্ন প্যাটার্ন দিয়ে পরীক্ষার কেসগুলি চালনার -kবিকল্পটি ব্যবহার করতে পারেন :

py.test tests_directory/foo.py tests_directory/bar.py -k 'test_001 or test_some_other_test'

এটি টেস্ট_001 নামের পরীক্ষার কেসগুলি চালাবে এবং টেস্ট_সোম_অর্থ_সামান্য টেস্টের বাকী পরীক্ষাগুলিকে অনির্বাচিত করে।

দ্রষ্টব্য: এটি টেস্ট_001 বা টেস্ট_সোম_অর্থ_পরে শুরু করে যে কোনও পরীক্ষার মামলা নির্বাচন করবে । উদাহরণস্বরূপ, আপনার যদি টেস্ট কেস test_0012 থাকে তবে এটিও নির্বাচন করা হবে।


1
ধন্যবাদ। তবে যদি foo.py এবং বার.পি (টেস্ট_001 বলুন) তে একই নামের একটি পরীক্ষা থাকে, তবে এটি উভয় থেকেই কার্যকর হবে।
শারদ

2
হ্যাঁ এটি
হ'ল

তবে এটি আমার জন্য সমস্যা। আমি কোন ফাইলটি থেকে কোন পরীক্ষাগুলি কার্যকর করতে হবে তা চয়ন করতে চাই।
শারদ

@ নামজিভিউ `-কে <পরীক্ষার পদ্ধতির নাম>`

4
এটি হওয়া উচিতpy.test path/to/test/file.py -k function_name_test
লিটলজিরো

91

পরীক্ষা / নির্বাচন পরীক্ষা নির্দিষ্ট করে

পাইয়েস্ট কমান্ড-লাইন থেকে পরীক্ষা চালানোর বিভিন্ন উপায় সমর্থন করে।

একটি মডিউল মধ্যে পরীক্ষা চালান

pytest test_mod.py

একটি ডিরেক্টরিতে পরীক্ষা চালান

pytest testing/

কীওয়ার্ড এক্সপ্রেশন দিয়ে পরীক্ষা চালান

pytest -k "MyClass and not method"

এটি টেস্টগুলি চালাবে যা প্রদত্ত স্ট্রিং এক্সপ্রেশনটির সাথে মেলে এমন নামগুলি ধারণ করে, যার মধ্যে পাইথন অপারেটরগুলি অন্তর্ভুক্ত থাকতে পারে যা ফাইলের নাম, শ্রেণীর নাম এবং ভেরিয়েবল হিসাবে ফাংশন নাম ব্যবহার করে। উপরের উদাহরণটি চলবে TestMyClass.test_somethingতবে চলবে না TestMyClass.test_method_simple

নোড আইডি দ্বারা পরীক্ষা চালান

প্রতিটি সংগৃহীত পরীক্ষার জন্য একটি অনন্য নির্ধারিত হয় nodeidযা মডিউল ফাইলের নাম অনুসারে ক্লাসের নাম, ফাংশন নাম এবং প্যারামিটারাইজেশন থেকে প্যারামিটারগুলি বর্ণগুলি দ্বারা পৃথক করে নির্দিষ্ট করে ::

একটি মডিউল মধ্যে একটি নির্দিষ্ট পরীক্ষা চালাতে:

pytest test_mod.py::test_func

কমান্ড লাইনে একটি পরীক্ষা পদ্ধতি উল্লেখ করে অন্য একটি উদাহরণ:

pytest test_mod.py::TestClass::test_method

মার্কার এক্সপ্রেশন দিয়ে পরীক্ষা চালান

pytest -m slow

সাজসজ্জার দিয়ে সজ্জিত সমস্ত পরীক্ষা চালাবে @pytest.mark.slow

আরও তথ্যের জন্য চিহ্ন দেখুন

প্যাকেজগুলি থেকে পরীক্ষা চালান

pytest --pyargs pkg.testing

pkg.testingপরীক্ষাগুলি অনুসন্ধান এবং চালানোর জন্য এটি এর ফাইল সিস্টেম অবস্থানটি আমদানি করে এবং ব্যবহার করবে ।

সূত্র: https://docs.pytest.org/en/latest/usage.html#specifying-tests-selecting-tests


পরীক্ষা_মোডি.পি :: টেস্টক্লাস :: টেস্ট_মোথড আমার পক্ষে সবচেয়ে ভাল কাজ করেছে
স্টিফেনগোডারিজ

1
এটিকে স্বীকৃত আনসার হিসাবে চিহ্নিত করা উচিত
অ্যাডাম হিউজেস

13

দুটি ভিন্ন শ্রেণিতে যদি আপনার একই পদ্ধতির নাম থাকে এবং আপনি কেবল তাদের মধ্যে একটি চালনা করতে চান, এটি কাজ করে:

pytest tests.py -k 'TestClassName and test_method_name'

6

পদ্ধতি 1 : এলোমেলোভাবে নির্বাচিত পরীক্ষাগুলি। দীর্ঘ এবং কুরুচিপূর্ণ।

python -m pytest test/stress/test_performance.py::TestPerformance::test_continuous_trigger test/integration/test_config.py::TestConfig::test_valid_config

পদ্ধতি 2: কীওয়ার্ড এক্সপ্রেশন ব্যবহার করুন।

দ্রষ্টব্য: আমি টেস্টকেসের নাম দিয়ে অনুসন্ধান করছি। টেস্টক্লাস নামের ক্ষেত্রেও একই প্রযোজ্য।

কেস 1: নীচে যা কিছু পাওয়া যাবে তা চলবে। যেহেতু আমরা 'ওআর' ব্যবহার করেছি।

python -m pytest -k 'test_password_valid or test_no_configuration'

আসুন বলুন উপরের দুটি সত্যই সঠিক, 2 টি পরীক্ষা চালানো হবে।

কেস ২: এখন একটি ভুল নাম এবং অন্য একটি সঠিক নাম।

python -m pytest -k 'test_password_validzzzzzz or test_no_configuration' 

কেবল একজনকে খুঁজে পাওয়া যায়।

কেস 3 : আপনি যদি সমস্ত পরীক্ষা চালাতে চান বা কেউ না চান তবে AND ব্যবহার করুন

python -m pytest -k 'test_password_valid and test_no_configuration'

উভয়ই সঠিক বা না হলে চালানো হবে।

কেস ৪: কেবলমাত্র একটি ফোল্ডারে পরীক্ষা চালান:

python -m pytest test/project1/integration -k 'test_password_valid or test_no_configuration'

কেস 5: শুধুমাত্র একটি ফাইল থেকে পরীক্ষা চালান।

python -m pytest test/integration/test_authentication.py -k 'test_password_expiry or test_incorrect_password'

কেস।: ম্যাচ বাদে সমস্ত পরীক্ষা চালান।

python -m pytest test/integration/test_authentication.py -k 'not  test_incorrect_password'

1

নোড আইডির মাধ্যমে রান টেস্ট সম্পর্কে ডক অনুসারে

যেহেতু আপনার foo.txt এ সমস্ত নোড আইড রয়েছে, কেবল চালান

pytest `cat foo.txt | tr '\n' ' '`

এটি নীচের কমান্ডের সাথে একই (প্রশ্নে ফাইলের সামগ্রী সহ)

pytest tests_directory/foo.py::test_001 tests_directory/bar.py::test_some_other_test

1

আমার উত্তরটি বিভিন্ন পরিস্থিতিতে পরীক্ষার উপসেট চালানোর একটি উপায় সরবরাহ করে।

একটি প্রকল্পে সমস্ত পরীক্ষা চালান

pytest

একটি একক ডিরেক্টরিতে পরীক্ষা চালান

একটি ডিরেক্টরি থেকে সমস্ত পরীক্ষা চালাতে, প্যারামিটার হিসাবে ডিরেক্টরিটি এতে ব্যবহার করুন pytest:

pytest tests/my-directory

একটি একক টেস্ট ফাইল / মডিউলতে পরীক্ষা চালান

পরীক্ষায় পূর্ণ একটি ফাইল চালাতে, ফাইলটিকে প্যারামিটার হিসাবে আপেক্ষিক পথের সাথে তালিকাবদ্ধ করুন pytest:

pytest tests/my-directory/test_demo.py

একটি একক পরীক্ষার ফাংশন চালান

একটি একক পরীক্ষার ক্রিয়াকলাপ চালাতে, যোগ করুন ::এবং পরীক্ষার ফাংশনটির নাম:

pytest -v tests/my-directory/test_demo.py::test_specific_function

-v ব্যবহৃত হয় যাতে আপনি দেখতে পারেন কোন ফাংশনটি চালিত হয়েছিল।

একটি একক টেস্ট ক্লাস চালান

কেবল একটি ক্লাস চালানোর জন্য, যেমন আমরা ফাংশনগুলি দিয়েছিলাম এবং সংযুক্ত করি ::, তারপরে ফাইলের প্যারামিটারে ক্লাসের নাম:

pytest -v tests/my-directory/test_demo.py::TestClassName

একটি টেস্ট ক্লাসের একক টেস্ট পদ্ধতি চালান

আপনি যদি একটি পরীক্ষার সমস্ত ক্লাস চালাতে না চান, কেবল একটি পদ্ধতি, কেবল একটি ::এবং পদ্ধতির নাম যুক্ত করুন:

pytest -v tests/my-directory/test_demo.py::TestClassName::test_specific_method

পরীক্ষার নামের ভিত্তিতে টেস্টের একটি সেট চালান

-kবিকল্পটি পরীক্ষা পরীক্ষা নামের একটি সাবস্ট্রিং যেমন অভিব্যক্তি দ্বারা নির্দিষ্ট নির্দিষ্ট নাম আছে যা চালানোর জন্য একটি অভিব্যক্তি মধ্যে পাস করতে সক্ষম করে। এটা ব্যবহার করা সম্ভব এবং , বা , এবং না জটিল এক্সপ্রেশন তৈরি করুন।

উদাহরণস্বরূপ, সমস্ত ফাংশন পরিচালনা করতে যা তাদের নামে _রেজ করেছে:

pytest -v -k _raises

0

সম্ভবত pytest_collect_file()হুক ব্যবহার করে আপনি কোনও .txt.yamlফাইলের বিষয়বস্তু বিশ্লেষণ করতে পারেন যেখানে পরীক্ষাগুলি আপনার পছন্দমতো নির্দিষ্ট করা আছে এবং এগুলি পাইস্টেস্ট কোরটিতে ফিরিয়ে দিতে পারে।

পাইস্টেস্ট ডকুমেন্টেশনে একটি দুর্দান্ত উদাহরণ দেখানো হয়েছে । আমার মনে হয় আপনি যা খুঁজছেন


0

এখানে একটি সম্ভাব্য আংশিক উত্তর, কারণ এটি কেবলমাত্র স্ক্রিপ্টগুলির মধ্যে পৃথক পরীক্ষা নয়, কেবলমাত্র পরীক্ষার স্ক্রিপ্টগুলি নির্বাচন করার অনুমতি দেয়।

এবং এটি আমার লিগ্যাসি সামঞ্জস্যতা মোড বনাম unittestস্ক্রিপ্টগুলি ব্যবহার করেও সীমাবদ্ধ , সুতরাং গ্যারান্টি না দিয়ে এটি দেশীয় পাইস্টের সাথে কাজ করবে।

এখানে যায়:

  1. একটি নতুন একনায়ক তৈরি করুন, বলুন subset_tests_directory
  2. ln -s tests_directory/foo.py
  3. ln -s tests_directory/bar.py

  4. যেগুলি আমদানি করে ফাইলগুলি অনুমান করে সেগুলি সম্পর্কে সতর্ক থাকুন test_directory। আমাকে তাদের মধ্যে বেশিরভাগটি দৌড়ানোর মাধ্যমে python foo.py, প্রয়োজন থেকে subset_tests_directoryসংশোধন করে এবং সংশোধন করতে হয়েছিল।

  5. একবার পরীক্ষার স্ক্রিপ্টগুলি ঠিক cd subset_tests_directoryএবং pytestসেখানে কার্যকরভাবে কার্যকর করা হয়। পাইয়েস্ট কেবল এটির স্ক্রিপ্টগুলি দেখবে।

আরেকটি সম্ভাবনা আপনার বর্তমান পরীক্ষা ডিরেক্টরি মধ্যে symlinking হয়, যেমন বলে ln -s foo.py subset_foo.pyতারপর pytest subset*.py। এটি আপনার আমদানিগুলি সামঞ্জস্য করার প্রয়োজন এড়াবে, তবে আপনি সিমলিংকগুলি সরিয়ে না দেওয়া পর্যন্ত বিষয়গুলিতে বিশৃঙ্খলা হবে। আমার জন্যও কাজ করেছেন।

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