এটি কি কনফেস্ট.পিটির সঠিক ব্যবহার?
হ্যাঁ তাই হয়। ফিক্সচারগুলি এর সম্ভাব্য এবং সাধারণ ব্যবহার conftest.py
। আপনি যে ফিক্সচারগুলি নির্ধারণ করবেন তা আপনার পরীক্ষার স্যুটের সমস্ত পরীক্ষার মধ্যে ভাগ করা হবে। তবে, মূলটিতে ফিক্সচারগুলি সংজ্ঞায়িত conftest.py
করা অকেজো হতে পারে এবং যদি এই ধরনের ফিক্সচারগুলি সমস্ত পরীক্ষার দ্বারা ব্যবহার না করা হয় তবে এটি পরীক্ষার গতি কমিয়ে দেয়।
এর অন্যান্য ব্যবহার আছে কি?
হ্যাঁ এটা করে.
ফিক্সচার : পরীক্ষার দ্বারা ব্যবহৃত স্থির তথ্যের জন্য ফিক্সচারগুলি সংজ্ঞায়িত করুন। অন্যথায় সুনির্দিষ্ট না করা হলে এই ডেটা স্যুটে সমস্ত পরীক্ষা দ্বারা অ্যাক্সেস করা যেতে পারে। এটি ডেটা পাশাপাশি মডিউলগুলির সহায়ক হতে পারে যা সমস্ত পরীক্ষায় পাস করা হবে।
বাহ্যিক প্লাগইন লোডিং : conftest.py
বহিঃস্থ প্লাগইন বা মডিউল আমদানি করতে ব্যবহৃত হয়। নিম্নলিখিত গ্লোবাল ভেরিয়েবলটি সংজ্ঞায়িত করে পাইস্টেষ্ট মডিউলটি লোড করবে এবং এটি এর পরীক্ষার জন্য উপলব্ধ করবে। প্লাগইনগুলি সাধারণত আপনার প্রকল্পে বা অন্যান্য মডিউলগুলিতে সংজ্ঞায়িত ফাইল যা আপনার পরীক্ষায় প্রয়োজন হতে পারে। এখানে বর্ণিত হিসাবে আপনি পূর্বনির্ধারিত প্লাগইনগুলির একটি সেটও লোড করতে পারেন ।
pytest_plugins = "someapp.someplugin"
হুকস : আপনি সেট আপ এবং টিয়ারডাউন পদ্ধতি এবং আপনার পরীক্ষার উন্নতির জন্য আরও অনেক কিছু যেমন হুক নির্দিষ্ট করতে পারেন। উপলব্ধ হুকগুলির একটি সেট জন্য, এখানে পড়ুন । উদাহরণ:
def pytest_runtest_setup(item):
""" called before ``pytest_runtest_call(item). """
#do some stuff`
পরীক্ষার মূল পাথ : এটি কিছুটা গোপন বৈশিষ্ট্য। সংজ্ঞায়িত করে conftest.py
আপনার মূল পাথ তোমাকে থাকতে দিবে pytest
উল্লেখ না করে আপনার আবেদন মডিউল স্বীকৃতি PYTHONPATH
। ব্যাকগ্রাউন্ডে, পাইস্টেস্ট sys.path
সমস্ত মূল মডেলগুলি অন্তর্ভুক্ত করে আপনার পরিবর্তিত করে যা মূল পথ থেকে পাওয়া যায়।
আমি কি একাধিক কনটেস্ট.পি ফাইল রাখতে পারি?
হ্যাঁ আপনি করতে পারেন এবং যদি আপনার পরীক্ষার কাঠামোটি কিছুটা জটিল হয় তবে তা দৃ strongly়ভাবে সুপারিশ করা হয়। conftest.py
ফাইলগুলির ডিরেক্টরি করার সুযোগ রয়েছে। সুতরাং, লক্ষ্যযুক্ত ফিক্সচার এবং সহায়তাকারী তৈরি করা ভাল অনুশীলন।
আমি কখন এটা করতে চাই? উদাহরণগুলি প্রশংসা করা হবে।
বেশ কয়েকটি কেস ফিট করতে পারে:
নির্দিষ্ট গ্রুপের পরীক্ষার জন্য সরঞ্জাম বা হুকের সেট তৈরি করা ।
রুট / গেলিক ভাষার / conftest.py
def pytest_runtest_setup(item):
print("I am mod")
#do some stuff
test root/mod2/test.py will NOT produce "I am mod"
কিছু পরীক্ষার জন্য ফিক্সচারের সেট লোড করা হচ্ছে তবে অন্যদের জন্য নয়।
রুট / গেলিক ভাষার / conftest.py
@pytest.fixture()
def fixture():
return "some stuff"
রুট / mod2 / conftest.py
@pytest.fixture()
def fixture():
return "some other stuff"
রুট / mod2 / test.py
def test(fixture):
print(fixture)
"কিছু অন্যান্য জিনিস" মুদ্রণ করবে।
ওভাররাইডিং হুকগুলি মূল থেকে উত্তরাধিকার সূত্রে প্রাপ্ত conftest.py
।
রুট / গেলিক ভাষার / conftest.py
def pytest_runtest_setup(item):
print("I am mod")
#do some stuff
রুট / conftest.py
def pytest_runtest_setup(item):
print("I am root")
#do some stuff
ভিতরে কোনও পরীক্ষা চালিয়ে root/mod
, কেবল "আমি মোড" মুদ্রিত হয়।
আপনি conftest.py
এখানে আরও পড়তে পারেন ।
সম্পাদনা করুন:
আমার যদি সরল-পুরাতন সাহায্যকারী ফাংশনগুলির প্রয়োজন হয় বিভিন্ন মডিউলটিতে বেশ কয়েকটি পরীক্ষা থেকে কল করার জন্য - যদি আমি সেগুলি একটি কন্টেস্ট.পিতে রাখি তবে সেগুলি কি আমার কাছে উপস্থিত হবে? বা আমি কি কেবল তাদের হেল্পার্স.পি মডিউলে রেখে এটিকে আমদানি করে আমার পরীক্ষার মডিউলগুলিতে ব্যবহার করব?
আপনি conftest.py
আপনার সাহায্যকারীদের সংজ্ঞায়িত করতে ব্যবহার করতে পারেন । যাইহোক, আপনার সাধারণ অভ্যাসটি অনুসরণ করা উচিত। হেল্পার্স কমপক্ষে ফিক্সচার হিসাবে ব্যবহার করা যেতে পারে pytest
। উদাহরণস্বরূপ আমার পরীক্ষাগুলিতে আমার কাছে একটি মক রেডিস হেল্পার রয়েছে যা আমি এইভাবে আমার পরীক্ষাগুলিতে ইনজেক্ট করি।
রুট / সাহায্যকারী / redis / redis.py
@pytest.fixture
def mock_redis():
return MockRedis()
রুট / পরীক্ষার / কাপড় / conftest.py
pytest_plugin="helper.redis.redis"
রুট / পরীক্ষার / কাপড় / test.py
def test(mock_redis):
print(mock_redis.get('stuff'))
এটি একটি পরীক্ষা মডিউল হবে যা আপনি নির্দ্বিধায় আপনার পরীক্ষায় আমদানি করতে পারেন। উল্লেখ্য আপনি সম্ভাব্য নাম পারে যে redis.py
যেমন conftest.py
যদি আপনার মডিউল redis
আরো পরীক্ষা রয়েছে। তবে অস্পষ্টতার কারণে সেই অনুশীলনকে নিরুৎসাহিত করা হয়।
আপনি যদি ব্যবহার করতে চান তবে আপনি conftest.py
সহজেই সেই সহায়কটিকে আপনার মূলের মধ্যে রাখতে পারেন conftest.py
এবং প্রয়োজনে এটি ইনজেকশন করতে পারেন।
রুট / পরীক্ষার / conftest.py
@pytest.fixture
def mock_redis():
return MockRedis()
রুট / পরীক্ষার / কাপড় / test.py
def test(mock_redis):
print(mock_redis.get(stuff))
আর একটি জিনিস আপনি যা করতে পারেন তা হ'ল একটি ইনস্টলযোগ্য প্লাগইন লিখুন। সেক্ষেত্রে আপনার সহায়কটি যে কোনও জায়গায় লেখা যেতে পারে তবে আপনার এবং অন্যান্য সম্ভাব্য পরীক্ষার ফ্রেমওয়ার্কগুলিতে ইনস্টল করার জন্য এন্ট্রি পয়েন্টটি নির্ধারণ করা দরকার। এই দেখুন ।
আপনি যদি ফিক্সচারগুলি ব্যবহার করতে না চান তবে আপনি অবশ্যই একটি সাধারণ সহায়ককে সংজ্ঞায়িত করতে পারেন এবং যেখানে প্রয়োজন সেখানে কেবল সরল পুরাতন আমদানিটি ব্যবহার করতে পারেন।
রুট / পরীক্ষার / সাহায্যকারী / redis.py
class MockRedis():
# stuff
রুট / পরীক্ষার / কাপড় / test.py
from helper.redis import MockRedis
def test():
print(MockRedis().get(stuff))
তবে, এখানে আপনার পাথ নিয়ে সমস্যা হতে পারে যেহেতু মডিউলটি পরীক্ষার চাইল্ড ফোল্ডারে নেই। __init__.py
আপনার সাহায্যকারীকে একটি যোগ করে আপনার এটিকে (পরীক্ষিত নয়) কাটিয়ে উঠতে সক্ষম হওয়া উচিত
রুট / পরীক্ষার / সাহায্যকারী / __ init__.py
from .redis import MockRedis
বা কেবল আপনার সহায়ক সহায়ক মডিউল যোগ করুন PYTHONPATH
।
It seems great. However, I feel the documentation could be better.