Skill

TestNG এর মধ্যে টেস্ট টائمআউট কনফিগারেশন

টেস্টএনজি (TestNG) - Java Technologies

355

TestNG-এর মাধ্যমে টেস্ট মেথডের জন্য টেস্ট টাইকাউট (Timeout) কনফিগার করা যায়, যা নির্ধারিত সময়ের মধ্যে টেস্ট সম্পন্ন না হলে সেটিকে ব্যর্থ (fail) হিসেবে গণ্য করে। এটি দীর্ঘ সময় ধরে চলতে থাকা টেস্টগুলো নির্ধারণ এবং সেগুলো পরিচালনা করতে সাহায্য করে।


টেস্ট টাইকাউট কেন প্রয়োজন?

১. দীর্ঘস্থায়ী টেস্ট শনাক্তকরণ: যদি কোনো টেস্ট মেথড প্রয়োজনের চেয়ে বেশি সময় নেয়, সেটি চিহ্নিত করতে সাহায্য করে।
২. রিসোর্স সাশ্রয়: সিস্টেমের রিসোর্স অপচয় রোধ করতে সহায়ক।
৩. অটোমেশন স্থিতিশীলতা: অটোমেশন স্যুটের টেস্টিং প্রক্রিয়া দ্রুত এবং নির্ভুল রাখতে সাহায্য করে।


টেস্ট টাইকাউট কনফিগার করার উপায়

TestNG-তে টেস্ট মেথডের জন্য timeOut প্যারামিটার ব্যবহার করে টাইকাউট কনফিগার করা হয়। সময়টি মিলিসেকেন্ড (milliseconds) এককে নির্ধারণ করতে হয়।


উদাহরণ: মেথড লেভেলে টাইকাউট

import org.testng.annotations.Test;

public class TimeoutExample {

    @Test(timeOut = 2000) // 2 সেকেন্ড
    public void testWithTimeout() throws InterruptedException {
        Thread.sleep(3000); // 3 সেকেন্ড
        System.out.println("This test will fail due to timeout.");
    }

    @Test
    public void testWithoutTimeout() {
        System.out.println("This test will pass.");
    }
}

আউটপুট:

FAILED: testWithTimeout
PASSED: testWithoutTimeout

উপরের উদাহরণে, testWithTimeout() মেথডটি ২ সেকেন্ডের মধ্যে সম্পন্ন না হওয়ায় ব্যর্থ হয়, কারণ এটি ৩ সেকেন্ড সময় নেয়।


স্যুট বা XML লেভেলে টাইকাউট কনফিগারেশন

TestNG XML ফাইলেও টেস্ট টাইকাউট নির্ধারণ করা যায়। উদাহরণস্বরূপ:

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="SuiteWithTimeout" time-out="3000"> <!-- স্যুট লেভেল টাইকাউট -->
    <test name="TestWithTimeout">
        <classes>
            <class name="com.example.tests.TimeoutExample"/>
        </classes>
    </test>
</suite>
  • time-out: এই অ্যাট্রিবিউট দিয়ে পুরো স্যুট বা টেস্টের জন্য টাইকাউট নির্ধারণ করা যায়।
  • যদি মেথডে নির্ধারিত টাইকাউট না দেওয়া হয়, তাহলে XML ফাইলের টাইকাউট সেটিং কার্যকর হয়।

টেস্ট মেথডের সময় নির্ধারণ করার কৌশল

১. ছোট টেস্টের জন্য ছোট সময়: যেমন, ইউনিট টেস্টের জন্য ১-২ সেকেন্ড যথেষ্ট।
২. বড় প্রক্রিয়ার জন্য বেশি সময়: ইন্টিগ্রেশন বা API টেস্টের জন্য টাইকাউট তুলনামূলক বেশি রাখা উচিত।
৩. ডিবাগিং অবস্থায় টাইকাউট সরিয়ে দিন: ডিবাগ করার সময় টেস্ট টাইকাউট না দেওয়া ভালো, কারণ এটি ডিবাগিং বাধাগ্রস্ত করতে পারে।


টেস্ট টাইকাউটের বিকল্প কৌশল

