TestNG ব্যবহার করে কার্যকরী টেস্ট ডিজাইন করা একটি গুরুত্বপূর্ণ দিক, যা টেস্টের নির্ভুলতা এবং স্থায়িত্ব নিশ্চিত করতে সহায়তা করে। নিচে TestNG টেস্ট ডিজাইনের জন্য কিছু Best Practices তুলে ধরা হলো, যা আপনি আপনার টেস্ট প্রোজেক্টে প্রয়োগ করতে পারেন।
1. টেস্ট মেথডগুলির নামকরণ
Best Practice: টেস্ট মেথডের নাম এমনভাবে রাখা উচিত, যা টেস্টের উদ্দেশ্য স্পষ্টভাবে তুলে ধরে।
- না করুণ:
test1,test2 - করুন:
testAdditionOfTwoNumbers,testUserLoginWithValidCredentials
এতে করে টেস্ট মেথডের কার্যকলাপ সহজেই বুঝতে পারবেন এবং টেস্ট রিপোর্টে কোনও দ্বন্দ্ব বা বিভ্রান্তি হবে না।
2. টেস্ট ক্লাসের সিস্টেমিক ডিজাইন
Best Practice: প্রতিটি টেস্ট ক্লাসের উদ্দেশ্য এবং কার্যক্রম স্পষ্টভাবে সংজ্ঞায়িত করা উচিত।
- না করুণ: এক ক্লাসে সব ধরনের টেস্ট রাখা।
- করুন: নির্দিষ্ট কার্যকলাপের জন্য আলাদা টেস্ট ক্লাস তৈরি করুন। যেমন:
LoginTest,CheckoutTest,SearchTest
এতে কোডের পুনরাবৃত্তি কমে এবং টেস্টের কাঠামো পরিষ্কার হয়।
3. ডেটা ড্রিভেন টেস্টিং (Data-Driven Testing)
Best Practice: DataProvider ব্যবহার করুন যাতে একাধিক ডেটা দিয়ে একই টেস্ট মেথডটি চালানো যায়। এটি কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে।
উদাহরণ:
@DataProvider(name = "userData")
public Object[][] provideData() {
return new Object[][] {
{"user1", "password1"},
{"user2", "password2"},
};
}
@Test(dataProvider = "userData")
public void testLogin(String username, String password) {
// টেস্ট লজিন
}
এতে একাধিক ব্যবহারকারীর তথ্য দিয়ে একই টেস্ট মেথড চলানো যায়, যা ডেটা ড্রিভেন টেস্টিংয়ের একটি ভাল উদাহরণ।
4. টেস্টে লজিক ও সাইড-ইফেক্টগুলি এড়ানো
Best Practice: টেস্ট মেথডে কোনো ধরনের সাইড-ইফেক্ট (যেমন: ডেটাবেস আপডেট, ফাইল লেখার কাজ) করা উচিত নয়, কারণ এটি পরবর্তী টেস্টের ফলাফলকে প্রভাবিত করতে পারে।
- না করুণ: টেস্ট মেথডে ডেটাবেসে রেকর্ড ইনসার্ট করা বা ফাইল লেখার কাজ করা।
- করুন: @BeforeMethod এবং @AfterMethod ব্যবহার করে টেস্টের জন্য প্রয়োজনীয় পরিবেশ প্রস্তুত করুন, এবং টেস্ট শেষে তা রিসেট করুন।
5. গ্রুপিং এবং প্রায়োরিটি ব্যবহার
Best Practice: টেস্টের কার্যকারিতা এবং পরিচালনার জন্য গ্রুপিং এবং প্রায়োরিটি ব্যবহার করুন।
গ্রুপিং (Grouping)
গ্রুপিং টেস্ট ক্লাস বা মেথডকে একটি নির্দিষ্ট ক্যাটেগরিতে সংগঠিত করে। যেমন, sanity, regression, smoke ইত্যাদি।
@Test(groups = {"smoke"})
public void testSmokeLogin() {
// ...
}
প্রায়োরিটি (Priority)
টেস্ট মেথডের কার্যক্রমকে priority দিয়ে নিয়ন্ত্রণ করুন। এতে গুরুত্বপূর্ণ টেস্ট আগে চালানো যাবে।
@Test(priority = 1)
public void testLogin() {
// ...
}
@Test(priority = 2)
public void testSearch() {
// ...
}
6. টেস্ট ফলাফল এবং রিপোর্টিং
Best Practice: টেস্ট এক্সিকিউশন শেষে ফলাফল বিশ্লেষণ করতে TestNG-এর ডিফল্ট HTML এবং XML রিপোর্ট ব্যবহার করুন। এছাড়া, SoftAssertions ব্যবহার করুন যাতে টেস্ট মেথড ফেইল হলে পুরো স্যুট ব্যর্থ না হয়।
import org.testng.asserts.SoftAssert;
SoftAssert softAssert = new SoftAssert();
softAssert.assertEquals(actual, expected);
softAssert.assertAll();
এতে করে যদি কোনো অ্যাসারশন ফেইল হয়, তাহলে অন্য অ্যাসারশনগুলোও কার্যকরী থাকবে।
7. টেস্ট স্যুট এবং কনফিগারেশন
Best Practice: টেস্ট কনফিগারেশন এবং স্যুটের জন্য TestNG XML ফাইল ব্যবহার করুন। এটি টেস্ট এক্সিকিউশন এবং কনফিগারেশন পরিচালনা করার জন্য সহায়ক।
TestNG XML উদাহরণ:
<suite name="My Suite">
<test name="Login Tests">
<parameter name="username" value="user1"/>
<classes>
<class name="LoginTest"/>
</classes>
</test>
</suite>
এটি টেস্ট স্যুট এবং নির্দিষ্ট প্যারামিটার পরিচালনার জন্য ব্যবহৃত হবে।
8. টেস্টের জন্য ডিপেন্ডেন্সি ব্যবহার
Best Practice: এক টেস্ট মেথডের সফলতা অন্য টেস্টের উপর নির্ভর করলে, @DependsOnMethods ব্যবহার করুন। তবে, এটি খুবই সতর্কতার সাথে ব্যবহার করা উচিত।
@Test
public void testLogin() {
// Login টেস্ট
}
@Test(dependsOnMethods = {"testLogin"})
public void testSearch() {
// Search টেস্ট
}
এতে করে, testSearch শুধুমাত্র testLogin পাস হলে চলবে।
9. টেস্টের জন্য এওয়ারনেস এবং ডিবাগিং
Best Practice: টেস্ট মেথডে লগিং ব্যবহার করুন যাতে ডিবাগিংয়ের জন্য বিস্তারিত তথ্য পাওয়া যায়।
import org.testng.Reporter;
@Test
public void testLogin() {
Reporter.log("Login টেস্ট শুরু হচ্ছে...");
// টেস্ট লজিন
Reporter.log("Login টেস্ট শেষ...");
}
এটি টেস্ট রান করার সময় লগ মেসেজ তৈরি করবে, যা পরে ডিবাগিংয়ের জন্য সহায়ক হতে পারে।
10. টেস্ট রানার এবং কনকারেন্সি
Best Practice: Parallel Execution সক্ষম করুন, যাতে একাধিক টেস্ট একই সময়ে রান করতে পারে এবং টেস্টের সময় কমানো যায়।
TestNG XML এ প্যারালাল এক্সিকিউশন:
<suite name="Parallel Suite" parallel="tests" thread-count="3">
<test name="Test1">
<classes>
<class name="Test1"/>
</classes>
</test>
<test name="Test2">
<classes>
<class name="Test2"/>
</classes>
</test>
</suite>
এতে Test1 এবং Test2 একই সময়ে রান করবে, যা টেস্টের কার্যকারিতা দ্রুত করতে সাহায্য করে।
সারাংশ
TestNG-তে টেস্ট ডিজাইন করার জন্য বিভিন্ন Best Practices অনুসরণ করলে টেস্টিং প্রক্রিয়া আরও কার্যকর এবং স্থিতিশীল হয়। সঠিক নামকরণ, ডেটা ড্রিভেন টেস্টিং, গ্রুপিং, কনফিগারেশন এবং রিপোর্টিং পদ্ধতিগুলি অনুসরণ করে টেস্টগুলির ফলাফল এবং রক্ষণাবেক্ষণ সহজতর করা যায়।
Read more