TestNG একটি শক্তিশালী টেস্ট ফ্রেমওয়ার্ক যা টেস্ট রান পরিচালনা ও নিয়ন্ত্রণ করার অনেক উপায় প্রদান করে। এক্ষেত্রে, টেস্টের ফলাফল পুনরায় প্রয়োগ করার জন্য Retry Logic ব্যবহারের প্রয়োজন হতে পারে, বিশেষ করে যখন কোনো টেস্ট একাধিকবার ব্যর্থ হয়। Retry Logic টেস্ট ফ্রেমওয়ার্কে একটি কাস্টম লজিক প্রয়োগ করার মাধ্যমে ব্যর্থ টেস্টগুলো পুনরায় চালানোর সুযোগ দেয়।
Retry Logic কী?
Retry Logic এমন একটি পদ্ধতি যা টেস্টের ব্যর্থতার পর টেস্টটি পুনরায় চালানোর প্রক্রিয়াকে কন্ট্রোল করে। টেস্টNG তে এটি সাধারণত IRetryAnalyzer ইন্টারফেসের মাধ্যমে ব্যবহৃত হয়। এই ইন্টারফেসটি আপনাকে টেস্টের ব্যর্থতার পর সেটি পুনরায় চালানোর জন্য কাস্টম লজিক প্রয়োগ করার সুযোগ দেয়।
IRetryAnalyzer Interface
IRetryAnalyzer একটি ইন্টারফেস যা দুটি মূল মেথড সরবরাহ করে:
- retry(ITestResult result): যখন কোনো টেস্ট ব্যর্থ হয়, তখন এটি কল হয় এবং এটি একটি বুলিয়ান মান প্রদান করে যা নির্দেশ করে যে টেস্ট পুনরায় চালানো উচিত কিনা।
Retry Logic কিভাবে কাজ করে?
- যদি কোনো টেস্ট প্রথমবার ব্যর্থ হয়, তাহলে এটি
retry()মেথডের মাধ্যমে আবার চেষ্টা করা হয়। - আপনি কতবার টেস্ট পুনরায় চালাতে চান, তা নির্দিষ্ট করতে পারবেন।
উদাহরণ: Retry Logic প্রয়োগ করা
- RetryAnalyzer ক্লাস তৈরি করা
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
public class RetryAnalyzer implements IRetryAnalyzer {
private int count = 0;
private int maxRetryCount = 3; // সর্বোচ্চ ৩ বার পুনরায় চেষ্টা
@Override
public boolean retry(ITestResult result) {
if (count < maxRetryCount) {
count++;
return true; // টেস্ট পুনরায় চেষ্টা হবে
}
return false; // পুনরায় চেষ্টা করা হবে না
}
}
এখানে, আমরা maxRetryCount নির্ধারণ করেছি, যার মানে টেস্টটি ৩ বার পর্যন্ত পুনরায় চেষ্টা করা হবে।
- RetryAnalyzer টেস্ট ক্লাসে প্রয়োগ করা
import org.testng.annotations.Test;
public class MyTest {
@Test(retryAnalyzer = RetryAnalyzer.class)
public void testMethod() {
System.out.println("টেস্ট চালানো হচ্ছে...");
// ব্যর্থ হওয়ার জন্য একটি কৃত্রিম ব্যতিক্রম সৃষ্টি করা
assert false;
}
}
এখানে, @Test অ্যানোটেশন এর মধ্যে retryAnalyzer প্রপার্টি ব্যবহার করে RetryAnalyzer.class রেফারেন্স করা হয়েছে। এতে যদি টেস্টটি ব্যর্থ হয়, তাহলে এটি পুনরায় চালানোর চেষ্টা করবে যতক্ষণ না maxRetryCount পূর্ণ হয়।
Retry Logic কনফিগারেশন
যদি আপনি টেস্টগুলোর জন্য Retry Logic কনফিগার করতে চান, তবে XML কনফিগারেশন ফাইলের মাধ্যমে এই লজিক প্রয়োগ করা সম্ভব নয়। এজন্য, retryAnalyzer ফিচারটি কোডের মাধ্যমে যুক্ত করতে হবে, যেমন উপরে দেখানো হয়েছে।
Retry Logic এর সুবিধা
- টেস্ট রিলায়েবিলিটি বাড়ানো: কোনো নির্দিষ্ট টেস্ট যদি পরিবেশ বা রেসোর্স সমস্যার কারণে একবার ব্যর্থ হয়, Retry Logic সেটি পুনরায় চেষ্টা করে সঠিক ফলাফল দেয়।
- স্টেবল রেজাল্ট: কিছু টেস্ট পরিবেশগত কারণে অস্থির হতে পারে, Retry Logic সে ধরনের টেস্টগুলোকে পুনরায় ট্রাই করে একদম সঠিক রেজাল্ট প্রদান করতে পারে।
- ইফিশিয়েন্ট ডিবাগিং: টেস্টগুলো পুনরায় চালানোর ফলে ব্যর্থতার সঠিক কারণ চিহ্নিত করা সহজ হয়ে যায়।
Retry Logic এর সীমাবদ্ধতা
- টাইমিং: টেস্ট পুনরায় চালানোর প্রক্রিয়া সময়সাপেক্ষ হতে পারে এবং দীর্ঘ সময় পর্যন্ত চলে যেতে পারে।
- অত্যধিক Retry: অনেকবার পুনরায় চেষ্টা করলে, এটি কার্যকরী টেস্ট ফলাফল প্রদান করতে ব্যর্থ হতে পারে, বিশেষ করে যদি সমস্যা টেস্ট কেসের কোডে থাকে।
- রিসোর্স প্রয়োজন: অনেক টেস্ট পুনরায় চালানো হলে সার্ভার বা টেস্টিং রিসোর্সের উপরে বাড়তি চাপ পড়তে পারে।
সারাংশ
TestNG তে Retry Logic প্রয়োগ করা টেস্ট রান আরও স্থিতিশীল ও নির্ভরযোগ্য করতে সাহায্য করে, বিশেষ করে যখন কিছু টেস্ট র্যান্ডম বা পরিবেশগত কারণে ব্যর্থ হয়। IRetryAnalyzer ইন্টারফেসের মাধ্যমে আপনি ব্যর্থ টেস্টগুলো পুনরায় চালানোর জন্য কাস্টম লজিক তৈরি করতে পারেন, যা টেস্ট ফলাফল নিয়ে কাজ করার সময় কার্যকরী হতে পারে।
TestNG একটি শক্তিশালী টেস্টিং ফ্রেমওয়ার্ক যা টেস্টের ফলাফল ট্র্যাক করতে এবং ব্যর্থ টেস্টগুলি পুনরায় চালাতে সহায়ক ফিচার প্রদান করে। অনেক সময় টেস্ট চলাকালীন কিছু টেস্ট ব্যর্থ হতে পারে। এর মধ্যে কিছু সময় সিস্টেমের কারণে বা ডিপেন্ডেন্সির কারণে ব্যর্থতা হতে পারে। TestNG এ ব্যর্থ টেস্ট পুনরায় চালানোর জন্য কিছু কৌশল রয়েছে যা টেস্ট রানকে আরও নির্ভরযোগ্য এবং কার্যকরী করে তোলে।
ব্যর্থ টেস্ট পুনরায় চালানোর জন্য @Test অ্যানোটেশন ব্যবহার
TestNG এর একটি সুবিধা হলো আপনি @Test অ্যানোটেশনে enabled অ্যাট্রিবিউট ব্যবহার করতে পারেন, যা টেস্ট সফল না হলে সেটি আবার চালানোর জন্য নির্দেশ দেয়। এই পদ্ধতিতে, একটি নির্দিষ্ট সংখ্যক বার ব্যর্থ হলে টেস্টটি পুনরায় চালানো যাবে।
১. Retry Analyzer ব্যবহার করা
TestNG এ ব্যর্থ টেস্ট পুনরায় চালানোর একটি জনপ্রিয় পদ্ধতি হলো Retry Analyzer ব্যবহার করা। এটি ব্যর্থ টেস্ট মেথডে আবার চেষ্টা করে। আপনাকে একটি IRetryAnalyzer ইন্টারফেস ইমপ্লিমেন্ট করতে হবে যা ব্যর্থ টেস্ট পুনরায় চালাবে।
১.১ IRetryAnalyzer ইন্টারফেস ইমপ্লিমেন্ট করা
প্রথমে IRetryAnalyzer ইন্টারফেসটি ইমপ্লিমেন্ট করুন। এখানে, যদি টেস্টটি ব্যর্থ হয়, তখন এটি পুনরায় নির্দিষ্ট সংখ্যক বার চেষ্টা করবে।
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
public class RetryAnalyzer implements IRetryAnalyzer {
private int count = 0;
private int maxRetryCount = 3; // সর্বাধিক ৩ বার চেষ্টা করবে
@Override
public boolean retry(ITestResult result) {
if (count < maxRetryCount) {
count++;
return true; // পুনরায় টেস্ট চালানো হবে
}
return false; // আর পুনরায় টেস্ট চালানো হবে না
}
}
এখানে maxRetryCount হলো কতবার টেস্টটি পুনরায় চালানো হবে। আপনি এই মানটি পরিবর্তন করতে পারেন আপনার প্রয়োজন অনুসারে।
১.২ @Test অ্যানোটেশনে retryAnalyzer ব্যবহার করা
এখন @Test অ্যানোটেশনটিতে retryAnalyzer ব্যবহার করে আপনার টেস্টে Retry Analyzer যুক্ত করুন।
import org.testng.annotations.Test;
public class TestClass {
@Test(retryAnalyzer = RetryAnalyzer.class)
public void testMethod1() {
System.out.println("টেস্ট ১ চালানো হচ্ছে");
}
@Test(retryAnalyzer = RetryAnalyzer.class)
public void testMethod2() {
System.out.println("টেস্ট ২ চালানো হচ্ছে");
throw new RuntimeException("একটি ত্রুটি ঘটেছে");
}
}
এখানে, testMethod2 টেস্টটি যদি প্রথমবার ব্যর্থ হয়, তাহলে এটি ৩ বার পর্যন্ত পুনরায় চালানো হবে।
২. @Test এর successPercentage ব্যবহার
TestNG এর আরেকটি উপায় হলো successPercentage ব্যবহার করা, যা আপনার টেস্টের সফলতার হার অনুযায়ী ব্যর্থ টেস্টগুলো পুনরায় চালানো নিশ্চিত করে। আপনি @Test অ্যানোটেশনে successPercentage প্রপার্টি সেট করতে পারেন।
@Test(successPercentage = 80, invocationCount = 10)
public void testMethod() {
System.out.println("এই টেস্টটি ১০ বার চালানো হবে এবং সফলতার হার ৮০% থাকতে হবে");
}
এখানে invocationCount সেট করা হয়েছে ১০, অর্থাৎ টেস্টটি মোট ১০ বার চালানো হবে এবং সফলতার হার ৮০% হলে টেস্টটি সফল হিসেবে গণ্য হবে। ব্যর্থতার পরও টেস্ট পুনরায় চালানোর সুযোগ থাকে।
৩. testng.xml ফাইল ব্যবহার করে পুনরায় টেস্ট চালানো
TestNG এর testng.xml কনফিগারেশন ফাইলেও আপনি ব্যর্থ টেস্ট পুনরায় চালানোর জন্য কিছু সেটিংস কনফিগার করতে পারেন।
<suite name="Suite">
<test name="Test">
<classes>
<class name="TestClass"/>
</classes>
</test>
<listeners>
<listener class-name="org.testng.reporters.EmailableReporter"/>
</listeners>
<parameter name="retryAnalyzer" value="RetryAnalyzer"/>
</suite>
এখানে আপনি কাস্টম রিট্রাই অ্যানালাইজার যোগ করতে পারেন, যা ব্যর্থ টেস্টগুলি পুনরায় চালাবে।
সারাংশ
TestNG এর মধ্যে ব্যর্থ টেস্ট পুনরায় চালানো বেশ সহজ এবং কার্যকরী। আপনি IRetryAnalyzer ইন্টারফেস ইমপ্লিমেন্ট করে বা @Test অ্যানোটেশনে retryAnalyzer ব্যবহার করে ব্যর্থ টেস্ট পুনরায় চালাতে পারেন। এছাড়া, successPercentage এবং invocationCount ব্যবহার করেও পুনরায় টেস্ট চালানোর সুবিধা পাওয়া যায়। testng.xml কনফিগারেশন ফাইলেও কিছু নির্দিষ্ট সেটিংস ব্যবহার করে ব্যর্থ টেস্ট পুনরায় চালানো সম্ভব।
TestNG-তে IRetryAnalyzer Interface একটি অত্যন্ত গুরুত্বপূর্ণ ফিচার, যা আপনাকে টেস্টের পুনঃচালনা (retry) করতে সহায়তা করে। এটি বিশেষভাবে তখন কাজে আসে যখন কোনো টেস্ট মেথড ব্যর্থ হয় এবং আপনি চান যে সেটি পুনরায় চালানো হোক। এটি অটোমেটিকভাবে নির্দিষ্ট সংখ্যক বার টেস্ট পুনরায় চালানোর সুযোগ প্রদান করে, যাতে কোনো ফ্লুক (fluke) বা অস্থির পরিবেশে টেস্টটি সফল হতে পারে।
IRetryAnalyzer Interface কি?
IRetryAnalyzer একটি TestNG ইন্টারফেস যা retry পদ্ধতি প্রদান করে। আপনি যখন কোনো টেস্ট মেথডে IRetryAnalyzer ইন্টারফেস ইমপ্লিমেন্ট করেন, তখন TestNG নির্দিষ্ট সংখ্যক বার টেস্ট পুনরায় চালাবে যদি সেই টেস্ট ব্যর্থ হয়।
IRetryAnalyzer ইন্টারফেসের প্রধান পদ্ধতি
IRetryAnalyzer ইন্টারফেসের একটি মাত্র পদ্ধতি আছে:
public interface IRetryAnalyzer {
boolean retry(ITestResult result);
}
এটি একটি boolean রিটার্ন করে, যা নির্ধারণ করে টেস্টটি পুনরায় চালানো হবে কিনা:
true: টেস্টটি পুনরায় চালানো হবে।false: টেস্টটি আর পুনরায় চালানো হবে না এবং ফেইলড হিসেবে চিহ্নিত হবে।
IRetryAnalyzer ইন্টারফেস ব্যবহার করার উদাহরণ
১. IRetryAnalyzer ইমপ্লিমেন্ট করা
প্রথমে একটি ক্লাস তৈরি করতে হবে যা IRetryAnalyzer ইন্টারফেস ইমপ্লিমেন্ট করবে। এই ক্লাসে আপনি সেটি কনফিগার করবেন যাতে টেস্টটি নির্দিষ্ট সংখ্যক বার পুনরায় চালানো হয়।
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
public class RetryAnalyzer implements IRetryAnalyzer {
private int count = 0;
private int maxRetryCount = 3; // সর্বোচ্চ পুনরায় চালানোর সংখ্যা
@Override
public boolean retry(ITestResult result) {
if (count < maxRetryCount) {
count++;
System.out.println("Retrying test: " + result.getName() + " for the " + count + " time.");
return true; // টেস্ট পুনরায় চালানো হবে
}
return false; // আর পুনরায় চালানো হবে না
}
}
২. টেস্ট মেথডে IRetryAnalyzer ব্যবহার করা
এখন আপনার টেস্ট মেথডে @Test এনোটেশনে retryAnalyzer প্যারামিটার ব্যবহার করে আপনি IRetryAnalyzer ক্লাসটি রেফারেন্স করতে পারেন।
import org.testng.annotations.Test;
public class TestRetryExample {
@Test(retryAnalyzer = RetryAnalyzer.class)
public void testMethod() {
System.out.println("Executing test method");
// একটি কৃত্রিম ব্যর্থতা যোগ করা হয়েছে
assert false : "Failing the test to demonstrate retry functionality.";
}
}
উদাহরণ বর্ণনা:
RetryAnalyzerক্লাসে ৩ বার পুনরায় টেস্ট চালানোর ব্যবস্থা করা হয়েছে।testMethodমেথডে ইচ্ছাকৃতভাবে ব্যর্থতা সৃষ্টি করা হয়েছে (assert false), যাতে RetryAnalyzer কাজ করে এবং টেস্টটি পুনরায় চালানো হয়।
আউটপুট:
প্রতিটি পুনরায় চালানোর পরে, কনসোলে "Retrying test" বার্তা দেখা যাবে এবং মোট ৩ বার টেস্টটি পুনরায় চালানো হবে।
IRetryAnalyzer-এ ডাইনামিক কনফিগারেশন
আপনি চাইলে IRetryAnalyzer ইন্টারফেসের মধ্যে ডাইনামিক কনফিগারেশনও করতে পারেন, যেমন নির্দিষ্ট শর্তে পুনঃচালনার সংখ্যা বৃদ্ধি বা হ্রাস করা।
public class DynamicRetryAnalyzer implements IRetryAnalyzer {
private int count = 0;
private int maxRetryCount = Integer.parseInt(System.getProperty("maxRetryCount", "3"));
@Override
public boolean retry(ITestResult result) {
if (count < maxRetryCount) {
count++;
System.out.println("Retrying test: " + result.getName() + " for the " + count + " time.");
return true;
}
return false;
}
}
এখানে maxRetryCount টেস্ট রান করার সময় System properties থেকে ডাইনামিকভাবে নির্ধারিত হচ্ছে, যা টেস্ট চালানোর সময় কাস্টমাইজ করা যাবে।
কমান্ড লাইন থেকে System property সেট করা:
mvn test -DmaxRetryCount=5
TestNG XML ফাইলে IRetryAnalyzer কনফিগারেশন
আপনি testng.xml ফাইলেও retryAnalyzer সেট করতে পারেন।
উদাহরণ testng.xml কনফিগারেশন:
<suite name="TestSuite">
<test name="RetryTest">
<classes>
<class name="com.example.tests.TestRetryExample">
<methods>
<retryAnalyzer class="com.example.tests.RetryAnalyzer"/>
</methods>
</class>
</classes>
</test>
</suite>
এখানে retryAnalyzer ট্যাগের মাধ্যমে RetryAnalyzer ক্লাসকে রেফারেন্স করা হয়েছে।
সারাংশ
IRetryAnalyzerInterface টেস্ট ফেইল হলে সেটি পুনরায় চালানোর জন্য ব্যবহৃত হয়।- আপনি retry count কাস্টমাইজ করতে পারেন, যা নির্দিষ্ট সংখ্যক বার টেস্ট পুনরায় চালাবে।
@Test(retryAnalyzer = RetryAnalyzer.class)ব্যবহার করে টেস্ট মেথডেIRetryAnalyzerইন্টিগ্রেট করা হয়।- এটি পুনঃচালনা (retry) এবং ব্যর্থ টেস্ট কেসগুলির জন্য খুবই কার্যকর।
এই ফিচারটি ফ্লুক বা অস্থির পরিবেশের কারণে ব্যর্থ টেস্টগুলিকে পুনরায় পরীক্ষা করার জন্য সহায়ক।
TestNG একটি শক্তিশালী টেস্টিং ফ্রেমওয়ার্ক যা টেস্ট কেসগুলোকে পুনরায় চালানোর (retry) সুবিধা প্রদান করে। কিছু ক্ষেত্রে টেস্ট কেসগুলো প্রথম বার রান করার সময় ফেইল করতে পারে, এবং সেক্ষেত্রে টেস্ট পুনরায় চালানো প্রয়োজন হতে পারে। TestNG-এ Retry Logic প্রয়োগ করা খুব সহজ, এবং এটি মূলত টেস্ট কেসগুলোর পুনরায় চেষ্টা করার প্রক্রিয়াকে স্বয়ংক্রিয়ভাবে পরিচালনা করে।
Retry Logic কিভাবে কাজ করে
TestNG-এ Retry Logic ব্যবহার করার জন্য একটি ক্লাস তৈরি করতে হবে যা IRetryAnalyzer ইন্টারফেস ইমপ্লিমেন্ট করবে। এই ইন্টারফেসটি টেস্ট ফেইল হওয়ার পরে পুনরায় চেষ্টা করার জন্য কাস্টম লজিক নির্ধারণ করতে সাহায্য করে। আপনি এখানে পুনরায় চেষ্টা করার সংখ্যা এবং শর্ত কনফিগার করতে পারবেন।
IRetryAnalyzer ইন্টারফেস ব্যবহার
IRetryAnalyzer ইন্টারফেসটি retry মেথড প্রদান করে, যা প্রত্যেকটি ফেইল হওয়া টেস্ট কেসের জন্য পুনরায় চেষ্টা করার লজিক বাস্তবায়ন করে।
নিচে এর উদাহরণ দেখানো হল:
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
public class RetryAnalyzer implements IRetryAnalyzer {
private int count = 0;
private static final int MAX_RETRY_COUNT = 3; // maximum number of retries
@Override
public boolean retry(ITestResult iTestResult) {
if (count < MAX_RETRY_COUNT) {
count++;
return true; // retry the test
}
return false; // no more retries
}
}
এখানে:
count- একটি কাউন্টার, যা ট্র্যাক করে যে কত বার টেস্ট কেস পুনরায় চেষ্টা করা হয়েছে।MAX_RETRY_COUNT- পুনরায় চেষ্টা করার সর্বাধিক সংখ্যা (এখানে ৩ বার)।retry()- এই মেথডটি রিটার্ন করবেtrueযদি টেস্ট কেসটি পুনরায় চালাতে চাওয়া হয়, এবংfalseযদি পুনরায় চালানোর প্রয়োজন না থাকে।
Retry Logic টেস্ট কেসে প্রয়োগ করা
এখন আপনাকে আপনার টেস্ট কেসে @Test অ্যানোটেশন ব্যবহার করে RetryAnalyzer ইমপ্লিমেন্ট করতে হবে। এটি কিভাবে করা হবে, তা নিচে দেখানো হল:
import org.testng.annotations.Test;
public class TestRetry {
@Test(retryAnalyzer = RetryAnalyzer.class)
public void testMethod() {
System.out.println("Running testMethod");
// এখানে একটি ইচ্ছাকৃত ব্যতিক্রম (exception) তৈরি করা হচ্ছে
if (Math.random() < 0.5) {
throw new RuntimeException("Test failed, retrying...");
}
}
}
এখানে:
@Test(retryAnalyzer = RetryAnalyzer.class)- এটিtestMethod-এ Retry Logic প্রয়োগ করে।- যদি
testMethodফেইল হয়, তবেRetryAnalyzerক্লাসটি টেস্ট কেসটি পুনরায় চালাবে, যতক্ষণ নাMAX_RETRY_COUNTপৌঁছায়।
Retry Logic এর সুবিধা
- ফেইল হওয়ার পর পুনরায় চেষ্টা: অনেক সময় নির্দিষ্ট কারণে টেস্ট কেস প্রথমবার ফেইল হতে পারে, যেমন নেটওয়ার্ক ইস্যু বা র্যান্ডম ফ্যাক্টর। Retry Logic ফেইল হওয়া টেস্টগুলোকে পুনরায় চালানোর মাধ্যমে পরীক্ষা সফল হওয়ার সুযোগ বাড়ায়।
- টেস্ট ফেইলিংয়ের কারণ নির্ধারণে সাহায্য: কিছু ক্ষেত্রে, ফেইল হওয়া টেস্টগুলো পুনরায় চালানো হলে, সমস্যা বুঝতে এবং সঠিক সমাধান বের করতে সহায়তা করে।
- স্ট্যাবলিটি বৃদ্ধি: কোনো নির্দিষ্ট টেস্ট কেসের কারণে পুরো টেস্ট স্যুট ফেইল না হয়ে শুধু ঐ টেস্ট কেসটি পুনরায় চালানো সম্ভব হয়, যা টেস্ট স্যুটের স্থিতিশীলতা বৃদ্ধি করে।
সারাংশ
TestNG-এ Retry Logic প্রয়োগ করার মাধ্যমে আপনি টেস্ট কেসগুলোর পুনরায় চেষ্টা করার সুবিধা পাবেন। এটি টেস্ট ফলাফল সঠিকভাবে নিশ্চিত করতে সহায়ক, বিশেষত যখন র্যান্ডম বা পরিবেশগত কারণে টেস্টগুলো ফেইল হয়। IRetryAnalyzer ইন্টারফেস ব্যবহার করে এই লজিকটি কাস্টমাইজ করা যায় এবং পুনরায় চেষ্টা করার সংখ্যা নির্ধারণ করা সম্ভব।
Read more