ඔබේ Selenium පරීක්ෂණ කට්ටලය හරිතයි. CI එකේ කාලය අඩු කිරීම සඳහා thread-count="4" යැවූ පසු තිදෙනෙක් අසාර්ථක වෙයි. නැවත ධාවනය කළාම වෙනත් දෙදෙනෙක් අසාර්ථක වේ. දේශීයව ධාවනය කළාම සෑම දෙයක්ම සාර්ථකයි. මෙය ඔබේ යෙදුමේ බග් එකක් නොව, සමකාලීනව ධාවනය වන පරීක්ෂණ රාමුකය unsafe බවයි.
සමකාලීනව Selenium ධාවනය කිරීමේදී බොහෝ දෙනා WebDriver එක ThreadLocal තුළ වැසීම යන උපදෙස් පසුබැසීමේදී අනුගමනය කරයි. එය වැදගත් නමුත්, පළමු ගැටලුවක් පමණක් විසඳයි. ඇත්තේ, සමකාලීනතාවය හේතුවෙන් හතරේදෙනා වැනි වැරදි මතු වේ – ඒවා shared driver, static listeners, improper quit, thread reuse වැනි ගැටලු.
WebDriver එක thread-safe නොවේ. එකම driver instance එකක් බ්රවුසර සැසියක් පාලනය කරන අතර, URL, කුකීස්, වින්ඩෝ එකක් වැනි තත්ත්වයන් එකට සම්බන්ධ වේ. දෙකක් හෝ වැඩි threads එකම driver එක භාවිතා කරන්නේ නම්, එකම browser එකේ දෙදෙනා ක්රියා කරයි. පළමු thread එක driver එකක් ආරම්භ කරයි, පසුතැවීමේදී අන් thread එක නව driver එකක් ආරම්භ කරයි, නමුත් static field එක අවසන් driver එකට පවරා දී ඇති නිසා සියලු thread එකම අවසන් driver එකම භාවිතා කරයි. එම නිසා NoSuchElementException, NoSuchSessionException වැනි අසමජ්ඣාත වැරදි මතුවේ.
මෙම ගැටලුවට පූර්ණ විසඳුම ThreadLocal<WebDriver> භාවිතයෙන් සෑම thread එකකටම තමන්ගේ driver එකක් ලබා දීමයි. පහත දැක්වෙන DriverFactory උදාහරණය එය කරයි:
- ThreadLocal variable එක ප්රකාශ කරයි.
- create() මඟින් driver එකක් ඇතුළත් කරයි; දැනට driver එකක් තිබේ නම් නැවත සකස් නොකරයි.
- get() මඟින් සත්ය driver එක ලබා ගනී; නැතහොත් IllegalStateException දෝෂයක් එල්ල කරයි.
- quit() මඟින් driver එක වසා, ThreadLocal entry එක remove() කරයි. මෙය අමතක නොකරන්න; නැතිනම් පසුගිය thread එකේ මරණය වූ session එක අලුත් පරීක්ෂණයක භාවිතා විය හැක.
ThreadLocal එකක් පමණක් භාවිතා කළත්, DRIVER.remove() අමතක නොකළහොත්, පරණ thread pool එකේ පරණ driver entry එක පවත්වාගෙන යයි. CI එකේ දිගු කාලීන JVM එකක මේ තත්වය RAM අතිරික්තය, අහඹු NoSuchSessionException වැනි ගැටලු ඇති කරයි.
ශ්රී ලංකාවට ඇති වැදගත්කම
- සියළු දේශීය විශ්වවිද්යාල සිසුන් – Parallel testing ක්රමවේදය හොඳින් අධ්යයනය කර, CI/CD පද්ධති වලින් වේගවත් feedback ලබා ගත හැක.
- ලෝක පරිමාණය ඇති ශ්රී ලංකා developers – Thread-safe driver factory එකක් නිර්මාණය කිරීමෙන් ලොකු පරිමාණ පරීක්ෂණ පැකේජයන් නිරවද්යව ධාවනය කළ හැක, ඉන් පසු පාරිභෝගික ගැටලු අඩු වේ.
- IT සේවා සපයන ආයතන – Build server වල RAM භාවිතය අඩු කර, අධික parallelism මඟින් release cycle කාලය කෙටි කර, ව්යාපාරික ROI වැඩි කරයි.
අවසන් වශයෙන්, Selenium පරීක්ෂණ parallel කිරීමේදී driver එක shared කිරීමේ ගැටලුව අවම කර, ThreadLocal සහ proper clean‑up (remove) යොදා ගැනීම අත්යවශ්යයි. ඔබේ test suite එක මේ ආකාරයෙන් පරීක්ෂා කර, CI එකේ අධික බාධාවක් නොමැතිව වේගවත් feedback ලැබුනේ කෙසේද කියා පරීක්ෂා කරන්න.