Flask-এ Test Cases লেখার জন্য Flask-Testing একটি শক্তিশালী এক্সটেনশন। এটি Flask অ্যাপ্লিকেশনের ইউনিট টেস্ট সহজে লিখতে এবং পরিচালনা করতে সহায়ক। Flask-Testing, unittest এবং pytest এর সাথে ইন্টিগ্রেটেড থাকে, যা Flask অ্যাপ্লিকেশনটির জন্য একাধিক টেস্টিং ফিচার প্রদান করে।
১. Flask-Testing ইনস্টল করা
প্রথমে Flask-Testing ইনস্টল করতে হবে। এটি Flask অ্যাপ্লিকেশনের টেস্টিং সমর্থন করে, এবং আপনাকে টেস্ট লেখার সময় উপকারী সহায়তা দেয়।
pip install flask-testing
২. Flask Testing Setup
ধাপ ১: Flask অ্যাপ্লিকেশন সেটআপ
এখন একটি সাধারণ Flask অ্যাপ্লিকেশন তৈরি করুন যাতে আমরা টেস্টিং করতে পারি।
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "স্বাগতম Flask অ্যাপে!"
if __name__ == "__main__":
app.run(debug=True)
এই অ্যাপ্লিকেশনে একটি হোম পেজ রয়েছে, যেটি স্বাগতম বার্তা রিটার্ন করবে।
ধাপ ২: Flask-Testing এবং Unittest এর সাহায্যে টেস্ট কেস লেখা
Flask-Testing এবং Python এর unittest ব্যবহার করে Flask অ্যাপ্লিকেশনের জন্য টেস্ট কেস লেখা যায়। নিচে একটি উদাহরণ দেওয়া হলো।
import unittest
from flask import Flask
from flask_testing import TestCase
# Flask অ্যাপ তৈরি করা
app = Flask(__name__)
@app.route('/')
def home():
return "স্বাগতম Flask অ্যাপে!"
# Flask TestCase তৈরি করা
class TestFlaskApp(TestCase):
def create_app(self):
app.config['TESTING'] = True
return app
def test_home(self):
response = self.client.get('/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data.decode('utf-8'), "স্বাগতম Flask অ্যাপে!")
এখানে:
TestCase: এটি Flask-Testing থেকে ইনহেরিট করা হয়েছে যা Flask অ্যাপ্লিকেশন টেস্ট করতে ব্যবহৃত হয়।create_app(): এটি Flask অ্যাপ্লিকেশন সেটআপ করে, যেখানে টেস্টিং কনফিগারেশন সক্রিয় করা হয়।test_home(): এটি home রাউটের জন্য টেস্ট কেস। এখানে:self.client.get('/'): HTTP GET রিকোয়েস্ট করা হচ্ছে।self.assertEqual(): এটি রেসপন্সের স্ট্যাটাস কোড এবং কনটেন্ট চেক করতে ব্যবহৃত হচ্ছে।
৩. Flask-Testing এর সাহায্যে আরও Test Cases লেখা
Flask অ্যাপ্লিকেশনের আরও রাউট এবং ফিচারের জন্য টেস্ট কেস লেখা যাক।
উদাহরণ: POST রিকোয়েস্ট টেস্টিং
@app.route("/login", methods=["POST"])
def login():
username = request.form.get('username')
password = request.form.get('password')
if username == 'admin' and password == 'password123':
return "লগইন সফল", 200
return "অবৈধ লগইন", 401
class TestFlaskApp(TestCase):
def create_app(self):
app.config['TESTING'] = True
return app
def test_post_login(self):
response = self.client.post('/login', data=dict(username='admin', password='password123'))
self.assertEqual(response.status_code, 200)
self.assertIn(b'লগইন সফল', response.data)
def test_invalid_login(self):
response = self.client.post('/login', data=dict(username='admin', password='wrongpassword'))
self.assertEqual(response.status_code, 401)
self.assertIn(b'অবৈধ লগইন', response.data)
এখানে:
self.client.post(): POST রিকোয়েস্ট পাঠানো হচ্ছে।self.assertIn(): রেসপন্সের কন্টেন্ট চেক করা হচ্ছে যে এটি সঠিক বার্তা ধারণ করে কিনা।
৪. Test Database Setup
ডাটাবেস ব্যবহারের ক্ষেত্রে, Flask-Testing আপনাকে টেস্ট ডাটাবেসে কাজ করতে সহায়ক একটি setUp() এবং tearDown() ফাংশন সরবরাহ করে।
উদাহরণ: টেস্ট ডাটাবেস ব্যবহার
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:' # ইন-মেমরি ডাটাবেস
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
class TestFlaskApp(TestCase):
def create_app(self):
app.config['TESTING'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
return app
def setUp(self):
# টেস্ট ডাটাবেস ইনিশিয়ালাইজ করা
db.create_all()
def tearDown(self):
# টেস্টের পর ডাটাবেস ডিলিট করা
db.session.remove()
db.drop_all()
def test_user_creation(self):
new_user = User(username="testuser")
db.session.add(new_user)
db.session.commit()
user = User.query.filter_by(username="testuser").first()
self.assertIsNotNone(user)
self.assertEqual(user.username, "testuser")
এখানে:
db.create_all(): টেস্ট ডাটাবেস তৈরি করে।db.session.remove()এবংdb.drop_all(): টেস্ট শেষ হলে ডাটাবেস পরিষ্কার করে।
৫. Test Cases চালানো
Flask-এ টেস্ট কেস চালানোর জন্য unittest ব্যবহার করা হয়। টেস্ট কেস চালানোর জন্য আপনি টার্মিনালে নিচের কমান্ডটি ব্যবহার করতে পারেন:
python -m unittest discover
এটি আপনার অ্যাপ্লিকেশনের সমস্ত টেস্ট ফাইল এবং টেস্ট কেস খুঁজে বের করবে এবং চালাবে।
৬. Flask-Testing এর সুবিধা
- Test Client: Flask-Testing আপনাকে
self.client(Flask test client) প্রদান করে, যা HTTP রিকোয়েস্টগুলো তৈরি করতে এবং টেস্ট করতে ব্যবহার করা হয়। - Integrated with Unittest: Flask-Testing সহজেই Python-এর unittest মডিউলের সাথে কাজ করে, যাতে টেস্টিং আরও সুবিধাজনক হয়।
- Database Testing: ইন-মেমরি ডাটাবেস ব্যবহার করে Flask অ্যাপ্লিকেশনের ডাটাবেস ফিচারও টেস্ট করা যায়।
Flask-Testing একটি শক্তিশালী টুল যা Flask অ্যাপ্লিকেশনের জন্য ইউনিট টেস্ট লেখার প্রক্রিয়াকে সহজ এবং কার্যকরী করে তোলে। আপনি unittest এবং Flask-Testing ব্যবহার করে আপনার অ্যাপ্লিকেশনের বিভিন্ন রাউট, ফর্ম, ডাটাবেস ইন্টারঅ্যাকশন এবং অন্যান্য ফিচারগুলোর টেস্ট কেস লিখে তা পরিচালনা করতে পারেন। Flask অ্যাপ্লিকেশন টেস্ট করার মাধ্যমে আপনি বাগ এবং সমস্যা কমাতে সক্ষম হবেন, যা অ্যাপ্লিকেশনের কোয়ালিটি উন্নত করতে সাহায্য করবে।
Read more