১. try-catch ব্লক: দীর্ঘ সময়ের মেথডগুলোতে নির্ধারিত সময়ের পর এক্সেপশন থ্রো করা।
২. External Libraries: টেস্টিং ব্যবস্থাপনায় অতিরিক্ত ফিচার দরকার হলে লাইব্রেরি ব্যবহার।
৩. টেস্ট ডিপেন্ডেন্সি: এক টেস্টের সময় ব্যর্থ হলে পরবর্তী টেস্ট বাদ দেওয়ার ব্যবস্থা করা।


সাধারণ সমস্যাগুলো এবং সমাধান

  • সমস্যা: টেস্ট মেথড বারবার টাইমআউট ফেইল দিচ্ছে।
    সমাধান: টেস্ট পরিবেশ (Test Environment) নিশ্চিত করুন এবং প্রয়োজনীয় টাইকাউট সময় বৃদ্ধি করুন।
  • সমস্যা: সময় নির্ধারণের পরেও টেস্ট ধীরগতিতে চলছে।
    সমাধান: কোড অপটিমাইজ করুন বা প্যারালাল টেস্টিং চালু করুন।

TestNG-এর টেস্ট টাইকাউট কনফিগারেশন আপনার টেস্ট অটোমেশন আরও কার্যকর এবং নির্ভুল করতে সাহায্য করে। টাইকাউট ব্যবহার করে আপনি সহজেই দীর্ঘস্থায়ী এবং অপ্রত্যাশিত টেস্ট মেথডগুলো চিহ্নিত করতে পারবেন।

Content added By

TestNG-তে @Test এনোটেশন এর timeOut প্যারামিটার ব্যবহার করে টেস্ট মেথডের জন্য একটি নির্দিষ্ট সময়সীমা (Timeout) নির্ধারণ করা যায়। যদি নির্ধারিত সময়ের মধ্যে টেস্ট মেথড সম্পন্ন না হয়, তাহলে সেই টেস্ট ব্যর্থ (fail) বলে গণ্য হবে।


timeOut এর প্রয়োজনীয়তা

১. অনন্তকাল ধরে চলা টেস্ট এড়ানো:
কিছু টেস্ট মেথড নির্দিষ্ট কারণে অনন্তকাল ধরে চলতে পারে। টাইমআউট সেট করলে এগুলো সময়মতো বন্ধ হয়ে যায়।

২. পারফরম্যান্স যাচাই:
টেস্টিংয়ের সময় নির্দিষ্ট মেথড কত দ্রুত কাজ করে তা নিশ্চিত করার জন্য টাইমআউট ব্যবহার করা হয়।

৩. ডেডলক বা লুপ এড়ানো:
টেস্ট মেথডে ডেডলক বা ইনফিনিট লুপ থাকলে, টাইমআউট সেট করে সমস্যা দ্রুত সনাক্ত করা যায়।


@Test(timeOut=) এর উদাহরণ

নিচে একটি উদাহরণ দেওয়া হলো যেখানে টাইমআউট সেট করা হয়েছে:

উদাহরণ ১: টেস্ট মেথড সময়সীমার মধ্যে সম্পন্ন হয়

import org.testng.annotations.Test;

public class TimeoutExample {

    @Test(timeOut = 2000) // ২ সেকেন্ডের টাইমআউট
    public void testWithinTimeout() throws InterruptedException {
        Thread.sleep(1000); // ১ সেকেন্ড স্লিপ
        System.out.println("Test completed within timeout.");
    }
}

ফলাফল:
এই টেস্ট সফলভাবে পাস করবে কারণ এটি নির্ধারিত ২ সেকেন্ডের মধ্যেই শেষ হয়েছে।


উদাহরণ ২: টেস্ট মেথড টাইমআউট অতিক্রম করে

import org.testng.annotations.Test;

public class TimeoutExample {

    @Test(timeOut = 2000) // ২ সেকেন্ডের টাইমআউট
    public void testExceedTimeout() throws InterruptedException {
        Thread.sleep(3000); // ৩ সেকেন্ড স্লিপ
        System.out.println("This line will not execute.");
    }
}

ফলাফল:
এই টেস্ট ব্যর্থ হবে কারণ এটি নির্ধারিত ২ সেকেন্ড সময়সীমা অতিক্রম করেছে।


টাইমআউট সেট করার গুরুত্বপূর্ণ বিষয়

১. টাইমআউটের একক:
timeOut এর মান মিলিসেকেন্ডে (milliseconds) নির্ধারণ করতে হয়।

