අපේ පරීක්ෂණ කට්ටලයේ අහඹු බිඳුක් එකක් හමුවුණා; එක පරීක්ෂණයක් තනිව ධාවනය කළාම සාර්ථකයි, ඒක සම්පූර්ණ suite එකේ ධාවනය කළාම අසාර්ථක වෙයි. නැවත ධාවනය කළාම එය නැවත සාර්ථක වෙලා. මෙවැනි ගැටළුවක් state leak ලෙස හඳුන්වයි.
මෙම ගැටළුවට හේතුව pytest‑xdist හි පවත්නා වැඩිදියුණු කරුණු විය. xdist පරීක්ෂණ ගොනු බහුකාර්යකාරීව ව්යාප්ත කරනවා, ඒක සඳහා සදාකාලික worker ප්රොසෙස් එකක් භාවිතා කරනවා. ඒ නිසා එක් ගොනුවක මොඩියුල‑මට්ටමේ dict, ContextVar, singleton වැනි දත්ත, ඒ worker එකේ පසුගිය ගොනුවකට මාරු වෙලා ගොස් ඉතිරි වෙයි. අපිට 17,000 පරීක්ෂණ 850 ගොනු තිබුනා, එම ගොනු අතර මොඩියුල‑මට්ටමේ රෙජිස්ට්රි, කෑෂ්, env‑var වැනි තොරතුරු බිඳුනවා.
අපි විසඳුමක් ලෙස ගොනුවකට එක් Python interpreter එකක් භාවිතා කරන පරිදි සැලසුම් කළෙමු. එනම්, එක් ගොනුවක් සඳහා python -m pytest <file> ක්රියාත්මක කර, ThreadPoolExecutor මඟින් ඒ subprocess ගොනු සමාන්තරව ධාවනය කරනවා. මෙය සම්පූර්ණයෙන්ම පුරුද්දේ worker ප්රොසෙස් නැති කිරීමෙන් state leak ඉවත් කරයි. 60 පේළි කෝඩ් පමණින් මෙම පද්ධතිය සකස් කර, xdist හි loadfile/loadscope, max‑worker‑restart වැනි සංකීර්ණ සැකසුම් අවශ්ය නොවීය.
ශ්රී ලංකාවට ඇති වැදගත්කම
- ශ්රි ලාංකීය විශ්වවිද්යාල සිසුන්ට Python පරීක්ෂණයේ නවතම හොඳ පුරුදු ඉගෙන ගැනීමට අවස්ථාව.
- දේශීය සංවර්ධකයින්ට CI/CD පයිප්ලයින්වල අධික පූර්ව‑ලෝඩ් ගැටළුවක් නැතිව වේගවත්, විශ්වාසනීය පරීක්ෂණ පද්ධතියක් ගොඩනඟා ගැනීමට මාර්ගයක්.
- ව්යාපාරිකයන්ට දෝෂ හඳුනා ගැනීමේ කාලය අඩු කර, නිෂ්පාදන නිකුතුවේ ගුණාත්මකභාවය වැඩි කර, ඉන්පසු පාරිභෝගික අත්දැකීම වර්ධනය වේ.
අවසන් වශයෙන්, subprocess.Popen සහ ThreadPoolExecutor භාවිතයෙන් ගොනුව‑පදවී පරීක්ෂණයක් සකස් කිරීම, පරීක්ෂණ ඉස්සරහට නව පියවරක්. මෙය කුඩා කණ්ඩායම් වලද, ලොකු සංවිධාන වලද, කාලය, සම්පත්, විශ්වාසය සුරක්ෂිත කරයි.