Skill

TestNG এর মধ্যে ডিপেনডেন্সি টেস্টিং

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

338

TestNG ফ্রেমওয়ার্কের ডিপেনডেন্সি টেস্টিং (Dependency Testing) ফিচারটি বিভিন্ন টেস্ট মেথডের মধ্যে নির্ভরতা (dependency) নির্ধারণের সুযোগ দেয়। এটি তখন বিশেষভাবে কার্যকর, যখন কোনো একটি টেস্ট মেথডের সঠিক এক্সিকিউশন অন্য একটি মেথডের ফলাফলের উপর নির্ভর করে।


ডিপেনডেন্সি টেস্টিং কীভাবে কাজ করে

TestNG ডিপেনডেন্সি টেস্টিং dependsOnMethods এবং dependsOnGroups অ্যাট্রিবিউটের মাধ্যমে কার্যকর হয়।

  • dependsOnMethods: একটি টেস্ট মেথড অন্য একটি নির্দিষ্ট টেস্ট মেথডের উপর নির্ভর করে।
  • dependsOnGroups: একটি টেস্ট মেথড নির্দিষ্ট গ্রুপের টেস্ট মেথডগুলোর উপর নির্ভর করে।

ডিপেনডেন্সি টেস্টিং-এর উদাহরণ

dependsOnMethods ব্যবহার করে

import org.testng.annotations.Test;

public class DependencyTestExample {

    @Test
    public void loginTest() {
        System.out.println("Login test executed.");
    }

    @Test(dependsOnMethods = {"loginTest"})
    public void dashboardTest() {
        System.out.println("Dashboard test executed.");
    }

    @Test(dependsOnMethods = {"dashboardTest"})
    public void logoutTest() {
        System.out.println("Logout test executed.");
    }
}

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

  • dashboardTest চালানোর আগে loginTest সফলভাবে সম্পন্ন হতে হবে।
  • logoutTest চালানোর জন্য dashboardTest সফলভাবে শেষ হওয়া আবশ্যক।

আউটপুট:

Login test executed.
Dashboard test executed.
Logout test executed.

dependsOnGroups ব্যবহার করে

import org.testng.annotations.Test;

public class DependencyGroupExample {

    @Test(groups = {"initial"})
    public void setupTest() {
        System.out.println("Setup test executed.");
    }

    @Test(groups = {"initial"})
    public void databaseConnectionTest() {
        System.out.println("Database connection test executed.");
    }

    @Test(dependsOnGroups = {"initial"})
    public void mainTest() {
        System.out.println("Main test executed.");
    }
}

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

  • mainTest চালানোর আগে initial গ্রুপের সব টেস্ট সফল হতে হবে।

আউটপুট:

Setup test executed.
Database connection test executed.
Main test executed.

ডিপেনডেন্সি টেস্টিং-এ গুরুত্বপূর্ণ বিষয়

  1. স্কিপড টেস্ট: যদি নির্ভরশীল টেস্ট ব্যর্থ হয় বা স্কিপ করা হয়, তাহলে ডিপেনডেন্ট টেস্টও স্কিপ হবে।
  2. পদ্ধতিগতভাবে ডিপেনডেন্সি ব্যবহার: অতিরিক্ত ডিপেনডেন্সি তৈরি করা উচিত নয়, কারণ এটি টেস্ট রানের জটিলতা বাড়াতে পারে।
  3. গ্রুপিং এবং অগ্রাধিকার: ডিপেনডেন্সির পাশাপাশি priority অ্যাট্রিবিউট ব্যবহার করে টেস্ট অর্ডার আরও ভালোভাবে ম্যানেজ করা যায়।

সারাংশ

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

Content added By

Test Dependency হল একটি কনসেপ্ট যেখানে একটি টেস্ট মেথড নির্ভর করে অন্য একটি টেস্ট মেথডের সফল এক্সিকিউশনের উপর। অর্থাৎ, নির্দিষ্ট একটি টেস্ট সফলভাবে সম্পন্ন না হলে নির্ভরশীল টেস্টটি চালানো হবে না।

