TestNG-তে @Test এনোটেশন এর timeOut প্যারামিটার ব্যবহার করে টেস্ট মেথডের জন্য একটি নির্দিষ্ট সময়সীমা (Timeout) নির্ধারণ করা যায়। যদি নির্ধারিত সময়ের মধ্যে টেস্ট মেথড সম্পন্ন না হয়, তাহলে সেই টেস্ট ব্যর্থ (fail) বলে গণ্য হবে।
timeOut এর প্রয়োজনীয়তা
১. অনন্তকাল ধরে চলা টেস্ট এড়ানো:
কিছু টেস্ট মেথড নির্দিষ্ট কারণে অনন্তকাল ধরে চলতে পারে। টাইমআউট সেট করলে এগুলো সময়মতো বন্ধ হয়ে যায়।
২. পারফরম্যান্স যাচাই:
টেস্টিংয়ের সময় নির্দিষ্ট মেথড কত দ্রুত কাজ করে তা নিশ্চিত করার জন্য টাইমআউট ব্যবহার করা হয়।
৩. ডেডলক বা লুপ এড়ানো:
টেস্ট মেথডে ডেডলক বা ইনফিনিট লুপ থাকলে, টাইমআউট সেট করে সমস্যা দ্রুত সনাক্ত করা যায়।
@Test(timeOut=) এর উদাহরণ
নিচে একটি উদাহরণ দেওয়া হলো যেখানে টাইমআউট সেট করা হয়েছে:
উদাহরণ ১: টেস্ট মেথড সময়সীমার মধ্যে সম্পন্ন হয়
import org.testng.annotations.Test;
public class TimeoutExample {
@Test(timeOut = 2000) // ২ সেকেন্ডের টাইমআউট
public void testWithinTimeout() throws InterruptedException {
Thread.sleep(1000); // ১ সেকেন্ড স্লিপ
System.out.println("Test completed within timeout.");
}
}
ফলাফল:
এই টেস্ট সফলভাবে পাস করবে কারণ এটি নির্ধারিত ২ সেকেন্ডের মধ্যেই শেষ হয়েছে।
উদাহরণ ২: টেস্ট মেথড টাইমআউট অতিক্রম করে
import org.testng.annotations.Test;
public class TimeoutExample {
@Test(timeOut = 2000) // ২ সেকেন্ডের টাইমআউট
public void testExceedTimeout() throws InterruptedException {
Thread.sleep(3000); // ৩ সেকেন্ড স্লিপ
System.out.println("This line will not execute.");
}
}
ফলাফল:
এই টেস্ট ব্যর্থ হবে কারণ এটি নির্ধারিত ২ সেকেন্ড সময়সীমা অতিক্রম করেছে।
টাইমআউট সেট করার গুরুত্বপূর্ণ বিষয়
১. টাইমআউটের একক:timeOut এর মান মিলিসেকেন্ডে (milliseconds) নির্ধারণ করতে হয়।
২. থ্রেড স্লিপ (Thread.sleep):
উদাহরণে ব্যবহৃত Thread.sleep() কেবলমাত্র পরীক্ষার জন্য ব্যবহৃত হয়েছে। প্রকৃত টেস্ট কেসে এটি প্রয়োজন নাও হতে পারে।
৩. ব্যাকগ্রাউন্ড প্রসেস:
দীর্ঘ সময়ের জন্য চলমান ব্যাকগ্রাউন্ড প্রসেসের জন্য টাইমআউট একটি কার্যকর নিয়ন্ত্রণ ব্যবস্থা।
টাইমআউট ব্যতিক্রম (Timeout Exception)
যদি মেথড টাইমআউটের কারণে ব্যর্থ হয়, TestNG নিচের মত একটি ব্যতিক্রম (exception) প্রদান করবে:
org.testng.internal.thread.ThreadTimeoutException: Method testExceedTimeout() didn't finish within the time-out 2000
টাইমআউট এবং অন্যান্য প্যারামিটার একসাথে ব্যবহার
timeOut অন্যান্য TestNG প্যারামিটার যেমন priority, enabled, invocationCount ইত্যাদির সাথে একত্রে ব্যবহার করা যায়।
@Test(priority = 1, timeOut = 3000, invocationCount = 2)
public void multipleInvocationsWithTimeout() throws InterruptedException {
Thread.sleep(2000);
System.out.println("Executed with timeout");
}
উপকারিতা
- টাইমআউট ব্যবহার করে টেস্টিং সময় এবং রিসোর্স অপচয় কমানো যায়।
- অপ্রত্যাশিত বা লম্বা সময়ের টেস্ট প্রক্রিয়া নিয়ন্ত্রণ করা যায়।
- টাইমিং সংক্রান্ত ত্রুটি সহজেই শনাক্ত করা সম্ভব।
@Test(timeOut=) প্যারামিটার ব্যবহার করে টেস্ট মেথডের সময়সীমা নিয়ন্ত্রণ করা TestNG-এর একটি শক্তিশালী ফিচার, যা ডেডলক, ইনফিনিট লুপ, এবং পারফরম্যান্স সম্পর্কিত সমস্যাগুলো সমাধান করতে সহায়ক।