শূন্য থেকে অ্যাডভান্সড টেস্টিংফ্রি
পাইটেস্ট
প্রথম assert থেকে শুরু করে fixture, parametrize, mocking, coverage আর নিজের plugin লেখা পর্যন্ত — পাইথন কোডের টেস্ট লেখার পুরো পথ। প্রতিটি অধ্যায়ে ছয় ধাপ আর সহজ থেকে কঠিন দশটি প্রশ্নের কুইজ।
প্রতিটি অধ্যায়ের ছয় ধাপ
- 1সমস্যা
- 2বোঝা
- 3উদাহরণ
- 4অনুমান
- 5নিজে করা
- 6কঠিন করা
- 00টেস্ট লেখার আগে — আসলে কী কী লাগেটেস্ট কোড লেখার আগের চিন্তাটুকু: অস্পষ্ট চাহিদাকে সুনির্দিষ্ট চুক্তিতে রূপ দেওয়া, কোডকে টেস্টযোগ্য করা, সীমানাসহ কেস বাছাই, কোড না চালিয়ে প্রত্যাশিত উত্তর জানা, আর কী টেস্ট করবেন না — সবই সাধারণ পাইথন ও assert দিয়ে।50 মিনিট১০টি প্রশ্ন
- 01পাইটেস্ট ইনস্টল ও প্রথম টেস্টহাতে চালিয়ে দেখা কেন যথেষ্ট নয়, খালি assert কেন প্রায় কিছুই বলে না, আর pytest ইনস্টল করে প্রথম টেস্ট ফাইল লেখা ও চালানো। ডট, সারাংশ লাইন, -q, -v আর exit code পড়াসহ।40 মিনিট১০টি প্রশ্ন
- 02assert আর ব্যর্থতার রিপোর্ট পড়াpytest কীভাবে একটি সাধারণ assert-এর ভেতরের মান দেখায়, ব্যর্থতার রিপোর্ট লাইন ধরে ধরে কীভাবে পড়তে হয়, আর কোন তুলনাটি লিখলে রিপোর্ট সবচেয়ে বেশি কথা বলে।45 মিনিট১০টি প্রশ্ন
- 03টেস্ট খুঁজে পাওয়া আর চালানো — pytest কোনটি চালায়, আর কীভাবে বাছবেনpytest কোন ফাইল, ফাংশন আর ক্লাসকে টেস্ট ধরে, src/ আর tests/ বিন্যাসে কোড import করা, node ID, আর -k, -x, --lf, --ff, --co দিয়ে ঠিক যা দরকার তা চালানো।45 মিনিট১০টি প্রশ্ন
- 04ত্রুটির টেস্ট — pytest.raisesত্রুটিও আচরণ, তাই সেটিরও টেস্ট দরকার। pytest.raises, DID NOT RAISE, সাবক্লাস মেলানো, match= যে আসলে regex, excinfo দিয়ে ধরা ত্রুটি পরীক্ষা, আর with ব্লকের ভেতরে কেবল শেষ লাইনটিই কেন।45 মিনিট১০টি প্রশ্ন
- 05দশমিক সংখ্যা আর pytest.approx — "যথেষ্ট কাছাকাছি" টেস্ট করাকেন 0.1 + 0.2 == 0.3 মিথ্যা, pytest.approx-এর ডিফল্ট সহনশীলতা কত, rel আর abs কখন লাগে, আর কেন টাকার হিসাবে approx নয়, Decimal দরকার। NaN, ক্রমহীন ফল আর সময়ের টেস্টসহ।35 মিনিট১০টি প্রশ্ন
- 06parametrize — এক টেস্ট, অনেক কেসকপি করা টেস্ট আর টেস্টের ভেতরের লুপের বদলে @pytest.mark.parametrize। টেস্ট ID, ids= আর pytest.param, decorator স্ট্যাক করা, একই টেবিলে মান আর ত্রুটি, আর সাধারণ ভুলগুলো।45 মিনিট১০টি প্রশ্ন
- 07Fixture — টেস্টের প্রস্তুতি এক জায়গায়একই setup বারবার না লিখে @pytest.fixture দিয়ে একবার লিখুন, নাম ধরে চেয়ে নিন, প্রতিটি টেস্টে নতুন কপি পান, আর yield দিয়ে টেস্ট fail করলেও পরিষ্কার করুন।45 মিনিট১০টি প্রশ্ন
- 08fixture-এর scope আর conftest.py — নিরাপদে সেটআপ ভাগ করাধীর সেটআপ একবার বানিয়ে ভাগ করা, পাঁচটি scope, --setup-show, ভাগ করা অবস্থার বিপদ ও ScopeMismatch, conftest.py দিয়ে import ছাড়া fixture আর ডিরেক্টরিভিত্তিক override, autouse-এর দাম এবং fixture তৈরির ক্রম।50 মিনিট১০টি প্রশ্ন
- 09built-in fixture — tmp_path, capsys আর caplogফাইল, ছাপা আউটপুট আর লগ — টেস্টের ঝামেলার জায়গাগুলোর জন্য pytest যে fixture সাথে দেয়। আসল পাথে না লিখে CSV ও JSON টেস্ট করা, print আর logging যাচাই করা।45 মিনিট১০টি প্রশ্ন
- 10monkeypatch — এনভায়রনমেন্ট, সময় আর নেটওয়ার্ক নিয়ন্ত্রণেএনভায়রনমেন্ট ভেরিয়েবল, ঘড়ি, র্যান্ডম সংখ্যা বা নেটওয়ার্কের ওপর নির্ভর করা কোড টেস্ট করা। setenv, delenv, setattr, setitem, chdir, প্রতিটি টেস্টের পর স্বয়ংক্রিয় undo, "যেখানে খোঁজা হয় সেখানে প্যাচ করুন" নিয়ম, আর প্যাচ ছাড়াই dependency injection।50 মিনিট১০টি প্রশ্ন
- 11Mock — বাইরের সার্ভিসকে কীভাবে ডাকা হলো তা যাচাই করাপেমেন্ট বা ইমেল ক্লায়েন্টের জায়গায় Mock বসিয়ে দেখা তাকে কীভাবে ডাকা হলো। return_value, side_effect, autospec, patch, mocker — আর কখন mock নয়, fake।50 মিনিট১০টি প্রশ্ন
- 12Marker, skip আর xfail — কোন টেস্ট কোথায় চলবেskip, skipif, importorskip আর xfail দিয়ে প্রতিটি টেস্টের প্রয়োজন ও প্রত্যাশা জানানো; strict=True, raises= আর XPASS-এর অর্থ; নিজের marker রেজিস্টার করে -m দিয়ে বাছাই; সাথে parametrize করা fixture আর factory fixture।50 মিনিট১০টি প্রশ্ন
- 13কনফিগারেশন আর সতর্কবার্তা — নিয়মগুলো একটি ফাইলেপ্রতিবার একই ফ্ল্যাগ টাইপ না করে pyproject.toml বা pytest.ini-তে প্রজেক্টের নিয়ম লিখে রাখা — testpaths, addopts, pythonpath, markers, xfail_strict, log_cli — আর pytest.warns, deprecated_call ও filterwarnings দিয়ে সতর্কবার্তা পরীক্ষা ও নিয়ন্ত্রণ।55 মিনিট১০টি প্রশ্ন
- 14Coverage আর CI — কোন লাইন টেস্ট কখনো চালায়নিpytest-cov দিয়ে coverage মাপা, Missing কলাম পড়া, branch coverage, ন্যূনতম সীমা বেঁধে দেওয়া, pytest-xdist দিয়ে সমান্তরালে টেস্ট চালানো, আর GitHub Actions-এ প্রতিটি push-এ পুরো স্যুট চালানো। সঙ্গে কেন ১০০% coverage মানেই সঠিক কোড নয়।50 মিনিট১০টি প্রশ্ন
- 15async টেস্ট, hook আর নিজের pluginpytest-asyncio দিয়ে async কোড টেস্ট করা, তারপর conftest.py-তে hook লিখে pytest-কে বাড়ানো — --runslow ফ্ল্যাগ, marker, রিপোর্ট হেডার — আর শেষে নিজের plugin বানিয়ে pytester দিয়ে সেটির টেস্ট লেখা।60 মিনিট১০টি প্রশ্ন
- 16টেস্ট ডিজাইন আর TDD — ভালো টেস্ট কেমন হয়টেস্ট লেখার আগের পরিকল্পনা, Arrange-Act-Assert, ইমপ্লিমেন্টেশন নয় আচরণ টেস্ট করা, red-green-refactor, Hypothesis দিয়ে property-based টেস্ট, flaky টেস্টের কারণ ও সমাধান, আর প্রতিটি বাগের জন্য একটি regression টেস্ট।60 মিনিট১০টি প্রশ্ন