TestNG-তে টেস্ট ডিপেনডেন্সি কনফিগার করা যায় dependsOnMethods এবং dependsOnGroups ব্যবহার করে।


Test Dependency-এর প্রয়োজনীয়তা

১. সিকোয়েন্স রক্ষা করা
কিছু টেস্ট আছে যা একটি নির্দিষ্ট ক্রমে (Sequence) চালানো দরকার। উদাহরণস্বরূপ, প্রথমে লগইন পরীক্ষা করা, তারপর ড্যাশবোর্ড ফাংশনালিটি।

২. ফ্লো ভিত্তিক টেস্টিং
একটি টেস্টের আউটপুটের উপর ভিত্তি করে অন্য টেস্ট চালানো। যেমন, লগইন সফল না হলে প্রোফাইল আপডেট টেস্ট চালানোর কোনো অর্থ নেই।

৩. কোড রিডেবিলিটি এবং সহজ ব্যবস্থাপনা
ডিপেনডেন্সি ব্যবহারের মাধ্যমে কোড আরও সহজবোধ্য এবং ভালোভাবে সংগঠিত রাখা সম্ভব।

৪. অপ্রয়োজনীয় টেস্ট এড়ানো
যদি একটি প্রাথমিক টেস্ট ব্যর্থ হয়, তবে সেই টেস্টের ওপর নির্ভরশীল টেস্টগুলো চালানোর প্রয়োজন হয় না।


Test Dependency কনফিগার করার পদ্ধতি

TestNG-তে টেস্ট ডিপেনডেন্সি কনফিগার করতে dependsOnMethods এবং dependsOnGroups অ্যানোটেশন ব্যবহার করা হয়।

dependsOnMethods উদাহরণ

import org.testng.annotations.Test;

public class TestDependencyExample {

    @Test
    public void loginTest() {
        System.out.println("Login Test Executed");
        // Imagine login is successful here
    }

    @Test(dependsOnMethods = "loginTest")
    public void dashboardTest() {
        System.out.println("Dashboard Test Executed");
    }

    @Test(dependsOnMethods = "dashboardTest")
    public void logoutTest() {
        System.out.println("Logout Test Executed");
    }
}

ব্যাখ্যা:

  • dashboardTest চালানোর আগে loginTest সফলভাবে সম্পন্ন হতে হবে।
  • logoutTest চালানোর আগে dashboardTest সফলভাবে সম্পন্ন হতে হবে।

dependsOnGroups উদাহরণ

import org.testng.annotations.Test;

public class GroupDependencyExample {

    @Test(groups = "login")
    public void loginWithEmail() {
        System.out.println("Login with Email");
    }

    @Test(groups = "login")
    public void loginWithSocialMedia() {
        System.out.println("Login with Social Media");
    }

    @Test(dependsOnGroups = "login")
    public void accessDashboard() {
        System.out.println("Accessing Dashboard");
    }
}

ব্যাখ্যা:

  • accessDashboard মেথডটি login গ্রুপের সব টেস্ট সফলভাবে সম্পন্ন হওয়ার পরে চালানো হবে।

Test Dependency-এর সুবিধা

১. পরীক্ষার কাঠামো বজায় রাখা
এটি টেস্টগুলোর মধ্যে সম্পর্ক (Dependency) স্পষ্ট করে তোলে এবং একটি কাঠামোগত পদ্ধতি প্রদান করে।

২. অপ্রয়োজনীয় ব্যর্থতা এড়ানো
নির্ভরশীল টেস্ট চালিয়ে অযথা সময় নষ্ট এড়ানো যায়।

৩. ডাটা ফ্লো নিশ্চিত করা
টেস্টিং ফ্লোতে প্রয়োজনীয়তা অনুযায়ী ডেটা প্রবাহ নিশ্চিত করা যায়।


Test Dependency-এর সীমাবদ্ধতা