২. থ্রেড স্লিপ (Thread.sleep):
উদাহরণে ব্যবহৃত Thread.sleep() কেবলমাত্র পরীক্ষার জন্য ব্যবহৃত হয়েছে। প্রকৃত টেস্ট কেসে এটি প্রয়োজন নাও হতে পারে।

৩. ব্যাকগ্রাউন্ড প্রসেস:
দীর্ঘ সময়ের জন্য চলমান ব্যাকগ্রাউন্ড প্রসেসের জন্য টাইমআউট একটি কার্যকর নিয়ন্ত্রণ ব্যবস্থা।


টাইমআউট ব্যতিক্রম (Timeout Exception)

যদি মেথড টাইমআউটের কারণে ব্যর্থ হয়, TestNG নিচের মত একটি ব্যতিক্রম (exception) প্রদান করবে:

org.testng.internal.thread.ThreadTimeoutException: Method testExceedTimeout() didn't finish within the time-out 2000

টাইমআউট এবং অন্যান্য প্যারামিটার একসাথে ব্যবহার

timeOut অন্যান্য TestNG প্যারামিটার যেমন priority, enabled, invocationCount ইত্যাদির সাথে একত্রে ব্যবহার করা যায়।

@Test(priority = 1, timeOut = 3000, invocationCount = 2)
public void multipleInvocationsWithTimeout() throws InterruptedException {
    Thread.sleep(2000);
    System.out.println("Executed with timeout");
}

উপকারিতা

  • টাইমআউট ব্যবহার করে টেস্টিং সময় এবং রিসোর্স অপচয় কমানো যায়।
  • অপ্রত্যাশিত বা লম্বা সময়ের টেস্ট প্রক্রিয়া নিয়ন্ত্রণ করা যায়।
  • টাইমিং সংক্রান্ত ত্রুটি সহজেই শনাক্ত করা সম্ভব।

@Test(timeOut=) প্যারামিটার ব্যবহার করে টেস্ট মেথডের সময়সীমা নিয়ন্ত্রণ করা TestNG-এর একটি শক্তিশালী ফিচার, যা ডেডলক, ইনফিনিট লুপ, এবং পারফরম্যান্স সম্পর্কিত সমস্যাগুলো সমাধান করতে সহায়ক।

Content added By

TestNG-তে দীর্ঘ সময় ধরে চলা টেস্ট মেথডের এক্সিকিউশন সীমিত করতে Timeout ফিচার ব্যবহার করা হয়। Timeout ফিচারের মাধ্যমে নির্ধারিত সময়ের মধ্যে টেস্ট সম্পন্ন না হলে সেটিকে ব্যর্থ (fail) হিসেবে চিহ্নিত করা যায়। এটি দীর্ঘ সময়ের টেস্ট বা অপ্রত্যাশিত লুপ এড়ানোর জন্য বিশেষভাবে কার্যকর।


Timeout কি?

Timeout হলো একটি প্যারামিটার, যা TestNG-তে টেস্ট মেথডের এক্সিকিউশন সময় নির্ধারণ করে। নির্ধারিত সময়ের মধ্যে টেস্ট শেষ না হলে, TestNG মেথডটিকে ব্যর্থ হিসেবে চিহ্নিত করে।


Timeout ব্যবহার করার উপায়

১. @Test এনোটেশনের মধ্যে timeOut প্যারামিটার

TestNG-তে @Test এনোটেশনে timeOut প্যারামিটার ব্যবহার করে নির্দিষ্ট টেস্টের জন্য টাইমআউট সেট করা যায়।

উদাহরণ:

import org.testng.annotations.Test;

public class TimeoutExample {

    @Test(timeOut = 2000) // টাইমআউট ২০০০ মিলিসেকেন্ড বা ২ সেকেন্ড
    public void testWithTimeout() throws InterruptedException {
        Thread.sleep(3000); // ৩ সেকেন্ড স্লিপ
        System.out.println("This test will fail due to timeout.");
    }

    @Test(timeOut = 5000)
    public void testWithinTimeout() throws InterruptedException {
        Thread.sleep(1000); // ১ সেকেন্ড স্লিপ
        System.out.println("This test will pass as it finishes within timeout.");
    }
}

আউটপুট:

  • testWithTimeout: ব্যর্থ হবে কারণ এটি ২ সেকেন্ডের মধ্যে শেষ হয়নি।
  • testWithinTimeout: সফল হবে কারণ এটি ৫ সেকেন্ডের মধ্যে সম্পন্ন হয়েছে।

