Flask অ্যাপ্লিকেশনে Unit Testing অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি অ্যাপ্লিকেশনের বিভিন্ন অংশের সঠিকতা যাচাই করতে সাহায্য করে। Flask-এর সাথে unittest লাইব্রেরি বা pytest ব্যবহার করা যায়। Flask অ্যাপ্লিকেশনের জন্য unit tests লিখে আপনি সহজেই নিশ্চিত করতে পারেন যে আপনার কোড প্রত্যাশিতভাবে কাজ করছে। এই টিউটোরিয়ালে আমরা Flask অ্যাপ্লিকেশনের জন্য Unit Test তৈরি করার প্রক্রিয়া আলোচনা করব।
১. Flask অ্যাপ্লিকেশনের জন্য Unit Testing
Flask অ্যাপ্লিকেশনের ইউনিট টেস্টিং করতে, Flask-এর test client ব্যবহার করা হয়, যা HTTP রিকোয়েস্ট পাঠাতে এবং রেসপন্স গ্রহণ করতে সাহায্য করে।
ধাপ ১: Flask অ্যাপ্লিকেশন সেটআপ করা
এখানে একটি সাধারণ Flask অ্যাপ্লিকেশন তৈরি করা হয়েছে, যাতে আমরা টেস্ট লিখব:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def home():
return jsonify({"message": "স্বাগতম Flask অ্যাপে!"})
@app.route('/add/<int:num1>/<int:num2>')
def add(num1, num2):
return jsonify({"result": num1 + num2})
if __name__ == '__main__':
app.run(debug=True)
এটি একটি সিম্পল Flask অ্যাপ্লিকেশন, যেখানে:
/রুট একটি JSON রেসপন্স প্রদান করে।/add/<int:num1>/<int:num2>রুট দুটি সংখ্যা যোগ করে রেসপন্স হিসেবে পাঠায়।
২. Unit Test Setup
Flask অ্যাপ্লিকেশনের ইউনিট টেস্ট লেখার জন্য Python এর unittest লাইব্রেরি এবং Flask এর test client ব্যবহার করা হয়।
ধাপ ২: টেস্ট কেস তৈরি করা
unittest লাইব্রেরি ব্যবহার করে Flask অ্যাপ্লিকেশনের জন্য টেস্ট কেস তৈরি করা:
import unittest
from app import app # আপনার Flask অ্যাপ্লিকেশন
class FlaskTestCase(unittest.TestCase):
# অ্যাপ্লিকেশন সেটআপ (টেস্ট কনফিগারেশন)
def setUp(self):
app.config['TESTING'] = True
self.client = app.test_client()
# হোম পেজ টেস্ট
def test_home(self):
response = self.client.get('/')
self.assertEqual(response.status_code, 200) # HTTP স্ট্যাটাস কোড 200 চেক
self.assertEqual(response.json, {"message": "স্বাগতম Flask অ্যাপে!"})
# যোগফল রুট টেস্ট
def test_add(self):
response = self.client.get('/add/5/10')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json, {"result": 15})
# ভুল URL রাউট টেস্ট
def test_invalid_route(self):
response = self.client.get('/invalid')
self.assertEqual(response.status_code, 404) # 404 নট ফাউন্ড চেক
if __name__ == '__main__':
unittest.main()
এখানে:
setUp(): এটি একটি টেস্ট কনফিগারেশন সেটআপ ফাংশন, যা প্রতিটি টেস্টের আগে চালানো হয়। এখানে আমরা Flask অ্যাপ্লিকেশনের test client তৈরি করেছি।test_home(): এটি/রাউটের টেস্ট, যেখানে আমরা রেসপন্সের স্ট্যাটাস কোড এবং JSON রেসপন্স যাচাই করেছি।test_add(): এটি/add/<num1>/<num2>রাউটের টেস্ট, যেখানে দুটি সংখ্যার যোগফল যাচাই করা হয়েছে।test_invalid_route(): এটি একটি টেস্ট যেখানে আমরা একটি ভুল URL রিকোয়েস্ট পাঠাচ্ছি এবং যাচাই করছি যে, 404 স্ট্যাটাস কোড ফিরে আসছে।
৩. Test Run
এখন আপনি আপনার ইউনিট টেস্ট রান করতে পারেন। কমান্ড লাইন থেকে এই কমান্ডটি চালান:
python -m unittest test_app.py
এতে আপনার টেস্ট ফাইলের সব টেস্ট চালানো হবে এবং টেস্টের ফলাফল দেখাবে।
৪. Test Output Example
টেস্ট চালানোর পর আপনি এরকম কিছু আউটপুট দেখতে পারবেন:
..
----------------------------------------------------------------------
Ran 3 tests in 0.002s
OK
এখানে:
- দুটি ডট (..) মানে দুইটি টেস্ট সফল হয়েছে।
- OK মানে সব টেস্ট পাস করেছে।
৫. Flask Testing with pytest
Flask অ্যাপ্লিকেশনে টেস্টিংয়ের জন্য pytest একটি জনপ্রিয় লাইব্রেরি। এটি আরও সহজ এবং শক্তিশালী টেস্টিং অভিজ্ঞতা প্রদান করে। pytest ব্যবহার করতে:
ধাপ ১: pytest ইনস্টল করা
pip install pytest
ধাপ ২: pytest দিয়ে টেস্ট চালানো
pytest দিয়ে টেস্ট চালানোর জন্য টেস্ট ফাইলের নাম হতে হবে test_*.py। এবার, আপনার টেস্ট ফাইল (যেমন test_app.py) রান করতে pytest ব্যবহার করুন:
pytest test_app.py
এতে pytest আপনার টেস্ট ফাইলগুলো অটো ডিসকভারি করবে এবং রান করবে। pytest ব্যবহার করলে আরও উন্নত আউটপুট এবং লজিক্যাল এসার্টস (asserts) পাওয়া যায়।
৬. Flask-এ Mocking ব্যবহার করা
Flask অ্যাপ্লিকেশন টেস্ট করার সময় কখনো কখনো আপনি কিছু বাহ্যিক সিস্টেমের (যেমন ডাটাবেস, API, ইত্যাদি) হুকস বা কল মক (mock) করতে চান, যাতে অ্যাপ্লিকেশন নির্দিষ্ট ডেটার সাথে টেস্ট করা যায়।
উদাহরণ: Flask অ্যাপ্লিকেশন মকিং
from unittest.mock import patch
@app.route('/user')
def get_user():
user = get_user_from_db() # মক করা হবে
return jsonify(user)
# টেস্টে মকিং ব্যবহার
@patch('app.get_user_from_db')
def test_get_user(mock_get_user):
mock_get_user.return_value = {'name': 'John', 'email': 'john@example.com'}
response = self.client.get('/user')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json, {'name': 'John', 'email': 'john@example.com'})
এখানে:
patch()ফাংশন ব্যবহার করে বাহ্যিক ফাংশনget_user_from_dbমক করা হয়েছে।mock_get_user.return_valueদিয়ে মক ফাংশনের রিটার্ন ভ্যালু সেট করা হয়েছে।
Flask অ্যাপ্লিকেশনটির ইউনিট টেস্ট তৈরি করা খুবই গুরুত্বপূর্ণ এবং Flask সহজেই unittest বা pytest সহ টেস্ট লেখার সমর্থন প্রদান করে। Request এবং Response এর ভ্যালিডেশন, ডাটাবেসের সঙ্গে কাজ করার সময়, এবং API রেসপন্স যাচাই করার জন্য ইউনিট টেস্টিং একটি অপরিহার্য অংশ। Flask অ্যাপ্লিকেশনের জন্য টেস্টিং না করলে পরে সমস্যা হতে পারে, তবে টেস্টিং এর মাধ্যমে অ্যাপ্লিকেশনটির স্থায়িত্ব এবং নির্ভরযোগ্যতা বৃদ্ধি করা যায়।
Read more