TestNG একটি জনপ্রিয় টেস্ট ফ্রেমওয়ার্ক যা Java ভিত্তিক অ্যাপ্লিকেশনগুলোর জন্য টেস্ট চালাতে ব্যবহৃত হয়। এটি বিভিন্ন ধরনের Listener ইন্টারফেস প্রদান করে, যা টেস্ট রান চলাকালে বিভিন্ন ইভেন্টের উপর নজর রাখতে সাহায্য করে। এই ইন্টারফেসগুলো ব্যবহার করে আপনি টেস্টের পূর্বে বা পরে কিছু কাজ করতে পারেন, যেমন লগিং বা রিপোর্ট তৈরি করা।
ITestListener Interface
ITestListener ইন্টারফেসটি টেস্ট রান চলাকালে প্রতিটি টেস্টের স্ট্যাটাস ট্র্যাক করতে ব্যবহৃত হয়। এটি টেস্ট কেসের ফলাফল সম্পর্কে বিভিন্ন ইভেন্টের উপর কাস্টম অ্যাকশন গ্রহণের সুযোগ দেয়। এই ইন্টারফেসে ৬টি গুরুত্বপূর্ণ মেথড রয়েছে, যেমন:
- onTestStart(ITestResult result): টেস্ট শুরু হওয়ার সময় কল হয়।
- onTestSuccess(ITestResult result): টেস্ট সফলভাবে শেষ হলে কল হয়।
- onTestFailure(ITestResult result): টেস্ট ব্যর্থ হলে কল হয়।
- onTestSkipped(ITestResult result): টেস্ট স্কিপ হলে কল হয়।
- onTestFailedButWithinSuccessPercentage(ITestResult result): টেস্ট কিছু সফলতার সাথে ব্যর্থ হলে কল হয়।
- onTestFailedWithTimeout(ITestResult result): যখন টেস্ট টাইমআউট হয়, তখন কল হয়।
ITestListener ব্যবহার করে, আপনি টেস্টের আগে বা পরে কাস্টম লজিক যোগ করতে পারেন, যেমন রিপোর্ট তৈরি করা, ইমেইল পাঠানো বা লগিং করা।
উদাহরণ: ITestListener ব্যবহার
import org.testng.ITestListener;
import org.testng.ITestResult;
public class MyTestListener implements ITestListener {
@Override
public void onTestStart(ITestResult result) {
System.out.println("টেস্ট শুরু: " + result.getName());
}
@Override
public void onTestSuccess(ITestResult result) {
System.out.println("টেস্ট সফল: " + result.getName());
}
@Override
public void onTestFailure(ITestResult result) {
System.out.println("টেস্ট ব্যর্থ: " + result.getName());
}
@Override
public void onTestSkipped(ITestResult result) {
System.out.println("টেস্ট স্কিপ: " + result.getName());
}
@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
System.out.println("টেস্ট কিছুটা সফল: " + result.getName());
}
@Override
public void onTestFailedWithTimeout(ITestResult result) {
System.out.println("টেস্ট টাইমআউট: " + result.getName());
}
}
এই Listener ক্লাসটি ব্যবহার করে আপনি টেস্ট রান চলাকালে বিভিন্ন ইভেন্টের প্রতি রেসপন্স করতে পারেন।
ISuiteListener Interface
ISuiteListener ইন্টারফেসটি সম্পূর্ণ টেস্ট সুইটের (suite) শুরু এবং শেষ হওয়ার সময় ইভেন্টে হ্যান্ডেল করতে ব্যবহৃত হয়। এই ইন্টারফেসে ২টি প্রধান মেথড রয়েছে:
- onStart(ISuite suite): যখন টেস্ট সুইট শুরু হয়, তখন কল হয়।
- onFinish(ISuite suite): যখন টেস্ট সুইট শেষ হয়, তখন কল হয়।
এই ইন্টারফেসটি সাধারণত টেস্ট সুইটের ডাটা সংগ্রহ, লগিং বা রিপোর্টিং করার জন্য ব্যবহৃত হয়।
উদাহরণ: ISuiteListener ব্যবহার
import org.testng.ISuite;
import org.testng.ISuiteListener;
public class MySuiteListener implements ISuiteListener {
@Override
public void onStart(ISuite suite) {
System.out.println("টেস্ট সুইট শুরু: " + suite.getName());
}
@Override
public void onFinish(ISuite suite) {
System.out.println("টেস্ট সুইট শেষ: " + suite.getName());
}
}
এই Listener ক্লাসটি টেস্ট সুইটের শুরু এবং শেষ হওয়ার সময় বিভিন্ন কাস্টম অ্যাকশন নিতে সাহায্য করে, যেমন রিপোর্টিং বা ফলাফল লগ করা।
Listener গুলোকে টেস্টNG তে ব্যবহার করা
আপনি ITestListener এবং ISuiteListener ইন্টারফেসগুলোর ব্যবহার টেস্টNG কনফিগারেশন ফাইলের মাধ্যমে করতে পারেন বা কোডের মাধ্যমে রেজিস্টার করতে পারেন।
XML কনফিগারেশন ফাইলে Listener যোগ করা:
<suite name="MySuite">
<listeners>
<listener class-name="MyTestListener" />
<listener class-name="MySuiteListener" />
</listeners>
<test name="MyTest">
<classes>
<class name="TestClass" />
</classes>
</test>
</suite>
কোডের মাধ্যমে Listener রেজিস্টার করা:
import org.testng.TestListenerAdapter;
import org.testng.TestNG;
public class TestRunner {
public static void main(String[] args) {
TestNG testng = new TestNG();
testng.setTestClasses(new Class[] {TestClass.class});
testng.addListener(new MyTestListener());
testng.addListener(new MySuiteListener());
testng.run();
}
}
এইভাবে ITestListener এবং ISuiteListener ইন্টারফেসগুলোর মাধ্যমে আপনি টেস্ট রান এবং সুইটের বিভিন্ন ইভেন্টের প্রতি কাস্টম লজিক প্রয়োগ করতে পারবেন।