১. পরিকল্পনার জটিলতা
অনেক বেশি ডিপেনডেন্সি ব্যবহারের ফলে টেস্ট প্ল্যান জটিল হয়ে যেতে পারে।

২. টেস্ট ফ্লো নির্ভরতা
যদি একটি নির্ভরশীল টেস্ট ব্যর্থ হয়, তবে পরবর্তী টেস্টগুলো চালানো হবে না।

৩. ডিবাগিংয়ের চ্যালেঞ্জ
নির্ভরশীল টেস্ট ব্যর্থ হলে মূল সমস্যাটি খুঁজে পাওয়া কখনো কখনো কঠিন হতে পারে।


সারাংশ

Test Dependency এমন একটি প্রক্রিয়া যা টেস্ট ফ্লো পরিচালনা সহজ করে এবং টেস্টিং কার্যপ্রণালী আরও কার্যকর করে তোলে। সঠিকভাবে ব্যবহার করলে এটি টেস্টিং প্রক্রিয়ায় সময় সাশ্রয় এবং লজিক্যাল ফ্লো বজায় রাখতে সাহায্য করে। তবে, এর জটিলতা বুঝে এবং সঠিক পরিকল্পনার মাধ্যমে এটি ব্যবহার করা উচিত।

Content added By

টেস্টএনজি (@Test) অ্যানোটেশনের মধ্যে dependsOnMethods অ্যাট্রিবিউট ব্যবহার করে আপনি এক টেস্টকে অন্য টেস্টের উপর নির্ভরশীল (dependent) হিসেবে কনফিগার করতে পারেন। এটি এমন ক্ষেত্রে কার্যকর, যেখানে একটি টেস্ট কেস সফলভাবে সম্পন্ন না হলে অন্য টেস্ট কেস চালানোর প্রয়োজন নেই।


dependsOnMethods এর কাজের প্রক্রিয়া

  • যদি নির্ভরশীল টেস্ট (dependent test) সফল হয়, তবে নির্ভরকারী টেস্ট (dependent test) চালানো হবে।
  • যদি নির্ভরশীল টেস্ট ব্যর্থ হয়, তবে নির্ভরকারী টেস্ট skip করা হবে।
  • একাধিক টেস্টের উপর নির্ভরতা নির্ধারণের জন্য টেস্টের নাম একটি array আকারে ব্যবহার করা যায়।

উদাহরণ: নির্ভরশীল টেস্ট

import org.testng.annotations.Test;

public class DependentTestExample {

    @Test
    public void loginTest() {
        System.out.println("Login test executed successfully.");
    }

    @Test(dependsOnMethods = {"loginTest"})
    public void placeOrderTest() {
        System.out.println("Place order test executed successfully.");
    }

    @Test(dependsOnMethods = {"placeOrderTest"})
    public void logoutTest() {
        System.out.println("Logout test executed successfully.");
    }
}

কোড বিশ্লেষণ:

  1. loginTest():
    এটি একটি স্বাধীন টেস্ট।
  2. placeOrderTest():
    এটি loginTest এর উপর নির্ভরশীল।
    যদি loginTest সফল হয়, তবে এটি চালানো হবে।
  3. logoutTest():
    এটি placeOrderTest এর উপর নির্ভরশীল।

আউটপুট:

Login test executed successfully.
Place order test executed successfully.
Logout test executed successfully.

যদি loginTest() ব্যর্থ হয়:

Login test executed successfully.
Place order test skipped.
Logout test skipped.

একাধিক টেস্টের উপর নির্ভরতা

আপনি যদি কোনো টেস্টকে একাধিক টেস্টের উপর নির্ভরশীল করতে চান, তাহলে array ব্যবহার করতে পারেন:

@Test(dependsOnMethods = {"testA", "testB"})
public void testC() {
    System.out.println("Test C executed.");
}

কোড বিশ্লেষণ:

  • testC() কেবল তখনই চালানো হবে যখন testA এবং testB উভয় সফলভাবে সম্পন্ন হয়।

