টেস্টএনজি (TestNG) একটি জাভা-ভিত্তিক টেস্টিং ফ্রেমওয়ার্ক (Testing Framework), যা ইউনিট, ইন্টিগ্রেশন, ফাংশনাল এবং এন্ড-টু-এন্ড টেস্টিংয়ের জন্য ব্যবহৃত হয়। "TestNG"-তে "NG" মানে "Next Generation", যা এর উন্নত বৈশিষ্ট্যগুলোর পরিচয় বহন করে। এটি মূলত JUnit এবং NUnit থেকে অনুপ্রাণিত হলেও অনেক বেশি কার্যকরী এবং নমনীয়।
টেস্টএনজি এর উদ্দেশ্য
- অটোমেটেড টেস্টিং আরও সহজ এবং কার্যকর করা।
- টেস্ট মেথডের ডিপেনডেন্সি ম্যানেজমেন্ট (Dependency Management) প্রদান করা।
- বড় এবং জটিল টেস্ট স্যুট সহজে পরিচালনা করা।
- প্যারালাল এবং ডেটা-ড্রিভেন টেস্টিং সাপোর্ট করা।
টেস্টএনজি এর বৈশিষ্ট্য
সহজ এবং শক্তিশালী অ্যানোটেশন সাপোর্ট
টেস্টএনজি টেস্ট পরিচালনার জন্য জাভার অ্যানোটেশন (Annotations) ব্যবহার করে, যেমন:
@Test: একটি টেস্ট মেথড চিহ্নিত করে।@BeforeMethod,@AfterMethod: টেস্ট মেথড চালানোর আগে বা পরে কার্যক্রম পরিচালনার জন্য।
প্যারালাল টেস্টিং
প্যারালাল টেস্ট এক্সিকিউশনের মাধ্যমে সময় সাশ্রয় করা সম্ভব।
টেস্ট গ্রুপিং এবং ফিল্টারিং
টেস্টএনজি আপনাকে টেস্ট মেথডগুলো গ্রুপ (Group) করতে এবং নির্দিষ্ট গ্রুপের টেস্ট চালাতে দেয়।
ডেটা ড্রিভেন টেস্টিং
টেস্টএনজি DataProvider ব্যবহার করে ডেটা-ভিত্তিক টেস্টিং সহজ করে।
ফ্লেক্সিবল টেস্ট কনফিগারেশন
XML ফাইলের মাধ্যমে টেস্ট স্যুট কনফিগার করা যায়।
টেস্টএনজি কোথায় ব্যবহৃত হয়?
- ইউনিট টেস্টিং (Unit Testing): ছোট মডিউল বা ফাংশনের সঠিকতা যাচাই করতে।
- ইন্টিগ্রেশন টেস্টিং (Integration Testing): বিভিন্ন মডিউল একসঙ্গে সঠিকভাবে কাজ করছে কিনা তা পরীক্ষা করতে।
- ফাংশনাল টেস্টিং (Functional Testing): অ্যাপ্লিকেশনের কার্যকারিতা যাচাই করতে।
- এন্ড-টু-এন্ড টেস্টিং (End-to-End Testing): পুরো সিস্টেম একসঙ্গে পরীক্ষার জন্য।
সারাংশ
টেস্টএনজি তার উন্নত বৈশিষ্ট্য এবং কাস্টমাইজেশনের ক্ষমতার জন্য সফটওয়্যার ডেভেলপমেন্ট এবং টেস্টিং টিমের কাছে একটি জনপ্রিয় টুল। এটি জাভা-ভিত্তিক প্রজেক্টের টেস্টিং সহজ এবং কার্যকর করতে অত্যন্ত উপযোগী।
TestNG কি?
TestNG (Test Next Generation) একটি ওপেন সোর্স টেস্টিং ফ্রেমওয়ার্ক, যা মূলত জাভা (Java) প্রোগ্রামিং ভাষায় টেস্ট অটোমেশন করার জন্য ব্যবহৃত হয়। এটি JUnit এবং NUnit ফ্রেমওয়ার্কের সীমাবদ্ধতাগুলি কাটিয়ে উঠতে ডিজাইন করা হয়েছে এবং উন্নত ফিচার সরবরাহ করে। TestNG দিয়ে ইউনিট টেস্টিং (Unit Testing), ফিচার টেস্টিং (Functional Testing), এবং ইনটিগ্রেশন টেস্টিং (Integration Testing) করা যায়।
TestNG-এর প্রয়োজনীয়তা
১. টেস্টিং প্রসেস সহজ ও সুশৃঙ্খল করা
TestNG টেস্ট মেথডগুলো সংগঠিত এবং কার্যকরভাবে পরিচালনার জন্য বিভিন্ন অ্যানোটেশন এবং কনফিগারেশন ফাইল সরবরাহ করে। এর ফলে টেস্টিং কার্যক্রম সহজ হয়।
২. অ্যানোটেশন ভিত্তিক টেস্ট ম্যানেজমেন্ট
TestNG-এর অ্যানোটেশনগুলো (যেমন @Test, @BeforeMethod, @AfterMethod) জাভা কোডে সরাসরি টেস্ট কেস নির্ধারণ করতে সাহায্য করে।
৩. প্যারালাল টেস্ট এক্সিকিউশন
TestNG প্যারালাল টেস্ট এক্সিকিউশনের সুবিধা দেয়, যা বড় আকারের প্রজেক্টে একাধিক টেস্ট দ্রুত রান করার জন্য অত্যন্ত প্রয়োজনীয়।
৪. ডাটা ড্রিভেন টেস্টিং
ডাটা ড্রিভেন টেস্টিং সহজ করতে TestNG @DataProvider ফিচার সরবরাহ করে, যা একাধিক ইনপুট ডাটার জন্য একই টেস্ট কেস চালানোর সুযোগ দেয়।
৫. ফ্লেক্সিবল টেস্ট কনফিগারেশন
XML ভিত্তিক কনফিগারেশন ফাইলের মাধ্যমে সহজেই টেস্ট গ্রুপিং, অগ্রাধিকার নির্ধারণ এবং নির্দিষ্ট টেস্ট চালানো যায়।
৬. বিল্ট-ইন রিপোর্টিং সিস্টেম
TestNG বিল্ট-ইন রিপোর্টিং ফিচার সরবরাহ করে, যা টেস্ট এক্সিকিউশনের ফলাফল বিশ্লেষণ করতে সহায়তা করে।
৭. স্কেলেবিলিটি
বড় বা জটিল প্রজেক্টেও TestNG স্কেলেবল, যা টেস্ট অটোমেশন স্ট্র্যাটেজি উন্নত করতে সাহায্য করে।
সংক্ষেপে
TestNG একটি শক্তিশালী এবং ফিচার-সমৃদ্ধ টেস্টিং ফ্রেমওয়ার্ক, যা টেস্টিং প্রসেসকে আরও কার্যকর, সুশৃঙ্খল এবং দ্রুততর করে। এর অ্যানোটেশন, প্যারালাল এক্সিকিউশন এবং ডাটা ড্রিভেন টেস্টিংয়ের সুবিধা একে টেস্ট অটোমেশন ইঞ্জিনিয়ারদের জন্য অত্যন্ত গুরুত্বপূর্ণ টুলে পরিণত করেছে।
JUnit এবং TestNG উভয়ই Java ভিত্তিক টেস্টিং ফ্রেমওয়ার্ক, তবে তাদের বৈশিষ্ট্য এবং ফিচারের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে। নিচে JUnit এবং TestNG-এর মধ্যে প্রধান পার্থক্যগুলো ব্যাখ্যা করা হলো:
অ্যানোটেশনস (Annotations)
- JUnit:
@Test,@Before,@After,@BeforeClass,@AfterClassইত্যাদি। - TestNG:
@Test,@BeforeMethod,@AfterMethod,@BeforeClass,@AfterClassইত্যাদি। এছাড়াও, TestNG অতিরিক্ত অ্যানোটেশন যেমন@DataProvider,@Factoryসাপোর্ট করে যা জটিল টেস্ট কেস ম্যানেজমেন্ট সহজ করে।
প্যারামিটারাইজড টেস্টিং (Parameterized Testing)
- JUnit: প্যারামিটারাইজড টেস্টিং সাপোর্ট করে, তবে এটি নির্দিষ্ট পদ্ধতিতে কনফিগার করতে হয়।
- TestNG: প্যারামিটারাইজড টেস্টিং খুব সহজ এবং ব্যবহারকারী-বান্ধব
@DataProviderঅ্যানোটেশনের মাধ্যমে।
প্যারালাল টেস্টিং (Parallel Testing)
- JUnit: প্যারালাল টেস্টিং সরাসরি সাপোর্ট করে না।
- TestNG: প্যারালাল টেস্টিং সহজে কনফিগার করা যায় এবং XML ফাইল ব্যবহার করে থ্রেড লেভেল নির্ধারণ করা সম্ভব।
XML কনফিগারেশন
- JUnit: XML ভিত্তিক টেস্ট কনফিগারেশন সরাসরি সাপোর্ট করে না। ম্যানুয়াল সেটআপ প্রয়োজন।
- TestNG: XML ফাইলের মাধ্যমে টেস্ট কনফিগারেশন করা সহজ। টেস্ট ক্লাস, মেথড, এবং গ্রুপ নির্ধারণ করা যায়।
গ্রুপিং (Grouping)
- JUnit: টেস্ট গ্রুপিং সাপোর্ট করে না।
- TestNG: টেস্ট কেস গ্রুপিং সাপোর্ট করে।
groupsঅ্যাট্রিবিউট ব্যবহার করে টেস্ট কেস গ্রুপ করা যায় এবং নির্দিষ্ট গ্রুপ রান করা যায়।
ডিপেনডেন্সি ম্যানেজমেন্ট (Dependency Management)
- JUnit: ডিপেনডেন্ট টেস্ট সাপোর্ট করে না।
- TestNG:
dependsOnMethodsএবংdependsOnGroupsঅ্যাট্রিবিউট ব্যবহার করে টেস্ট কেসের ডিপেনডেন্সি নির্ধারণ করা সম্ভব।
ডেটা ড্রিভেন টেস্টিং (Data-driven Testing)
- JUnit: সীমিত ডেটা ড্রিভেন টেস্টিং সাপোর্ট করে।
- TestNG: শক্তিশালী ডেটা ড্রিভেন টেস্টিং সাপোর্ট করে
@DataProviderএর মাধ্যমে।
রিপোর্টিং (Reporting)
- JUnit: বেসিক টেস্ট রিপোর্ট প্রদান করে।
- TestNG: উন্নত HTML এবং XML রিপোর্টিং সাপোর্ট করে।
ইন্টিগ্রেশন (Integration)
- JUnit: Ant, Maven, এবং Gradle-এর সাথে সহজে ইন্টিগ্রেশন করা যায়।
- TestNG: একইভাবে Maven, Gradle, এবং CI/CD টুল যেমন Jenkins-এর সাথে আরও উন্নত ইন্টিগ্রেশন সাপোর্ট করে।
ব্যবহারযোগ্যতা (Ease of Use)
- JUnit: টেস্টিং প্রক্রিয়া কিছুটা বেসিক এবং সীমিত ফিচারের জন্য অপেক্ষাকৃত কঠিন হতে পারে।
- TestNG: সহজ এবং ফিচার-সমৃদ্ধ হওয়ায় জটিল টেস্ট কেস ম্যানেজমেন্টেও কার্যকর।
টেবিল আকারে তুলনা
| বৈশিষ্ট্য | JUnit | TestNG |
|---|---|---|
| অ্যানোটেশন | সীমিত | বেশি এবং উন্নত |
| প্যারালাল টেস্টিং | সাপোর্ট নেই | সাপোর্ট আছে |
| XML কনফিগারেশন | সাপোর্ট নেই | সাপোর্ট আছে |
| ডিপেনডেন্সি ম্যানেজমেন্ট | সাপোর্ট নেই | সাপোর্ট আছে |
| রিপোর্টিং | বেসিক রিপোর্ট | উন্নত HTML এবং XML রিপোর্ট |
| গ্রুপিং | সাপোর্ট নেই | সাপোর্ট আছে |
| ডেটা ড্রিভেন টেস্টিং | সীমিত | শক্তিশালী |
সারাংশ
JUnit সাধারণত বেসিক টেস্টিংয়ের জন্য উপযুক্ত, যেখানে TestNG উন্নত এবং জটিল টেস্ট কেস ম্যানেজমেন্টের জন্য কার্যকর। টেস্টিংয়ের চাহিদা অনুযায়ী এই দুটি ফ্রেমওয়ার্ক থেকে যেকোনো একটি নির্বাচন করা যেতে পারে। TestNG আধুনিক এবং ফিচার-সমৃদ্ধ হওয়ায় বড় প্রকল্পের জন্য বেশি ব্যবহৃত হয়।
টেস্টএনজি টেস্ট অটোমেশন এবং টেস্ট ম্যানেজমেন্টকে আরও সহজ, শক্তিশালী এবং কার্যকর করে তোলে। এর প্রধান ফিচারগুলো নিচে বিস্তারিতভাবে তুলে ধরা হলো:
এনোটেশন (Annotations)
টেস্টএনজি এনোটেশন ব্যবহার করে টেস্ট মেথডগুলোর কার্যপ্রণালীকে সহজ করে। এর মাধ্যমে টেস্ট কনফিগারেশন নির্ধারণ, টেস্ট এক্সিকিউশন এবং সেটআপ সহজ হয়।
উদাহরণস্বরূপ: @Test, @BeforeMethod, @AfterMethod ইত্যাদি।
প্যারালাল টেস্টিং (Parallel Testing)
একাধিক টেস্ট একসাথে চালানোর সুবিধা প্রদান করে। এটি টেস্টিংয়ের সময় উল্লেখযোগ্যভাবে কমিয়ে আনে। বিশেষ করে বড় স্কেল প্রজেক্টে প্যারালাল টেস্টিং অত্যন্ত কার্যকর।
ডেটা ড্রিভেন টেস্টিং (Data-driven Testing)
ডেটা প্রোভাইডার (@DataProvider) ফিচারের মাধ্যমে একই টেস্ট বিভিন্ন ইনপুট ডেটা নিয়ে একাধিকবার চালানো যায়। এটি বড় পরিসরে ডেটা-নির্ভর টেস্টিং কার্যকরভাবে পরিচালনা করে।
টেস্ট প্রায়োরিটি সেটিং (Test Priority)
টেস্টএনজি টেস্ট মেথডগুলোর কার্যক্রমের অগ্রাধিকার (Priority) নির্ধারণের সুবিধা দেয়।
@Test(priority = 1)
public void firstTest() {
System.out.println("This is the first test.");
}
@Test(priority = 2)
public void secondTest() {
System.out.println("This is the second test.");
}
এক্সেপশন টেস্টিং (Exception Testing)
টেস্টএনজি কোনো টেস্ট মেথড নির্দিষ্ট এক্সেপশন থ্রো করে কিনা তা যাচাই করার ক্ষমতা রাখে।
@Test(expectedExceptions = ArithmeticException.class)
public void testException() {
int result = 1 / 0;
}
টেস্ট ডিপেনডেন্সি (Test Dependency)
কোনো টেস্ট মেথড অন্য কোনো টেস্ট মেথডের উপর নির্ভরশীল হলে এটি সেট করা যায়।
@Test
public void init() {
System.out.println("Initialization test.");
}
@Test(dependsOnMethods = {"init"})
public void testMethod() {
System.out.println("Dependent test method.");
}
ফ্লেক্সিবল কনফিগারেশন (Flexible Configuration)
টেস্টএনজি xml ফাইল ব্যবহার করে টেস্ট স্যুট কনফিগারেশন সহজ করে। এতে একাধিক টেস্ট মেথড, ক্লাস এবং প্যাকেজ চালানো যায়।
রিপোর্টিং (Reporting)
টেস্টএনজি ডিফল্টভাবে সুন্দর এবং বিস্তারিত HTML এবং XML রিপোর্ট তৈরি করে, যা টেস্ট ফলাফল বিশ্লেষণে সহায়ক।
স্যুট টেস্টিং (Suite Testing)
একাধিক টেস্ট ক্লাস এবং মেথড একত্রে চালানোর জন্য স্যুট ফিচার প্রদান করে। এটি বড় প্রজেক্টে টেস্ট অর্গানাইজেশনকে সহজ করে।
গ্রুপিং টেস্ট (Test Grouping)
টেস্ট মেথডগুলোকে গ্রুপে বিভক্ত করার সুযোগ দেয়, যা প্রয়োজন অনুযায়ী নির্দিষ্ট গ্রুপ চালাতে সহায়তা করে।
@Test(groups = {"smoke"})
public void smokeTest() {
System.out.println("Smoke test.");
}
ইনটিগ্রেশন সহজতর
টেস্টএনজি সহজেই মেভেন (Maven), গ্রেডল (Gradle), এবং CI/CD টুল যেমন জেনকিন্স (Jenkins) এর সাথে ইন্টিগ্রেট করা যায়।
রিটারাই (Retry) মেকানিজম
ব্যর্থ টেস্টগুলো নির্দিষ্ট সংখ্যকবার পুনরায় চালানোর সুবিধা প্রদান করে। এটি অস্থায়ী সমস্যার জন্য কার্যকর।
মাল্টি-ব্রাউজার সাপোর্ট
টেস্টএনজি সেলেনিয়ামের (Selenium) সাথে মিলিত হয়ে মাল্টি-ব্রাউজার টেস্টিং সহজ করে তোলে।
টেস্টএনজি এর এই ফিচারগুলো একে আধুনিক টেস্টিং ফ্রেমওয়ার্কগুলোর মধ্যে একটি জনপ্রিয় এবং শক্তিশালী টুল হিসেবে পরিচিত করেছে।
TestNG ব্যবহার করে Maven বা Gradle প্রজেক্ট তৈরি করা খুব সহজ। এগুলোর সাহায্যে Dependency Management আরও সহজ হয় এবং টেস্টিং পরিবেশ সেটআপ করা দ্রুত হয়।
Maven দিয়ে TestNG প্রজেক্ট তৈরি করা
Step 1: Maven প্রজেক্ট তৈরি
১. Eclipse IDE বা আপনার পছন্দের IDE ওপেন করুন।
২. নতুন Maven Project তৈরি করুন।
৩. Group ID এবং Artifact ID সেট করুন।
৪. প্রজেক্ট তৈরি হয়ে গেলে, pom.xml ফাইলে TestNG ডিপেন্ডেন্সি যোগ করুন।
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.7.0</version> <!-- প্রয়োজন অনুযায়ী ভার্সন -->
<scope>test</scope>
</dependency>
</dependencies>
Step 2: একটি স্যাম্পল টেস্ট ক্লাস তৈরি করুন
src/test/java ফোল্ডারে একটি টেস্ট ক্লাস তৈরি করুন:
import org.testng.Assert;
import org.testng.annotations.Test;
public class SampleTest {
@Test
public void testMethod() {
int a = 10;
int b = 20;
Assert.assertEquals(a + b, 30, "Addition Test Failed");
}
}
Step 3: Maven দিয়ে TestNG চালানো
Maven কমান্ড ব্যবহার করে TestNG টেস্ট চালাতে নিচের স্টেপগুলো অনুসরণ করুন:
১. TestNG Suite ফাইল (testng.xml) তৈরি করুন: src/test/resources ফোল্ডারে একটি testng.xml ফাইল তৈরি করুন:
<suite name="Suite">
<test name="Test">
<classes>
<class name="SampleTest" />
</classes>
</test>
</suite>
২. Maven কমান্ড চালান:
mvn clean test
Maven surefire-plugin ব্যবহার করে টেস্ট রান করে এবং রিপোর্ট তৈরি করবে।
Gradle দিয়ে TestNG প্রজেক্ট তৈরি করা
Step 1: Gradle প্রজেক্ট তৈরি
১. একটি Gradle প্রজেক্ট তৈরি করুন।
২. build.gradle ফাইলে TestNG ডিপেন্ডেন্সি যোগ করুন:
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.testng:testng:7.7.0'
}
test {
useTestNG()
}
Step 2: একটি স্যাম্পল টেস্ট ক্লাস তৈরি করুন
src/test/java ফোল্ডারে একটি টেস্ট ক্লাস তৈরি করুন:
import org.testng.Assert;
import org.testng.annotations.Test;
public class SampleTest {
@Test
public void testMethod() {
int x = 5;
int y = 15;
Assert.assertEquals(x + y, 20, "Addition Test Failed");
}
}
Step 3: Gradle দিয়ে TestNG চালানো
Gradle টেস্ট রান করতে নিচের কমান্ডটি ব্যবহার করুন:
gradle test
Gradle স্বয়ংক্রিয়ভাবে TestNG টেস্ট চালাবে এবং টেস্ট রিপোর্ট তৈরি করবে।
Maven এবং Gradle এর তুলনা
| বৈশিষ্ট্য | Maven | Gradle |
|---|---|---|
| কনফিগারেশন | XML ভিত্তিক (pom.xml) | Groovy বা Kotlin ভিত্তিক (build.gradle) |
| পারফরম্যান্স | তুলনামূলক ধীর | দ্রুত (Incremental Build) |
| Dependency Management | Maven Central Repository | Flexible এবং Customizable |
Maven বা Gradle যেটিই ব্যবহার করুন না কেন, TestNG দিয়ে টেস্টিং সহজ এবং কার্যকর হয়ে ওঠে। আপনার টেস্টিং প্রয়োজন অনুযায়ী টুল নির্বাচন করুন।
Read more