২. @Test লেভেলে গ্রুপ টাইমআউট সেট করা

TestNG XML ফাইল ব্যবহার করে টেস্ট মেথডের জন্য টাইমআউট সেট করা যায়।

উদাহরণ XML কনফিগারেশন:

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="TestSuite">
    <test name="TimeoutTest" time-out="3000">
        <classes>
            <class name="com.example.tests.TimeoutExample"/>
        </classes>
    </test>
</suite>

কীভাবে কাজ করে:

  • XML ফাইলের time-out অ্যাট্রিবিউটের মাধ্যমে পুরো টেস্টের জন্য একটি ডিফল্ট টাইমআউট নির্ধারণ করা যায়।
  • এক্সিকিউশন নির্ধারিত সময়ের মধ্যে সম্পন্ন না হলে টেস্ট ব্যর্থ হবে।

ডেটা ড্রিভেন টেস্টিংয়ে টাইমআউট

যদি আপনি ডেটা ড্রিভেন টেস্টিং করেন, তাহলে টাইমআউট প্যারামিটার প্রতিটি টেস্ট ইনভোকেশনের জন্য প্রযোজ্য।

উদাহরণ:

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class DataDrivenTimeoutExample {

    @DataProvider(name = "dataProvider")
    public Object[][] dataProvider() {
        return new Object[][]{
                {1, 1000},
                {2, 3000}
        };
    }

    @Test(dataProvider = "dataProvider", timeOut = 2000)
    public void testWithData(int id, int delay) throws InterruptedException {
        Thread.sleep(delay); // ডিলের সময় অনুযায়ী স্লিপ
        System.out.println("Test with ID: " + id + " completed.");
    }
}

আউটপুট:

  • প্রথম ইনভোকেশন: সফল হবে কারণ এটি ১ সেকেন্ডের মধ্যে শেষ হয়।
  • দ্বিতীয় ইনভোকেশন: ব্যর্থ হবে কারণ এটি ৩ সেকেন্ডের মধ্যে শেষ হয়নি।

শর্তসাপেক্ষ টাইমআউট ম্যানেজমেন্ট

কিছু বিশেষ ক্ষেত্রে প্রোগ্রামেটিকভাবে টাইমআউট পরিচালনা করার প্রয়োজন হতে পারে। এই ক্ষেত্রে ExecutorService ব্যবহার করা যেতে পারে।

উদাহরণ:

import org.testng.annotations.Test;

import java.util.concurrent.*;

public class ConditionalTimeoutExample {

    @Test
    public void testWithCustomTimeout() {
        ExecutorService executor = Executors.newSingleThreadExecutor();

        Future<?> future = executor.submit(() -> {
            try {
                Thread.sleep(3000); // ৩ সেকেন্ড স্লিপ
                System.out.println("Task completed.");
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        });

        try {
            future.get(2, TimeUnit.SECONDS); // ২ সেকেন্ডের টাইমআউট
        } catch (TimeoutException e) {
            System.out.println("Test failed due to timeout.");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            executor.shutdown();
        }
    }
}

সারাংশ

TestNG-তে টাইমআউট ফিচার দীর্ঘ রানিং টেস্ট মেথড সীমিত করার জন্য অত্যন্ত কার্যকর।

  • @Test এনোটেশনে timeOut প্যারামিটার দিয়ে সরাসরি টাইমআউট সেট করা যায়।
  • XML কনফিগারেশন দিয়ে গ্রুপ বা টেস্ট লেভেলে টাইমআউট নির্ধারণ করা সম্ভব।
  • ডেটা ড্রিভেন এবং শর্তসাপেক্ষ টেস্টেও টাইমআউট কার্যকরভাবে ব্যবহার করা যায়।

এই ফিচার টেস্টিং প্রক্রিয়ায় অপ্রত্যাশিত লুপ বা দীর্ঘ এক্সিকিউশন এড়াতে সাহায্য করে এবং টেস্ট রান টাইম সাশ্রয় করে।

Content added By

TestNG টেস্টিং ফ্রেমওয়ার্কে Test Timeout একটি গুরুত্বপূর্ণ ফিচার, যা নির্ধারণ করে কোনো টেস্ট মেথডের এক্সিকিউশন কতক্ষণ ধরে চলবে। নির্ধারিত সময় অতিক্রম করলে টেস্ট ব্যর্থ (fail) হিসেবে গণ্য হবে।


Test Timeout-এর ব্যবহার

Timeout সাধারণত টেস্ট মেথডে অপ্রত্যাশিত দীর্ঘ চলাকালীনতা এড়ানোর জন্য ব্যবহৃত হয়। এটি @Test অ্যানোটেশনের timeOut প্যারামিটারের মাধ্যমে কনফিগার করা যায়।


Test Timeout-এর উদাহরণ

নির্দিষ্ট টেস্ট মেথডে Timeout

import org.testng.annotations.Test;

public class TimeoutExample {