alwaysRun = true ব্যবহার

কিছু ক্ষেত্রে আপনি নির্ভরশীল টেস্টকে নির্দিষ্টভাবে চালাতে চাইলে alwaysRun = true ব্যবহার করতে পারেন। এটি ব্যর্থ টেস্ট উপেক্ষা করে নির্ভরশীল টেস্ট চালাবে।

@Test(dependsOnMethods = {"testA"}, alwaysRun = true)
public void testB() {
    System.out.println("Test B executed regardless of Test A result.");
}

ডিপেনডেন্ট টেস্ট ব্যবহারের সুবিধা

  • পরীক্ষা কার্যক্রমের নিয়ন্ত্রণ:
    টেস্ট কেসের ক্রমানুসারে সম্পর্ক নির্ধারণ করা যায়।
  • সময় সাশ্রয়:
    ব্যর্থ টেস্টের পরবর্তী নির্ভরশীল টেস্টগুলো skip করে সময় বাঁচানো যায়।
  • উন্নত টেস্ট কাঠামো:
    ডেটা প্রবাহের উপর ভিত্তি করে টেস্ট কেস সাজানো সম্ভব।

সীমাবদ্ধতা

  • ডিপেনডেন্ট টেস্ট ব্যবহারে টেস্ট কাঠামো খুব জটিল হতে পারে।
  • এক টেস্ট ব্যর্থ হলে পরবর্তী নির্ভরশীল টেস্ট চালানো হবে না, যা কিছু ক্ষেত্রে সমস্যা তৈরি করতে পারে।

সারাংশ

@Test(dependsOnMethods="") ব্যবহার করে আপনি নির্ভরশীল টেস্ট কনফিগার করতে পারেন, যা বড় প্রজেক্টে কার্যক্রমের ধারাবাহিকতা নিশ্চিত করে। এটি বিশেষভাবে কার্যকর, যেখানে একটি নির্দিষ্ট কার্যকলাপ সফল না হলে পরবর্তী কার্যকলাপ অর্থহীন। তবে অত্যধিক নির্ভরতা জটিলতা সৃষ্টি করতে পারে, তাই এটি সাবধানে ব্যবহার করা উচিত।

Content added By

ডিপেনডেন্সি টেস্টিং (Dependency Testing) টেস্টএনজি-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা একটি টেস্টকে অন্য টেস্টের উপর নির্ভরশীল করতে দেয়। অর্থাৎ, একটি টেস্ট কেস সফলভাবে রান না হলে, তার উপর নির্ভরশীল টেস্ট কেসটি এক্সিকিউট হবে না। এটি কমপ্লেক্স টেস্ট সিকোয়েন্স ম্যানেজ করার জন্য বিশেষভাবে কার্যকর।


কেন ডিপেনডেন্সি টেস্টিং গুরুত্বপূর্ণ?

  • জটিল টেস্ট কেস পরিচালনা: কোনো ফিচারের বিভিন্ন অংশ নির্ভরশীল হলে সেগুলোর টেস্ট ম্যানেজ করা সহজ হয়।
  • অপ্রয়োজনীয় টেস্ট এড়ানো: যদি একটি নির্ভরশীল টেস্ট ব্যর্থ হয়, তাহলে পরবর্তী টেস্ট চালানো হবে না।
  • সংগঠিত টেস্ট রুটিন: নির্দিষ্ট সিকোয়েন্সে টেস্ট চালানোর মাধ্যমে সময় এবং রিসোর্স বাঁচানো যায়।

TestNG-তে ডিপেনডেন্সি টেস্টিং কনফিগার করা

TestNG-তে dependsOnMethods বা dependsOnGroups অ্যাট্রিবিউট ব্যবহার করে ডিপেনডেন্সি নির্ধারণ করা যায়।

১. dependsOnMethods ব্যবহার করা

dependsOnMethods অ্যাট্রিবিউট ব্যবহার করে একটি টেস্ট অন্য টেস্ট মেথডের উপর নির্ভরশীল করা যায়।

