TestNG-এর প্যারামিটারাইজেশন হলো এমন একটি ফিচার যা টেস্ট কেসগুলোতে ডায়নামিক ডেটা পাস করার সুযোগ দেয়। এটি বিশেষত তখন উপযোগী হয়, যখন একই টেস্ট কেস বিভিন্ন ইনপুট ডেটার জন্য একাধিকবার চালানোর প্রয়োজন হয়।
TestNG প্যারামিটারাইজেশন প্রধানত দুইভাবে করা যায়:
TestNG XML ফাইল ব্যবহার করে প্যারামিটার ডিফাইন এবং পাস করা হয়। XML প্যারামিটারাইজেশনের মাধ্যমে ইনপুট ডেটা সরাসরি XML কনফিগারেশন ফাইলে সংজ্ঞায়িত করা হয়।
XML ফাইল:
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="Parameter Test">
<parameter name="username" value="testUser" />
<parameter name="password" value="pass123" />
<classes>
<class name="com.example.ParameterTest" />
</classes>
</test>
</suite>
Java কোড:
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParameterTest {
@Test
@Parameters({ "username", "password" })
public void loginTest(String username, String password) {
System.out.println("Username: " + username);
System.out.println("Password: " + password);
}
}
আউটপুট:
Username: testUser
Password: pass123
@DataProvider হলো TestNG-এর আরেকটি শক্তিশালী প্যারামিটারাইজেশন ফিচার। এটি ডেটা ড্রাইভেন টেস্টিং (Data-Driven Testing) করার জন্য ব্যবহৃত হয়, যেখানে টেস্ট মেথডে একাধিক ইনপুট ডেটা পাস করা হয়।
Java কোড:
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class DataProviderTest {
@DataProvider(name = "loginData")
public Object[][] dataProviderMethod() {
return new Object[][] {
{ "user1", "pass1" },
{ "user2", "pass2" },
{ "user3", "pass3" }
};
}
@Test(dataProvider = "loginData")
public void loginTest(String username, String password) {
System.out.println("Username: " + username);
System.out.println("Password: " + password);
}
}
আউটপুট:
Username: user1
Password: pass1
Username: user2
Password: pass2
Username: user3
Password: pass3
বৈশিষ্ট্য | XML প্যারামিটারাইজেশন | @DataProvider প্যারামিটারাইজেশন |
---|---|---|
ডেটা স্টোরেজ | XML ফাইলে স্ট্যাটিক ডেটা | কোডের মধ্যে ডাইনামিক ডেটা |
ইনপুট ফ্লেক্সিবিলিটি | সীমিত | আরও বেশি ফ্লেক্সিবল |
ডেটা ড্রাইভেন টেস্টিং | সম্ভব নয় | সম্পূর্ণ সম্ভব |
পর্যবেক্ষণযোগ্যতা | XML ফাইলের মাধ্যমে সহজ | কোডের মধ্যে যুক্ত করা প্রয়োজন |
১. ডেটা ড্রাইভেন টেস্টিং: একাধিক ইনপুট ডেটা ব্যবহার করে টেস্টিং প্রক্রিয়াকে সহজ করে।
২. রিইউজেবল টেস্ট কেস: এক টেস্ট মেথড দিয়ে বিভিন্ন ডেটা দিয়ে কাজ করা যায়।
৩. পরীক্ষণক্ষেত্রের বৈচিত্র: একই ফিচারের জন্য বিভিন্ন ধরনের ইনপুট যাচাই করা সহজ হয়।
৪. রানটাইম ডেটা পাস: টেস্ট কেস চলাকালীন ডেটা পাসের সুযোগ দেয়।
TestNG প্যারামিটারাইজেশন টেস্টিং প্রক্রিয়াকে আরও কার্যকরী এবং ডাইনামিক করে তোলে, বিশেষত যেখানে বড় পরিসরে ডেটা ড্রাইভেন টেস্টিং প্রয়োজন। XML এবং @DataProvider উভয়ই ভিন্ন পরিস্থিতিতে টেস্টিংয়ের জন্য উপযোগী।
টেস্ট প্যারামিটারাইজেশন (Test Parameterization) একটি গুরুত্বপূর্ণ ধারণা যা টেস্টএনজি-তে টেস্ট কেসগুলোকে ডাইনামিক ডেটার সঙ্গে চালাতে ব্যবহার করা হয়। এটি মূলত একই টেস্ট কেসে ভিন্ন ভিন্ন ডেটা ইনপুট দিয়ে টেস্ট করার জন্য ব্যবহৃত হয়। প্যারামিটারাইজেশন আপনাকে কোড পুনঃব্যবহারযোগ্য করতে এবং ম্যানুয়াল ডেটা পরিবর্তনের ঝামেলা থেকে মুক্তি দেয়।
টেস্টএনজিতে প্যারামিটারাইজড টেস্ট করার দুটি পদ্ধতি রয়েছে:
আপনি TestNG.xml ফাইল ব্যবহার করে টেস্টে প্যারামিটার পাস করতে পারেন।
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParameterizationWithXML {
@Test
@Parameters({"username", "password"})
public void loginTest(String username, String password) {
System.out.println("Username: " + username);
System.out.println("Password: " + password);
}
}
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="Parameter Test">
<parameter name="username" value="testUser"/>
<parameter name="password" value="testPass"/>
<classes>
<class name="ParameterizationWithXML"/>
</classes>
</test>
</suite>
Username: testUser
Password: testPass
TestNG.xml এর মাধ্যমে ইনপুট প্যারামিটার সরবরাহ করা হয় এবং @Parameters অ্যানোটেশন ব্যবহার করে মেথডে তা রিসিভ করা হয়।
@DataProvider একটি শক্তিশালী পদ্ধতি যা একাধিক ডেটা সেট সরবরাহ করতে পারে। এটি বড় আকারের ডেটা-চালিত টেস্টিং-এর জন্য আরও কার্যকর।
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class ParameterizationWithDataProvider {
@DataProvider(name = "loginData")
public Object[][] provideData() {
return new Object[][]{
{"user1", "pass1"},
{"user2", "pass2"},
{"user3", "pass3"}
};
}
@Test(dataProvider = "loginData")
public void loginTest(String username, String password) {
System.out.println("Username: " + username + ", Password: " + password);
}
}
Username: user1, Password: pass1
Username: user2, Password: pass2
Username: user3, Password: pass3
এখানে @DataProvider
একটি ডেটা সোর্স হিসেবে কাজ করে এবং loginTest
মেথডে প্যারামিটার পাস করে।
বৈশিষ্ট্য | TestNG.xml | @DataProvider |
---|---|---|
ডেটা সোর্স | স্ট্যাটিক ডেটা | ডায়নামিক এবং প্রোগ্রাম্যাটিক ডেটা |
ডেটার নমনীয়তা | সীমিত নমনীয়তা | বড় ডেটাসেট সাপোর্ট করে |
মাল্টিপল ইনপুট | সীমিত | একাধিক ডেটা সেট সহজেই সাপোর্ট করে |
ইনটিগ্রেশন | সহজ, ম্যানুয়াল | জাভা কোডের মাধ্যমে কাস্টমাইজেবল |
টেস্টএনজি-তে টেস্ট প্যারামিটারাইজেশন বড় প্রজেক্টের জন্য একটি অত্যন্ত কার্যকর পদ্ধতি। এটি একই টেস্ট কেসে ভিন্ন ভিন্ন ডেটার ওপর ভিত্তি করে পরীক্ষার মাধ্যমে কোডের কার্যকারিতা নিশ্চিত করতে সাহায্য করে।
@Parameters অ্যানোটেশনটি টেস্ট মেথডে ডেটা পাস করার জন্য TestNG-তে ব্যবহৃত হয়। এটি মূলত TestNG XML ফাইলের মাধ্যমে টেস্ট মেথডে ইনপুট প্যারামিটার পাস করার একটি সুবিধাজনক পদ্ধতি।
<parameter>
ট্যাগ ব্যবহার করে প্যারামিটার ডিফাইন করতে হয়।@Parameters
অ্যানোটেশন ব্যবহার করে টেস্ট মেথডে XML ফাইল থেকে প্যারামিটার রিড করা হয়।ধরুন, আমরা একটি টেস্ট মেথড তৈরি করব যেখানে দুটি প্যারামিটার username এবং password পাস করা হবে।
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParametersExample {
@Test
@Parameters({"username", "password"})
public void loginTest(String username, String password) {
System.out.println("Username: " + username);
System.out.println("Password: " + password);
}
}
testng.xml ফাইল:
<suite name="SuiteExample">
<test name="LoginTest">
<parameter name="username" value="testuser"/>
<parameter name="password" value="password123"/>
<classes>
<class name="ParametersExample"/>
</classes>
</test>
</suite>
Username: testuser
Password: password123
TestNG-তে একাধিক প্যারামিটার পাস করা সহজ। টেস্ট মেথডে একাধিক প্যারামিটার যোগ করে এবং XML ফাইলে তাদের ডিফাইন করে এটি সম্পন্ন করা যায়।
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class MultiParametersExample {
@Test
@Parameters({"url", "browser", "timeout"})
public void configTest(String url, String browser, int timeout) {
System.out.println("URL: " + url);
System.out.println("Browser: " + browser);
System.out.println("Timeout: " + timeout);
}
}
testng.xml:
<suite name="SuiteExample">
<test name="ConfigTest">
<parameter name="url" value="http://example.com"/>
<parameter name="browser" value="Chrome"/>
<parameter name="timeout" value="30"/>
<classes>
<class name="MultiParametersExample"/>
</classes>
</test>
</suite>
আউটপুট:
URL: http://example.com
Browser: Chrome
Timeout: 30
যদি XML ফাইলে কোনো প্যারামিটার উল্লেখ না করা হয়, তবে ডিফল্ট ভ্যালু সেট করা যায় কোডের মধ্যে।
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class DefaultParametersExample {
@Test
@Parameters({"username", "password"})
public void loginTest(String username, String password) {
// ডিফল্ট ভ্যালু
if (username == null) username = "defaultUser";
if (password == null) password = "defaultPass";
System.out.println("Username: " + username);
System.out.println("Password: " + password);
}
}
@Parameters অ্যানোটেশন TestNG-তে টেস্ট মেথডে সহজে প্যারামিটার পাস করার সুযোগ দেয়। এটি বিশেষ করে কনফিগারেশন সেটআপ এবং পরিবেশভিত্তিক টেস্টিংয়ের জন্য কার্যকর। TestNG XML ফাইলের সাথে একত্রে কাজ করে এটি টেস্ট স্ক্রিপ্টের গঠন আরও সহজ করে তোলে।
TestNG XML কনফিগারেশন ফাইল ব্যবহার করে টেস্ট মেথডে প্যারামিটার (Parameter) পাস করা সম্ভব। এটি সাধারণত টেস্ট কনফিগারেশনের সময় ভিন্ন ডেটা প্রদান করতে ব্যবহৃত হয়।
<parameter>
ট্যাগ ব্যবহার করে প্যারামিটার ডিফাইন করুন।@Parameters
অ্যানোটেশন ব্যবহার করুন।<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Parameter Suite">
<test name="Parameter Test">
<parameter name="username" value="TestUser"/>
<parameter name="password" value="12345"/>
<classes>
<class name="ParameterExample"/>
</classes>
</test>
</suite>
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParameterExample {
@Test
@Parameters({"username", "password"})
public void testMethod(String username, String password) {
System.out.println("Username: " + username);
System.out.println("Password: " + password);
}
}
Username: TestUser
Password: 12345
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Parameter Suite">
<test name="Default Parameter Test">
<parameter name="env" value="Production"/>
<classes>
<class name="DefaultParameterExample"/>
</classes>
</test>
</suite>
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class DefaultParameterExample {
@Test
@Parameters({"env"})
public void testMethod(String env) {
System.out.println("Environment: " + env);
}
}
Environment: Production
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Multiple Parameter Suite">
<test name="Multiple Parameter Test">
<parameter name="browser" value="Chrome"/>
<parameter name="version" value="110.0"/>
<classes>
<class name="MultipleParameterExample"/>
</classes>
</test>
</suite>
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class MultipleParameterExample {
@Test
@Parameters({"browser", "version"})
public void testMethod(String browser, String version) {
System.out.println("Browser: " + browser);
System.out.println("Version: " + version);
}
}
Browser: Chrome
Version: 110.0
বৈশিষ্ট্য | DataProvider | TestNG XML প্যারামিটার |
---|---|---|
ডেটা উৎস | কোডে ডেটা সরবরাহ করা হয়। | XML ফাইল থেকে ডেটা সরবরাহ করা হয়। |
প্রতিস্থাপন ক্ষমতা | জটিল ডেটা সেটের জন্য কার্যকর। | সাধারণ প্যারামিটার পাস করার জন্য কার্যকর। |
ডাইনামিক ডেটা | ডাইনামিক ডেটা জেনারেট করা যায়। | ডেটা স্ট্যাটিক থাকে। |
TestNG XML এর মাধ্যমে প্যারামিটার পাস করা সহজ এবং কার্যকর পদ্ধতি, বিশেষত যেখানে ডেটা কনফিগারেবল এবং সহজে পরিবর্তনযোগ্য হওয়া দরকার। এটি প্রজেক্টের টেস্ট কনফিগারেশনকে আরও উন্নত করে।
Parameterization টেস্টএনজি (TestNG) তে এমন একটি ফিচার যা টেস্ট মেথডে ডায়নামিক ডেটা প্রদান করতে ব্যবহার করা হয়। এটি কনফিগারেশন ফাইল (TestNG XML) বা @Parameters অ্যানোটেশনের মাধ্যমে ইনপুট সরবরাহ করে।
TestNG XML ফাইল ব্যবহার করে টেস্ট মেথডে ডেটা সরবরাহ করা যায়।
উদাহরণ:
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class ParameterizationExample {
@Test
@Parameters({"username", "password"})
public void testLogin(String username, String password) {
System.out.println("Username: " + username);
System.out.println("Password: " + password);
}
}
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="ParameterizationSuite">
<test name="LoginTest">
<classes>
<class name="ParameterizationExample">
<parameter name="username" value="admin"/>
<parameter name="password" value="admin123"/>
</class>
</classes>
</test>
</suite>
আউটপুট:
Username: admin
Password: admin123
@DataProvider অ্যানোটেশন ব্যবহার করে একাধিক ইনপুট সরবরাহ করা যায়। এটি ডেটা-ড্রিভেন টেস্টিংয়ে বেশি ব্যবহৃত হয়।
উদাহরণ:
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class DataProviderExample {
@DataProvider(name = "loginData")
public Object[][] dataProviderMethod() {
return new Object[][] {
{"admin", "admin123"},
{"user1", "password1"},
{"user2", "password2"}
};
}
@Test(dataProvider = "loginData")
public void testLogin(String username, String password) {
System.out.println("Username: " + username + ", Password: " + password);
}
}
আউটপুট:
Username: admin, Password: admin123
Username: user1, Password: password1
Username: user2, Password: password2
উদাহরণ: দুই সংখ্যার যোগফল টেস্ট করার জন্য Parameterization ব্যবহার।
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class CalculatorTest {
@Test
@Parameters({"num1", "num2"})
public void testAddition(int num1, int num2) {
int result = num1 + num2;
System.out.println("Addition of " + num1 + " and " + num2 + " is: " + result);
}
}
TestNG XML:
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="CalculatorSuite">
<test name="AdditionTest">
<classes>
<class name="CalculatorTest">
<parameter name="num1" value="10"/>
<parameter name="num2" value="20"/>
</class>
</classes>
</test>
</suite>
আউটপুট:
Addition of 10 and 20 is: 30
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class CalculatorDataProvider {
@DataProvider(name = "additionData")
public Object[][] dataProviderMethod() {
return new Object[][] {
{5, 3, 8},
{10, 15, 25},
{7, -2, 5}
};
}
@Test(dataProvider = "additionData")
public void testAddition(int num1, int num2, int expectedResult) {
int actualResult = num1 + num2;
System.out.println("Addition of " + num1 + " and " + num2 + " is: " + actualResult);
assert actualResult == expectedResult : "Test Failed!";
}
}
আউটপুট:
Addition of 5 and 3 is: 8
Addition of 10 and 15 is: 25
Addition of 7 and -2 is: 5
TestNG-র Parameterization বৈশিষ্ট্য ডেটা-ড্রিভেন টেস্টিংয়ের একটি অত্যন্ত কার্যকর উপায়। এটি কনফিগারেশন ফাইল বা @DataProvider ব্যবহার করে টেস্ট মেথডে ইনপুট প্রদান সহজ করে। এটি বড় মাপের টেস্টিং প্রজেক্টে সময় বাঁচায় এবং টেস্ট কভারেজ উন্নত করে।
Read more