SQLAlchemy তে Unit Testing করতে হলে কিছু নির্দিষ্ট কনফিগারেশন এবং প্রস্তুতি নিতে হয় যাতে টেস্টিং কার্যক্রম সঠিকভাবে পরিচালনা করা যায়। এখানে SQLAlchemy তে Unit Testing এর জন্য কনফিগারেশন করার প্রক্রিয়া বিস্তারিতভাবে আলোচনা করা হবে।
SQLAlchemy তে Unit Testing কনফিগার করার প্রক্রিয়া
1. Test Database তৈরি করা
Unit Testing এর জন্য একটি আলাদা ডাটাবেস তৈরি করা প্রয়োজন, যা টেস্টিং চলাকালীন ডাটাবেসে কোনো স্থায়ী পরিবর্তন না এনে পুনরায় পরীক্ষাগুলি চালাতে সাহায্য করবে। সাধারণত, টেস্ট ডাটাবেসের জন্য একটি ইন-মেমরি SQLite ব্যবহার করা হয়। এটি দ্রুত এবং কমপ্লেক্স কনফিগারেশন ছাড়াই কাজ করে।
2. SQLAlchemy Session এবং Engine কনফিগারেশন
SQLAlchemy এর জন্য আলাদা একটি engine এবং session তৈরি করতে হবে যা টেস্টিং চলাকালীন ব্যবহার করা হবে।
import pytest
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from myapp.models import Base
# টেস্ট ডাটাবেসের জন্য একটি ইন-মেমরি SQLite ব্যবহার করা
TEST_DATABASE_URL = "sqlite:///:memory:"
# টেস্ট ডাটাবেসে ইঞ্জিন তৈরি করা
engine = create_engine(TEST_DATABASE_URL, echo=True)
# সেশন তৈরি করার জন্য sessionmaker ব্যবহার করা
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# টেস্ট চলাকালীন টেবিল তৈরি করার জন্য
def init_db():
Base.metadata.create_all(bind=engine)
# টেস্টের জন্য ডাটাবেস ইনিশিয়ালাইজেশন
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
3. Test Fixture তৈরি করা
Test Fixture গুলি ব্যবহার করে টেস্টের জন্য ডাটাবেসের প্রাথমিক কনফিগারেশন করা হয়। pytest এর মাধ্যমে এই ফিক্সচারগুলো সহজেই পরিচালনা করা যায়।
# pytest এর fixture ব্যবহার করে ডাটাবেস তৈরি করা
@pytest.fixture(scope="module")
def test_db():
# টেস্ট ডাটাবেস ইনিশিয়ালাইজ করা
init_db()
db = SessionLocal()
try:
yield db
finally:
db.close()
4. টেস্ট ফাংশন তৈরি করা
এখন আপনি যেকোনো টেস্ট ফাংশন লিখতে পারেন যেখানে আপনি সৃষ্ট ডাটাবেসের সাথে যোগাযোগ করবেন। এখানে test_db ফিক্সচারকে ব্যবহার করা হচ্ছে।
from myapp.models import User
def test_create_user(test_db):
# একটি নতুন ইউজার তৈরি করা
new_user = User(name="Test User", email="testuser@example.com")
test_db.add(new_user)
test_db.commit()
# ডাটাবেসে সঠিকভাবে ইউজারটি সংরক্ষিত হয়েছে কিনা তা পরীক্ষা করা
user = test_db.query(User).filter_by(email="testuser@example.com").first()
assert user is not None
assert user.name == "Test User"
5. Teardown এবং Cleanup
টেস্ট শেষ হওয়ার পর ডাটাবেস থেকে সমস্ত ডেটা ক্লিয়ার করা গুরুত্বপূর্ণ যাতে পরবর্তী টেস্টে কোন সমস্যা না হয়। এই কাজটি ফিক্সচারে করতে পারেন।
@pytest.fixture(scope="function", autouse=True)
def cleanup(test_db):
# টেস্টের পরে ডাটাবেসের সমস্ত পরিবর্তন রিভার্ট করা
yield
test_db.rollback()
6. pytest এর মাধ্যমে টেস্ট রান করা
এখন আপনি pytest ব্যবহার করে আপনার টেস্টগুলি রান করতে পারবেন।
$ pytest
এটি সমস্ত টেস্ট চালাবে এবং ফলাফল দেখাবে।
সারাংশ
SQLAlchemy তে Unit Testing করতে হলে, আপনাকে টেস্টের জন্য আলাদা একটি ডাটাবেস ইঞ্জিন এবং সেশন কনফিগার করতে হবে। তারপরে, টেস্ট ফিক্সচারের মাধ্যমে ডাটাবেসে ডাটা ইনসার্ট, আপডেট বা ডিলিট করে সঠিকভাবে পরীক্ষা করতে হবে। pytest ব্যবহার করে এই টেস্টগুলিকে চালানো সম্ভব এবং টেস্টের পরে ডাটাবেসকে রিভার্স (rollback) করা উচিত যাতে পরবর্তী টেস্টে কোনো সমস্যা না হয়।