TestNG ফ্রেমওয়ার্কের মূল বৈশিষ্ট্যগুলোর একটি হলো অ্যানোটেশন (Annotation)। TestNG অ্যানোটেশনগুলো কোডে নির্দিষ্ট মেথড বা ফাংশনের কার্যক্রম চিহ্নিত করতে ব্যবহৃত হয়। এগুলোর মাধ্যমে টেস্ট কেস পরিচালনা এবং তাদের জীবনচক্র নিয়ন্ত্রণ সহজ হয়।
@Test
@Test হলো TestNG-এর সবচেয়ে গুরুত্বপূর্ণ অ্যানোটেশন। এটি ব্যবহার করে একটি মেথডকে টেস্ট কেস হিসেবে চিহ্নিত করা হয়।
import org.testng.annotations.Test;
public class TestExample {
@Test
public void sampleTest() {
System.out.println("This is a test method.");
}
}
@BeforeSuite এবং @AfterSuite
@BeforeSuite: সম্পূর্ণ টেস্ট স্যুট (Test Suite) চালানোর আগে একবার কার্যকর হয়।
@AfterSuite: টেস্ট স্যুট শেষ হওয়ার পর একবার কার্যকর হয়।
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.AfterSuite;
public class SuiteExample {
@BeforeSuite
public void beforeSuite() {
System.out.println("Before Suite");
}
@AfterSuite
public void afterSuite() {
System.out.println("After Suite");
}
}
@BeforeClass এবং @AfterClass
@BeforeClass: একটি টেস্ট ক্লাস শুরু হওয়ার আগে কার্যকর হয়।
@AfterClass: টেস্ট ক্লাসের কার্যক্রম শেষ হওয়ার পর কার্যকর হয়।
import org.testng.annotations.BeforeClass;
import org.testng.annotations.AfterClass;
public class ClassExample {
@BeforeClass
public void beforeClass() {
System.out.println("Before Class");
}
@AfterClass
public void afterClass() {
System.out.println("After Class");
}
}
@BeforeMethod এবং @AfterMethod
@BeforeMethod: প্রতিটি টেস্ট মেথড চালানোর আগে কার্যকর হয়।
@AfterMethod: প্রতিটি টেস্ট মেথড চালানোর পরে কার্যকর হয়।
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;
public class MethodExample {
@BeforeMethod
public void beforeMethod() {
System.out.println("Before Method");
}
@AfterMethod
public void afterMethod() {
System.out.println("After Method");
}
@Test
public void testMethod() {
System.out.println("Test Method");
}
}
@BeforeTest এবং @AfterTest
@BeforeTest: টেস্ট ট্যাগের (Test Tag) আগে একবার কার্যকর হয়।
@AfterTest: টেস্ট ট্যাগের পরে একবার কার্যকর হয়।
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;
public class TestTagExample {
@BeforeTest
public void beforeTest() {
System.out.println("Before Test");
}
@AfterTest
public void afterTest() {
System.out.println("After Test");
}
}
@DataProvider
@DataProvider: একাধিক ডেটা সেটের সাহায্যে একটি টেস্ট মেথড চালানোর জন্য ব্যবহৃত হয়।
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class DataProviderExample {
@DataProvider(name = "data")
public Object[][] dataProviderMethod() {
return new Object[][] { { "Data1" }, { "Data2" } };
}
@Test(dataProvider = "data")
public void testMethod(String data) {
System.out.println("Test Data: " + data);
}
}
@Parameters
@Parameters: XML ফাইল থেকে প্যারামিটার পাস করার জন্য ব্যবহৃত হয়।
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParametersExample {
@Test
@Parameters("param")
public void testMethod(String param) {
System.out.println("Parameter: " + param);
}
}
@DependsOnMethods
@DependsOnMethods: একটি টেস্ট মেথডকে অন্য টেস্ট মেথডের উপর নির্ভরশীল করতে ব্যবহৃত হয়।
import org.testng.annotations.Test;
public class DependsExample {
@Test
public void firstTest() {
System.out.println("First Test");
}
@Test(dependsOnMethods = { "firstTest" })
public void secondTest() {
System.out.println("Second Test");
}
}
@Ignore
@Ignore: একটি নির্দিষ্ট টেস্ট মেথড বা পুরো ক্লাস টেস্ট স্যুট থেকে বাদ দিতে ব্যবহৃত হয়।
import org.testng.annotations.Test;
public class IgnoreExample {
@Test(enabled = false)
public void ignoredTest() {
System.out.println("This test will not run.");
}
}
TestNG-এর এই বেসিক অ্যানোটেশনগুলো টেস্ট কেস পরিচালনা সহজ করে এবং স্বয়ংক্রিয় টেস্টিং প্রক্রিয়াকে আরও কার্যকরী করে তোলে।
@Test টেস্টএনজির অন্যতম গুরুত্বপূর্ণ অ্যানোটেশন, যা টেস্ট মেথড নির্দেশ করতে ব্যবহার করা হয়। যখন কোনো মেথডের উপর @Test অ্যানোটেশন প্রয়োগ করা হয়, তখন টেস্টএনজি সেই মেথডটিকে একটি টেস্ট কেস হিসেবে বিবেচনা করে।
@Test অ্যানোটেশনের মূল বৈশিষ্ট্য
- একটি মেথডকে টেস্ট কেস হিসেবে চিহ্নিত করে।
- বিভিন্ন প্যারামিটার (parameters) এবং বৈশিষ্ট্য (attributes) ব্যবহার করে টেস্টিং নিয়ন্ত্রণ করা যায়।
- গ্রুপিং, নির্ভরশীলতা, এবং প্যারালাল টেস্টিং সাপোর্ট করে।
@Test অ্যানোটেশনের সহজ ব্যবহার
import org.testng.annotations.Test;
public class SimpleTest {
@Test
public void sampleTest() {
System.out.println("This is a simple TestNG test.");
}
}
আউটপুট:
This is a simple TestNG test.
উপরের কোডে, sampleTest() মেথডে @Test অ্যানোটেশন ব্যবহৃত হয়েছে। এটি টেস্টএনজি দ্বারা একটি টেস্ট কেস হিসেবে চালিত হবে।
@Test অ্যানোটেশনের বৈশিষ্ট্যসমূহ
Priority (অগ্রাধিকার নির্ধারণ)
একাধিক টেস্টের ক্ষেত্রে priority নির্ধারণ করে টেস্ট চালানোর ক্রম নির্ধারণ করা যায়।
import org.testng.annotations.Test;
public class PriorityTest {
@Test(priority = 1)
public void firstTest() {
System.out.println("First Test");
}
@Test(priority = 2)
public void secondTest() {
System.out.println("Second Test");
}
@Test(priority = 0)
public void zeroPriorityTest() {
System.out.println("Zero Priority Test");
}
}
আউটপুট:
Zero Priority Test
First Test
Second Test
Priority: ডিফল্টভাবে 0 হয়, এবং ছোট সংখ্যার টেস্ট আগে চালানো হয়।
Enabled (টেস্ট সক্রিয় বা নিষ্ক্রিয় করা)
enabled প্যারামিটার ব্যবহার করে নির্দিষ্ট কোনো টেস্ট চালানো বা এড়ানো যায়।
import org.testng.annotations.Test;
public class EnabledTest {
@Test(enabled = true)
public void activeTest() {
System.out.println("This test will run.");
}
@Test(enabled = false)
public void skippedTest() {
System.out.println("This test will not run.");
}
}
আউটপুট:
This test will run.
TimeOut (নির্দিষ্ট সময়ের মধ্যে টেস্ট চালানো)
timeOut প্যারামিটার ব্যবহার করে টেস্টের জন্য সময়সীমা নির্ধারণ করা যায়।
import org.testng.annotations.Test;
public class TimeoutTest {
@Test(timeOut = 1000) // এক সেকেন্ড
public void timeSensitiveTest() throws InterruptedException {
Thread.sleep(500); // ৫০০ মিলিসেকেন্ড
System.out.println("Test completed within time.");
}
}
যদি মেথডটি নির্ধারিত সময়ে শেষ না হয়, তবে টেস্ট ব্যর্থ হবে।
ExpectedExceptions (নির্ধারিত এক্সসেপশন হ্যান্ডলিং)
expectedExceptions প্যারামিটার ব্যবহার করে নির্দিষ্ট কোনো এক্সসেপশন টেস্ট করা যায়।
import org.testng.annotations.Test;
public class ExceptionTest {
@Test(expectedExceptions = ArithmeticException.class)
public void divisionByZeroTest() {
int result = 1 / 0;
}
}
আউটপুট:
টেস্টটি সফল হবে কারণ এটি ArithmeticException প্রত্যাশা করেছিল।
Description (টেস্ট বর্ণনা)
description প্যারামিটার ব্যবহার করে টেস্ট সম্পর্কে বিস্তারিত বর্ণনা দেওয়া যায়।
import org.testng.annotations.Test;
public class DescriptionTest {
@Test(description = "This test verifies a simple assertion.")
public void simpleAssertionTest() {
assert 1 == 1 : "Assertion failed!";
}
}
@Test অ্যানোটেশনের ব্যবহার কেন গুরুত্বপূর্ণ?
- জাভা প্রোগ্রামে টেস্ট কেসগুলোকে সঠিকভাবে চিহ্নিত এবং সংগঠিত করতে সাহায্য করে।
- টেস্টের অগ্রাধিকার, সময়সীমা এবং নির্দিষ্ট শর্তাবলী অনুযায়ী টেস্ট কনফিগার করা সহজ হয়।
- বড় প্রকল্পে টেস্ট কেস ম্যানেজমেন্ট আরও কার্যকর এবং নমনীয় হয়ে ওঠে।
@Test অ্যানোটেশন ব্যবহার করে সহজেই বিভিন্ন টেস্ট কেস তৈরি এবং পরিচালনা করা যায়।
@BeforeMethod এবং @AfterMethod হল TestNG-এর দুটি অ্যানোটেশন, যা টেস্ট মেথডের এক্সিকিউশনের আগে ও পরে নির্দিষ্ট কাজ সম্পাদনের জন্য ব্যবহৃত হয়। এগুলো প্রতিটি টেস্ট মেথডের সাথে আলাদাভাবে কাজ করে, যা টেস্টের জন্য সুনির্দিষ্ট সেটআপ এবং ক্লিনআপ নিশ্চিত করে।
@BeforeMethod
কাজ:@BeforeMethod দিয়ে চিহ্নিত মেথডটি প্রতিটি টেস্ট মেথড চালানোর আগে স্বয়ংক্রিয়ভাবে একবার কার্যকর হয়। এটি সাধারণত টেস্ট মেথডের জন্য প্রয়োজনীয় সেটআপ বা ইনিশিয়ালাইজেশনের কাজ করে।
ব্যবহার:
- ডাটাবেস সংযোগ স্থাপন।
- ব্রাউজার লঞ্চ করা (সেলেনিয়ামের ক্ষেত্রে)।
- টেস্ট ডেটা সেট আপ করা।
উদাহরণ:
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class BeforeMethodExample {
@BeforeMethod
public void setUp() {
System.out.println("Setting up for the test method.");
}
@Test
public void testMethodOne() {
System.out.println("Executing Test Method One.");
}
@Test
public void testMethodTwo() {
System.out.println("Executing Test Method Two.");
}
}
আউটপুট:
Setting up for the test method.
Executing Test Method One.
Setting up for the test method.
Executing Test Method Two.
উপরের আউটপুট থেকে দেখা যায়, প্রতিটি টেস্ট মেথড চালানোর আগে setUp মেথডটি কার্যকর হয়।
@AfterMethod
কাজ:@AfterMethod দিয়ে চিহ্নিত মেথডটি প্রতিটি টেস্ট মেথড চালানোর পরে স্বয়ংক্রিয়ভাবে একবার কার্যকর হয়। এটি সাধারণত টেস্ট মেথডের পরে ক্লিনআপ বা রিসোর্স রিলিজের কাজ করে।
ব্যবহার:
- ডাটাবেস সংযোগ বন্ধ করা।
- ব্রাউজার বন্ধ করা।
- টেস্ট ডেটা রিসেট করা।
উদাহরণ:
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;
public class AfterMethodExample {
@AfterMethod
public void tearDown() {
System.out.println("Cleaning up after the test method.");
}
@Test
public void testMethodOne() {
System.out.println("Executing Test Method One.");
}
@Test
public void testMethodTwo() {
System.out.println("Executing Test Method Two.");
}
}
আউটপুট:
Executing Test Method One.
Cleaning up after the test method.
Executing Test Method Two.
Cleaning up after the test method.
উপরের আউটপুট থেকে দেখা যায়, প্রতিটি টেস্ট মেথড শেষ হওয়ার পরে tearDown মেথডটি কার্যকর হয়।
@BeforeMethod এবং @AfterMethod একসাথে ব্যবহার
উদাহরণ:
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;
public class BeforeAfterExample {
@BeforeMethod
public void setUp() {
System.out.println("BeforeMethod: Setting up resources.");
}
@Test
public void testOne() {
System.out.println("Test: Running Test One.");
}
@Test
public void testTwo() {
System.out.println("Test: Running Test Two.");
}
@AfterMethod
public void tearDown() {
System.out.println("AfterMethod: Releasing resources.");
}
}
আউটপুট:
BeforeMethod: Setting up resources.
Test: Running Test One.
AfterMethod: Releasing resources.
BeforeMethod: Setting up resources.
Test: Running Test Two.
AfterMethod: Releasing resources.
সুবিধা
- কোড পুনরাবৃত্তি এড়ানো: টেস্ট মেথডের জন্য কমন সেটআপ এবং ক্লিনআপের কাজ এক জায়গায় রাখা যায়।
- স্বয়ংক্রিয় সম্পাদন: প্রতিটি টেস্ট মেথডের আগে ও পরে নির্ধারিত মেথড স্বয়ংক্রিয়ভাবে কার্যকর হয়, যা সময় বাঁচায়।
- টেস্ট স্ক্রিপ্ট মেইনটেনেবল: এটি টেস্ট স্ক্রিপ্টকে সহজ এবং গঠনমূলক রাখতে সাহায্য করে।
সারাংশ
@BeforeMethod প্রতিটি টেস্ট মেথড চালানোর আগে কাজ করে টেস্টের জন্য প্রস্তুতি নিশ্চিত করে, আর @AfterMethod প্রতিটি টেস্ট মেথড চালানোর পরে রিসোর্স মুক্ত করার কাজ করে। এই অ্যানোটেশনগুলো টেস্ট মেথডগুলোর নির্ভরযোগ্যতা এবং কার্যকারিতা বৃদ্ধি করে।
@BeforeClass এবং @AfterClass টেস্টএনজি-তে ব্যবহৃত গুরুত্বপূর্ণ অ্যানোটেশন, যা টেস্ট ক্লাসের শুরুতে এবং শেষে কোনো কার্যক্রম সম্পাদনের জন্য ব্যবহার করা হয়। এগুলো সাধারণত টেস্ট স্যুট চলাকালে সেটআপ বা ক্লিনআপ কার্যক্রমের জন্য ব্যবহৃত হয়।
@BeforeClass
@BeforeClass অ্যানোটেশনটি এমন একটি মেথডকে চিহ্নিত করে যা একটি টেস্ট ক্লাসের সমস্ত টেস্ট মেথড চালানোর আগে একবার এক্সিকিউট হবে। এটি মূলত টেস্ট স্যুটের জন্য প্রাথমিক সেটআপের জন্য ব্যবহার করা হয়।
@AfterClass
@AfterClass অ্যানোটেশনটি এমন একটি মেথডকে চিহ্নিত করে যা টেস্ট ক্লাসের সমস্ত টেস্ট মেথড সম্পন্ন হওয়ার পরে একবার এক্সিকিউট হয়। এটি সাধারণত ক্লিনআপ বা রিসোর্স রিলিজের জন্য ব্যবহৃত হয়।
উদাহরণ ১: টেস্ট ক্লাসের পূর্বে এবং পরে কার্যক্রম চালানো
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class ExampleTest {
@BeforeClass
public void setUp() {
System.out.println("BeforeClass: টেস্ট ক্লাস শুরু হওয়ার আগে সেটআপ করা হচ্ছে।");
}
@Test
public void testMethod1() {
System.out.println("Test 1 চলছে।");
}
@Test
public void testMethod2() {
System.out.println("Test 2 চলছে।");
}
@AfterClass
public void tearDown() {
System.out.println("AfterClass: টেস্ট ক্লাস শেষ হওয়ার পরে ক্লিনআপ করা হচ্ছে।");
}
}
আউটপুট
BeforeClass: টেস্ট ক্লাস শুরু হওয়ার আগে সেটআপ করা হচ্ছে।
Test 1 চলছে।
Test 2 চলছে।
AfterClass: টেস্ট ক্লাস শেষ হওয়ার পরে ক্লিনআপ করা হচ্ছে।
উদাহরণ ২: ডেটাবেস কানেকশন সেটআপ এবং ক্লিনআপ
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class DatabaseTest {
@BeforeClass
public void connectToDatabase() {
System.out.println("BeforeClass: ডেটাবেসের সাথে সংযোগ স্থাপন করা হচ্ছে।");
}
@Test
public void runQuery1() {
System.out.println("Query 1 চলছে।");
}
@Test
public void runQuery2() {
System.out.println("Query 2 চলছে।");
}
@AfterClass
public void disconnectFromDatabase() {
System.out.println("AfterClass: ডেটাবেস সংযোগ বন্ধ করা হচ্ছে।");
}
}
আউটপুট
BeforeClass: ডেটাবেসের সাথে সংযোগ স্থাপন করা হচ্ছে।
Query 1 চলছে।
Query 2 চলছে।
AfterClass: ডেটাবেস সংযোগ বন্ধ করা হচ্ছে।
ব্যবহারের ক্ষেত্র
- সেটআপ (Setup): টেস্ট স্যুট চালানোর আগে রিসোর্স, ডেটাবেস কানেকশন, ফাইল লোডিং ইত্যাদি কাজ করার জন্য।
- ক্লিনআপ (Cleanup): টেস্ট স্যুট শেষ হওয়ার পরে রিসোর্স রিলিজ, ডেটাবেস কানেকশন বন্ধ ইত্যাদি কাজের জন্য।
উপকারিতা
- টেস্ট ক্লাসের শুরু এবং শেষে নির্দিষ্ট কার্যক্রম পরিচালনার সুবিধা।
- কোডের পুনরাবৃত্তি কমিয়ে রাখে।
- টেস্ট স্যুট পরিচালনা আরও সহজ এবং কার্যকর হয়।
এই অ্যানোটেশনগুলোর সঠিক ব্যবহার টেস্টিং প্রক্রিয়াকে আরও সংগঠিত ও কার্যকর করে তোলে।
টেস্টএনজি (TestNG) বিভিন্ন ধরণের অ্যানোটেশন (Annotations) প্রদান করে যা টেস্ট মেথডগুলোর জীবনচক্র এবং কার্যপ্রক্রিয়া নির্ধারণে সাহায্য করে। TestNG এর অ্যানোটেশনগুলো JUnit এর থেকে উন্নত এবং নমনীয়।
বেসিক অ্যানোটেশন এবং তাদের ব্যবহার
@Test
@Test অ্যানোটেশনটি টেস্ট মেথড চিহ্নিত করতে ব্যবহৃত হয়। এটি TestNG এর সবচেয়ে মৌলিক অ্যানোটেশন।
উদাহরণ:
import org.testng.annotations.Test;
public class BasicTest {
@Test
public void testExample() {
System.out.println("This is a test method.");
}
}
আউটপুট:
This is a test method.
@BeforeMethod
@BeforeMethod অ্যানোটেশনটি এমন একটি মেথডকে নির্দেশ করে যা প্রতিটি টেস্ট মেথড চালানোর আগে একবার কার্যকর হয়।
উদাহরণ:
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class BeforeMethodExample {
@BeforeMethod
public void setup() {
System.out.println("Setup before each test.");
}
@Test
public void test1() {
System.out.println("Executing test1.");
}
@Test
public void test2() {
System.out.println("Executing test2.");
}
}
আউটপুট:
Setup before each test.
Executing test1.
Setup before each test.
Executing test2.
@AfterMethod
@AfterMethod অ্যানোটেশনটি এমন একটি মেথডকে নির্দেশ করে যা প্রতিটি টেস্ট মেথড চালানোর পরে একবার কার্যকর হয়।
উদাহরণ:
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;
public class AfterMethodExample {
@AfterMethod
public void teardown() {
System.out.println("Teardown after each test.");
}
@Test
public void test1() {
System.out.println("Executing test1.");
}
@Test
public void test2() {
System.out.println("Executing test2.");
}
}
আউটপুট:
Executing test1.
Teardown after each test.
Executing test2.
Teardown after each test.
@BeforeClass
@BeforeClass অ্যানোটেশনটি এমন একটি মেথডকে নির্দেশ করে যা টেস্ট ক্লাসের মধ্যে টেস্ট মেথড চালানোর আগে একবার কার্যকর হয়।
উদাহরণ:
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class BeforeClassExample {
@BeforeClass
public void beforeClass() {
System.out.println("Execute this before any test in the class.");
}
@Test
public void test1() {
System.out.println("Test1 is running.");
}
@Test
public void test2() {
System.out.println("Test2 is running.");
}
}
আউটপুট:
Execute this before any test in the class.
Test1 is running.
Test2 is running.
@AfterClass
@AfterClass অ্যানোটেশনটি এমন একটি মেথডকে নির্দেশ করে যা টেস্ট ক্লাসের মধ্যে সমস্ত টেস্ট মেথড চালানোর পরে একবার কার্যকর হয়।
উদাহরণ:
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
public class AfterClassExample {
@AfterClass
public void afterClass() {
System.out.println("Execute this after all tests in the class.");
}
@Test
public void test1() {
System.out.println("Test1 is running.");
}
@Test
public void test2() {
System.out.println("Test2 is running.");
}
}
আউটপুট:
Test1 is running.
Test2 is running.
Execute this after all tests in the class.
@DataProvider
@DataProvider ব্যবহার করে ডেটা-ড্রিভেন টেস্ট তৈরি করা যায়। এটি একই টেস্ট মেথড একাধিক ইনপুট দিয়ে চালানোর সুযোগ দেয়।
উদাহরণ:
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class DataProviderExample {
@DataProvider(name = "testData")
public Object[][] dataProvider() {
return new Object[][] {
{"Alice", 25},
{"Bob", 30}
};
}
@Test(dataProvider = "testData")
public void testData(String name, int age) {
System.out.println("Name: " + name + ", Age: " + age);
}
}
আউটপুট:
Name: Alice, Age: 25
Name: Bob, Age: 30
বেসিক অ্যানোটেশনের কার্যক্রমের ধারা
১. @BeforeClass: ক্লাস লেভেলে প্রথম কার্যকর হয়।
২. @BeforeMethod: প্রতিটি টেস্ট মেথড চালানোর আগে কার্যকর হয়।
৩. @Test: টেস্ট মেথড কার্যকর হয়।
৪. @AfterMethod: প্রতিটি টেস্ট মেথড চালানোর পরে কার্যকর হয়।
৫. @AfterClass: ক্লাস লেভেলে সবশেষে কার্যকর হয়।
TestNG এর মাধ্যমে বেসিক টেস্টিং সহজ এবং কার্যকর হয়, বিশেষ করে এই অ্যানোটেশনগুলো ব্যবহারে। এগুলো টেস্ট স্যুটকে মডিউলার এবং রিইউজেবল করতে সাহায্য করে।
Read more