কোড উদাহরণ:

import org.testng.annotations.Test;

public class DependencyExample {
    
    @Test
    public void loginTest() {
        System.out.println("Login test executed");
    }
    
    @Test(dependsOnMethods = { "loginTest" })
    public void dashboardTest() {
        System.out.println("Dashboard test executed");
    }
    
    @Test(dependsOnMethods = { "dashboardTest" })
    public void logoutTest() {
        System.out.println("Logout test executed");
    }
}

আউটপুট:
১. প্রথমে loginTest চলবে।
২. তারপর dashboardTest
৩. সবশেষে logoutTest
যদি loginTest ব্যর্থ হয়, তাহলে dashboardTest এবং logoutTest চলবে না।


২. dependsOnGroups ব্যবহার করা

dependsOnGroups অ্যাট্রিবিউট ব্যবহার করে একটি টেস্ট নির্দিষ্ট গ্রুপের উপর নির্ভরশীল করা যায়।

কোড উদাহরণ:

import org.testng.annotations.Test;

public class DependencyGroupExample {
    
    @Test(groups = { "sanity" })
    public void sanityTest1() {
        System.out.println("Sanity Test 1 executed");
    }
    
    @Test(groups = { "sanity" })
    public void sanityTest2() {
        System.out.println("Sanity Test 2 executed");
    }
    
    @Test(dependsOnGroups = { "sanity" })
    public void regressionTest() {
        System.out.println("Regression Test executed");
    }
}

আউটপুট:
১. sanityTest1 এবং sanityTest2 প্রথমে চলবে।
২. এর পরে regressionTest
যদি sanity গ্রুপের কোনো টেস্ট ব্যর্থ হয়, তাহলে regressionTest চলবে না।


স্কিপ হওয়া টেস্ট চিহ্নিত করা

যদি কোনো ডিপেনডেন্সি টেস্ট ফেইল করে, তাহলে তার উপর নির্ভরশীল টেস্টগুলো Skipped হিসাবে চিহ্নিত হয়।

উদাহরণস্বরূপ, যদি loginTest ব্যর্থ হয়, তাহলে TestNG কনসোলে dashboardTest এবং logoutTest এর স্ট্যাটাস Skipped দেখাবে।


ডিপেনডেন্সি টেস্টিং এর জন্য অতিরিক্ত সেটিংস

১. AlwaysRun = true

যদি নির্ভরশীল টেস্ট ফেইল করলেও পরবর্তী টেস্ট চালানো হয়, তাহলে alwaysRun = true সেট করতে হয়।

কোড উদাহরণ:

@Test(dependsOnMethods = { "loginTest" }, alwaysRun = true)
public void profileTest() {
    System.out.println("Profile Test executed even if loginTest fails");
}

২. Multiple Dependencies

একাধিক মেথড বা গ্রুপ নির্ভরশীল হলে তাদের তালিকা দিতে হয়।

কোড উদাহরণ:

@Test(dependsOnMethods = { "method1", "method2" })
public void combinedTest() {
    System.out.println("Combined Test executed");
}

সারাংশ

TestNG-তে ডিপেনডেন্সি টেস্টিং একটি শক্তিশালী ফিচার, যা জটিল টেস্ট সিকোয়েন্স ম্যানেজ করতে সাহায্য করে। dependsOnMethods এবং dependsOnGroups এর মাধ্যমে টেস্ট নির্ভরশীলতা নির্ধারণ করে সহজেই বড় আকারের টেস্ট প্ল্যান তৈরি করা যায়। ডিপেনডেন্সি টেস্টিংয়ের সঠিক ব্যবহার টেস্ট প্রক্রিয়ার সময় ও রিসোর্স অপচয় রোধ করে এবং টেস্ট ফলাফলের উপর আরও নির্ভরযোগ্যতা নিশ্চিত করে।

Content added By
Promotion

Are you sure to start over?

Loading...