টেস্টিং সফটওয়্যার ডেভেলপমেন্টের একটি অপরিহার্য অংশ। এটা তাড়াতাড়ি বাগ ধরতে সাহায্য করে এবং লাইনের নিচের ত্রুটির সম্ভাবনা কমায়।
Pytest হল Python-এর জন্য সবচেয়ে জনপ্রিয় টেস্টিং ফ্রেমওয়ার্কগুলির মধ্যে একটি। এটি আপনাকে ছোট এবং পঠনযোগ্য পরীক্ষা লিখতে দেয় যা আপনার অ্যাপ্লিকেশন বৃদ্ধির সাথে সাথে স্কেল করতে পারে। আপনার Python কোড দিয়ে Pytest কিভাবে সেট আপ করবেন এবং ব্যবহার করবেন তা জানুন।
দিনের মেকইউজের ভিডিও কন্টেন্টের সাথে চালিয়ে যেতে স্ক্রোল করুন
Pytest সেট আপ করা হচ্ছে
Pytest ইনস্টল করার আগে, এটি করা ভাল একটি ভার্চুয়াল পরিবেশ তৈরি করুন আপনার পরীক্ষার পরিবেশকে বিচ্ছিন্ন করতে, যাতে আপনি অন্যান্য প্যাকেজ এবং নির্ভরতাগুলির সাথে দ্বন্দ্ব এড়াতে পারেন।
একটি ভার্চুয়াল পরিবেশ তৈরি করতে, Pytest ইনস্টল করার আগে নিম্নলিখিত কমান্ডটি চালান।
python -m venv tests
এটি আপনার বর্তমান ডিরেক্টরিতে পরীক্ষা নামে একটি নতুন ভার্চুয়াল পরিবেশ তৈরি করবে। পরিবেশ সক্রিয় করতে, আপনি যদি লিনাক্স বা ম্যাকে থাকেন তবে এই কমান্ডটি চালান:
source tests/bin/activate
উইন্ডোজের জন্য, এই কমান্ডটি চালান:
tests\Scripts\activate
Pytest ইনস্টল করতে, আপনি আপনার টার্মিনালে এই কমান্ড সহ পাইপ, পাইথন প্যাকেজ ম্যানেজার ব্যবহার করতে পারেন:
pip install pytest
আপনার যদি পিপ না থাকে, চিন্তা করবেন না; তুমি পারবে উইন্ডোজ, ম্যাক এবং লিনাক্সে পিপ ইনস্টল করুন .
আপনি Pytest সঠিকভাবে ইনস্টল করেছেন কিনা তা পরীক্ষা করতে নিম্নলিখিত কমান্ডটি চালান।
এই ডিভাইসটি সমর্থিত নাও হতে পারে
pytest --version
এটি ইনস্টল করা সংস্করণ নম্বর ফেরত দেওয়া উচিত।
আপনার প্রথম টেস্ট তৈরি করা হচ্ছে
নিম্নলিখিত ফাংশনটি বিবেচনা করুন যা দুটি সংখ্যা যোগ করে এবং ফলাফল প্রদান করে।
def add_numbers(a, b):
return a + b
বেশ কিছু জিনিস এই ফাংশন সঙ্গে ভুল হতে পারে. উদাহরণস্বরূপ, বিবেচনা করুন যদি আপনি ফাংশনটিকে অ-সংখ্যাসূচক মান যেমন None বা টাইপ স্ট্রিং এর মান সহ কল করেন তাহলে কি হবে। এগুলি এমন কিছু সম্ভাব্য এজ কেস যা ফাংশনটি ব্যর্থ হতে পারে।
আপনার লেখা প্রথম পরীক্ষাগুলির মধ্যে একটি পরীক্ষা করা উচিত যে ফাংশনটি প্রত্যাশিত ফলাফল প্রদান করে কিনা। এটি করার জন্য, আপনি প্রত্যাশিত আউটপুটের সাথে ফাংশনের প্রকৃত আউটপুট তুলনা করতে assert কীওয়ার্ড ব্যবহার করতে পারেন। add_numbers ফাংশনের ক্ষেত্রে, টেস্ট ফাংশনটি দেখতে এরকম হতে পারে:
def test_add_numbers():
assert add_numbers(2, 3) == 5
assert add_numbers(-1, 1) == 0
assert add_numbers(0, 0) == 0
এই টেস্ট ফাংশনে তিনটি অ্যাসার্ট স্টেটমেন্ট রয়েছে, যার প্রতিটি একটি প্রত্যাশিত মানের সাথে add_numbers ফাংশনের আউটপুট তুলনা করে। প্রথম পরীক্ষা চেক করে যে 2 এবং 3 যোগ করলে 5 রিটার্ন হয়, দ্বিতীয় টেস্ট চেক করে যে -1 এবং 1 যোগ করলে 0 রিটার্ন হয় এবং তৃতীয় টেস্ট চেক করে যে 0 এবং 0 যোগ করলে 0 রিটার্ন হয়।
কিভাবে Pytest দিয়ে পরীক্ষা চালাবেন
আপনি আপনার পরীক্ষাগুলি লেখার পরে, পরবর্তী ধাপ হল সেগুলি চালানো। Pytest এর সাথে এটি করতে, আপনার পরীক্ষা ফাইল ধারণকারী ডিরেক্টরিতে নেভিগেট করুন এবং pytest কমান্ডটি চালান:
pytest
সবকিছু প্রত্যাশিতভাবে কাজ করলে, আপনি একটি বার্তা দেখতে পাবেন যা নির্দেশ করে যে সমস্ত পরীক্ষা সফলভাবে পাস হয়েছে। যাইহোক, যদি কোনো দাবী ব্যর্থ হয়, Pytest একটি ত্রুটি রিপোর্ট করবে এবং আপনাকে ইনপুট মান দেখাবে যা ব্যর্থতার কারণ।
উদাহরণস্বরূপ, ধরা যাক আপনি add_numbers ফাংশনের জন্য নিম্নলিখিত পরীক্ষা ফাংশনটি চালিয়েছেন:
def test_add_numbers():
assert add_numbers(2, 3) == 6
assert add_numbers(-1, 1) == 0
assert add_numbers(0, 0) == 0
প্রথম দাবিটি ব্যর্থ হবে কারণ প্রত্যাশিত মানটি ছিল 6, কিন্তু প্রকৃত মান ছিল 5 (2 এবং 3 এর যোগফল)। Pytest নিম্নলিখিত বার্তা ফেরত দেবে:
এই বার্তাটি আপনাকে ইনপুট মানগুলি দেখায় যা মানটি ঘটায় এবং প্রকৃত মানটি কী হওয়া উচিত তাও আপনাকে বলে৷ এটি আপনার কোডের ত্রুটিগুলি দ্রুত সনাক্ত করা এবং ঠিক করা সহজ করে তোলে৷
Pytest.raises ব্যবহার করে ব্যতিক্রম জাহির করা
এখন, add_numbers ফাংশনের এজ কেসগুলির একটি কভার করার জন্য একটি পরীক্ষা লিখি। আপনি যখন ফাংশনে None-এর মতো একটি নন-সংখ্যাসূচক আর্গুমেন্ট পাস করেন, তখন পাইথনের একটি TypeError ব্যতিক্রম উত্থাপন করা উচিত।
আপনি ইতিমধ্যে হতে হবে আপনার পাইথন প্রোগ্রামগুলিতে ব্যতিক্রমগুলি পরিচালনা করা , এবং আপনি পরীক্ষা করতে পারেন যে আপনার কোডটি তাদের সঠিকভাবে উত্থাপন করে।
এটি করার জন্য, আপনার ফাইলে নিম্নলিখিত পরীক্ষা ফাংশনটি অনুলিপি করুন। এটি pytest.raises কনটেক্সট ম্যানেজার ব্যবহার করে যাচাই করে যে add_number ফাংশনটিকে 'None' দিয়ে কল করলে TypeError ব্যতিক্রম হয় কিনা।
import pytest
def test_add_numbers_with_invalid_inputs():
with pytest.raises(TypeError):
add_numbers(None, 2)
তারপর কমান্ড লাইন থেকে Pytest চালান। ব্যতিক্রম উত্থাপিত না হলে, পরীক্ষা ব্যর্থ হবে.
আপনি আরও যেতে পারেন এবং ব্যতিক্রম বার্তার বিশদ বিবরণ পরীক্ষা করতে পারেন। প্রসঙ্গ পরিচালক বিবরণ সহ একটি ExceptionInfo অবজেক্ট তৈরি করে।
কিভাবে অ্যাডোব মিডিয়া এনকোডার ব্যবহার করবেন
উদাহরণস্বরূপ, এই পরীক্ষা ফাংশনে, ব্যতিক্রম বার্তাটি এইভাবে জাহির করুন:
def test_add_numbers_with_invalid_inputs():
with pytest.raises(TypeError) as exc_info:
add_numbers(None, 2)
assert exc_info.value.args[0] == "unsupported operand type(s) for +: 'NoneType' and 'int'"
যদি বার্তাটি পরীক্ষার একটির সাথে মেলে না, Pytest একটি ব্যর্থতা নির্দেশ করবে।
একবারে একাধিক ইনপুট পরীক্ষা করতে প্যারামিটারাইজড টেস্টিং কীভাবে ব্যবহার করবেন
ম্যানুয়ালি এই মত একাধিক ইনপুট সহ একটি ফাংশন কল করার পরিবর্তে:
def test_add_numbers():
assert add_numbers(2, 3) == 6
assert add_numbers(-1, 1) == 0
assert add_numbers(0, 0) == 0
Pytest একটি প্যারামিটারাইজড টেস্টিং বৈশিষ্ট্য প্রদান করে যা আপনাকে একই জিনিস আরও সহজে করতে দেয়। আপনি উপরের পরীক্ষা ফাংশনটি কীভাবে পুনরায় লিখতে পারেন তা এখানে:
import pytest
@pytest.mark.parametrize("a,b,expected", [
(2, 3, 5),
(-1, 1, 0),
(0, 0, 0)
])
def test_add_numbers(a, b, expected):
assert add_numbers(a, b) == expected
কিভাবে একাধিক পরীক্ষা চালাবেন
এখন পর্যন্ত, আপনি add_numbers ফাংশনের জন্য শুধুমাত্র দুটি পরীক্ষা লিখেছেন। আরও পরীক্ষা সহ আরও জটিল ফাংশনের জন্য, আপনি তাদের একটি ক্লাসে গোষ্ঠীবদ্ধ করতে চাইতে পারেন।
উদাহরণস্বরূপ, এখানে আপনি কিভাবে অ্যাড ফাংশনের জন্য একটি পরীক্ষা ক্লাস তৈরি করবেন।
class TestAddFunction:
@pytest.mark.parametrize("a, b, expected", [
(2, 3, 5),
(-1, 1, 0),
(0, 0, 0),
])
def test_addition_with_numbers(self, a, b, expected):
assert add_numbers(a, b) == expected
def test_add_numbers_with_invalid_inputs(self):
with pytest.raises(TypeError) as exc_info:
add_numbers(None, 2)
assert exc_info.value.args[0] == "unsupported operand type(s) for +: 'NoneType' and 'int'"
মনে রাখবেন যে আপনাকে 'Test' এর সাথে ক্লাসের নামের উপসর্গ দিতে হবে যাতে Pytest এটিকে একটি পরীক্ষার ক্লাস হিসাবে চিহ্নিত করতে পারে এবং এটি চালাতে পারে।
Pytest এর আরও অনেক বৈশিষ্ট্য রয়েছে
Pytest ব্যবহার করে, আপনি স্বয়ংক্রিয়ভাবে যাচাই করতে পারেন আপনার কোড আপনার প্রত্যাশা অনুযায়ী কাজ করে। Pytest অন্যান্য অনেক বৈশিষ্ট্য অফার করে যেমন ফিক্সচার যা আপনাকে আপনার পরীক্ষার ফাংশনগুলিতে মেটাডেটা সেট আপ করার জন্য পরীক্ষার ডেটা এবং মার্কগুলি সেট আপ এবং ছিঁড়ে ফেলার অনুমতি দেয়।
উপরন্তু, আপনি আপনার CI পাইপলাইনে Pytest সংহত করতে পারেন এবং যখন আপনি আপনার কোড পরিবর্তন করেন তখন স্বয়ংক্রিয়ভাবে এবং ক্রমাগত পরীক্ষা চালানো শুরু করতে পারেন।