    @Test(timeOut = 2000) // সময় নির্ধারণ: ২ সেকেন্ড
    public void testWithTimeout() throws InterruptedException {
        Thread.sleep(1000); // ১ সেকেন্ড অপেক্ষা
        System.out.println("Test completed within the timeout.");
    }

    @Test(timeOut = 2000) // সময় নির্ধারণ: ২ সেকেন্ড
    public void testExceedingTimeout() throws InterruptedException {
        Thread.sleep(3000); // ৩ সেকেন্ড অপেক্ষা
        System.out.println("This test will fail due to exceeding timeout.");
    }
}

আউটপুট:

Test completed within the timeout.
FAILED: testExceedingTimeout
org.testng.internal.thread.ThreadTimeoutException: Method timed out after 2000 milliseconds

উপরের উদাহরণে:

  • testWithTimeout নির্ধারিত সময়ের মধ্যে শেষ হয়, তাই সফল।
  • testExceedingTimeout ২ সেকেন্ডের সময়সীমা অতিক্রম করে, তাই ব্যর্থ।

Test Timeout testng.xml-এ কনফিগার করা

testng.xml-এ টেস্ট সুইট বা টেস্ট স্তরে Timeout নির্ধারণ করা যায়।

<suite name="TimeoutSuite" time-out="2000">
    <test name="TimeoutTest">
        <classes>
            <class name="com.example.TimeoutExample" />
        </classes>
    </test>
</suite>

উপরের উদাহরণে, পুরো টেস্ট স্যুটে ২ সেকেন্ডের Timeout নির্ধারণ করা হয়েছে।


Timeout এবং Retry মেকানিজম

TestNG-এর Retry Analyzer ফিচার ব্যবহার করে ব্যর্থ হওয়া Timeout টেস্ট পুনরায় চালানো সম্ভব।

import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;

public class RetryAnalyzer implements IRetryAnalyzer {
    private int retryCount = 0;
    private static final int maxRetryCount = 1;

    @Override
    public boolean retry(ITestResult result) {
        if (retryCount < maxRetryCount) {
            retryCount++;
            return true;
        }
        return false;
    }
}

টেস্টে Retry অ্যাপ্লাই করতে:

import org.testng.annotations.Test;

public class TimeoutWithRetry {

    @Test(timeOut = 2000, retryAnalyzer = RetryAnalyzer.class)
    public void testWithRetry() throws InterruptedException {
        Thread.sleep(3000);
        System.out.println("Retry test executed.");
    }
}

গুরুত্বপূর্ণ দিকনির্দেশনা

  1. সময়ের মাপ: Timeout মি.লি.সেকেন্ডে (milliseconds) নির্ধারণ করতে হয়।
  2. বৃহৎ টেস্ট স্যুটে সতর্কতা: Timeout প্রয়োগ করার সময় বৃহৎ স্যুটে জটিলতা এড়াতে উপযুক্ত মান নির্ধারণ করুন।
  3. ডিবাগিং সহায়তা: Timeout প্রয়োগ করলে টেস্ট দ্রুত ব্যর্থ হবে, যা ডিবাগিং সহজ করে।

সারাংশ

TestNG-এর Test Timeout ফিচার টেস্ট স্যুটের কর্মক্ষমতা নিশ্চিত করে এবং দীর্ঘ মেয়াদি টেস্ট থেকে রক্ষা করে। এটি টেস্ট এক্সিকিউশনের নির্ধারিত সীমা বজায় রাখতে সহায়তা করে, ফলে টেস্টিং প্রক্রিয়া আরও কার্যকর এবং নির্ভরযোগ্য হয়।

Content added By
Promotion

Are you sure to start over?

Loading...