Spring Cloud Contract (Consumer-Driven Contract Testing)

Java Technologies - স্প্রিং ক্লাউড (Spring Cloud)
103
103

Spring Cloud Contract একটি ফ্রেমওয়ার্ক যা মাইক্রোসার্ভিস আর্কিটেকচারে Consumer-Driven Contract Testing (CDC Testing) বাস্তবায়ন করতে ব্যবহৃত হয়। এটি দুটি প্রধান ভূমিকা পালন করে:

  1. Consumer-Driven Contract Testing: যেখানে কনজিউমার (যেমন, ক্লায়েন্ট সার্ভিস) এবং প্রোভাইডার (যেমন, সার্ভার সার্ভিস) এর মধ্যে একটি চুক্তি তৈরি হয়, এবং সেই চুক্তি অনুসারে তাদের ইন্টারঅ্যাকশন পরীক্ষা করা হয়।
  2. API Contract Validation: এতে কনজিউমারের এবং প্রোভাইডারের মধ্যে একটি চুক্তি সংজ্ঞায়িত হয়, যা তাদের মধ্যে ডেটা আদান-প্রদান কেমন হবে, কীভাবে তা কাজ করবে, ইত্যাদি সংজ্ঞায়িত করে।

Spring Cloud Contract-এ সাধারণত Pact বা Contract নামে পরিচিত টেস্টগুলি ব্যবহৃত হয়, যা নিশ্চিত করে যে সার্ভিসগুলির মধ্যে যোগাযোগের সময় কোনও ধরণের অমিল বা ব্রেকডাউন হবে না।

Consumer-Driven Contract Testing কী?

Consumer-Driven Contract Testing (CDC Testing) একটি পদ্ধতি যেখানে কনজিউমার (যেমন ক্লায়েন্ট সার্ভিস) এবং প্রোভাইডার (যেমন সার্ভার সার্ভিস) এর মধ্যে একটি চুক্তি তৈরি করা হয়, যা তাদের মধ্যে ডেটা বিনিময়ের বা API কলের আউটপুট সম্পর্কে নির্দিষ্ট করা হয়।

  1. Consumer (Client): যে সার্ভিসটি অন্য সার্ভিস থেকে ডেটা গ্রহণ করবে এবং সার্ভিসটি কীভাবে প্রতিক্রিয়া দেবে তা নির্ধারণ করে।
  2. Provider (Server): যে সার্ভিসটি অন্য সার্ভিসের অনুরোধের ভিত্তিতে ডেটা প্রদান করবে এবং সেই ডেটা কনজিউমারের চাহিদার সাথে মিলবে কিনা তা নিশ্চিত করবে।

Spring Cloud Contract এর সুবিধা

  • API Consistency: সরাসরি কনজিউমারের এবং প্রোভাইডারের মধ্যে ইন্টারঅ্যাকশন যাচাই করার মাধ্যমে তাদের মধ্যে কোনও প্রকার অমিল বা ভুল প্রতিক্রিয়া হওয়ার সম্ভাবনা কমানো।
  • Autonomous Testing: কনজিউমার এবং প্রোভাইডার উভয় পক্ষই তাদের নিজস্ব টেস্ট কেস তৈরি করে, যা সিস্টেমের নির্ভরশীলতা হ্রাস করে এবং স্বাধীনভাবে টেস্টিং করা সম্ভব হয়।
  • Microservices Communication: মাইক্রোসার্ভিসে যখন বিভিন্ন সার্ভিস একে অপরের সাথে যোগাযোগ করে, তখন তাদের মধ্যে নিরাপদ এবং সঠিক যোগাযোগ বজায় রাখতে সাহায্য করে।

Spring Cloud Contract এর কাজের প্রক্রিয়া

Spring Cloud Contract কার্যকরভাবে Consumer-Driven Contract Testing পরীক্ষা করতে তিনটি প্রধান অংশে কাজ করে:

  1. Contract Definition:
    কনজিউমার এবং প্রোভাইডার কীভাবে একে অপরের সাথে যোগাযোগ করবে, সেই চুক্তি সংজ্ঞায়িত করতে হবে। Spring Cloud Contract সাধারণত Groovy DSL বা YAML ফাইল ব্যবহার করে এই চুক্তি সংজ্ঞায়িত করতে সহায়ক।
  2. Contract Verification:
    কনজিউমারের এবং প্রোভাইডারের মধ্যে চুক্তি সঠিকভাবে পালন হচ্ছে কিনা তা পরীক্ষা করা হয়। Spring Cloud Contract এই যাচাই করার জন্য মক সার্ভিস তৈরি করে এবং সঠিক রেসপন্স প্রদান নিশ্চিত করে।
  3. Automated Tests:
    Spring Cloud Contract API এর মাধ্যমে টেস্ট অটোমেটিক্যালি তৈরি করে, যেখানে নির্ধারিত চুক্তি অনুযায়ী পরীক্ষা চালানো হয়। এটি নিশ্চিত করে যে কনজিউমার এবং প্রোভাইডারের মধ্যে সঠিক যোগাযোগ হচ্ছে।

Spring Cloud Contract এর মূল উপাদান

  1. Contract:
    Spring Cloud Contract একটি চুক্তি সংজ্ঞায়িত করার জন্য Groovy DSL বা YAML ব্যবহার করে। এই চুক্তি দুটি সার্ভিসের (কনজিউমার এবং প্রোভাইডার) মধ্যে ডেটা বিনিময়ের প্রত্যাশিত ফরম্যাট এবং আচরণ নির্ধারণ করে।
  2. Provider Stub:
    Spring Cloud Contract প্রোভাইডারের একটি মক সার্ভিস তৈরি করে, যা কনজিউমারের অনুরোধের জন্য কাঙ্খিত রেসপন্স প্রদান করে। এটি কনজিউমারের এবং প্রোভাইডারের মধ্যে চুক্তি যাচাই করতে ব্যবহৃত হয়।
  3. Consumer Test:
    কনজিউমারের টেস্ট নিশ্চিত করে যে প্রোভাইডার চুক্তির শর্ত অনুযায়ী সঠিকভাবে ডেটা প্রদান করছে।
  4. Contract Verifier:
    Spring Cloud Contract Verifier সরঞ্জামটি ব্যবহার করে স্বয়ংক্রিয়ভাবে কনট্রাক্ট পরীক্ষা করা হয় এবং চুক্তির শর্ত অনুযায়ী সার্ভিস কাজ করছে কিনা তা যাচাই করা হয়।

Spring Cloud Contract কনফিগারেশন এবং উদাহরণ

1. Spring Cloud Contract Dependencies

Spring Cloud Contract ব্যবহার করতে প্রথমে প্রয়োজনীয় ডিপেন্ডেন্সি pom.xml এ যুক্ত করতে হবে।

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-contract-stub-runner</artifactId>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-contract-verifier</artifactId>
    <scope>test</scope>
</dependency>

2. Defining a Contract (Groovy DSL)

এখানে একটি Groovy DSL চুক্তি উদাহরণ দেওয়া হচ্ছে:

// contract.groovy
org.springframework.cloud.contract.spec.Contract.make {
    description "should return a valid response"
    request {
        method 'GET'
        url '/api/example'
    }
    response {
        status 200
        body([
            message: "Hello, World!"
        ])
        headers {
            contentType(applicationJson())
        }
    }
}

এই চুক্তি বলে যে, /api/example এ একটি GET রিকোয়েস্ট পাঠালে, প্রোভাইডার একটি সঠিক 200 OK স্ট্যাটাস সহ একটি JSON রেসপন্স ফেরত দেবে।

3. Consumer Test

কনজিউমারের জন্য Spring Cloud Contract স্বয়ংক্রিয়ভাবে টেস্ট তৈরি করে।

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ConsumerTest {

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void shouldReturnHelloWorld() {
        String response = restTemplate.getForObject("/api/example", String.class);
        assertThat(response).isEqualTo("{\"message\":\"Hello, World!\"}");
    }
}

4. Provider Stub

প্রোভাইডারের জন্য একটি স্টাব তৈরি করা হবে যাতে কনজিউমার টেস্ট করতে পারে।

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureStubRunner(ids = "com.example:my-provider:+:stubs:8080", stubsMode = StubRunnerProperties.StubsMode.LOCAL)
public class ProviderTest {

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void shouldReturnValidResponse() {
        String response = restTemplate.getForObject("http://localhost:8080/api/example", String.class);
        assertThat(response).isEqualTo("{\"message\":\"Hello, World!\"}");
    }
}

Spring Cloud Contract এর সুবিধা

  1. Consumer-Driven Contract Testing:
    কনজিউমার নিজেই পরীক্ষার চুক্তি তৈরি করে, যা সার্ভিসের মধ্যে সঠিক ডেটা আদান-প্রদান নিশ্চিত করে।
  2. স্বয়ংক্রিয় পরীক্ষা:
    Spring Cloud Contract স্বয়ংক্রিয়ভাবে প্রোভাইডার এবং কনজিউমারের মধ্যে চুক্তি যাচাই করতে সাহায্য করে, যা পরীক্ষার কাজকে দ্রুত এবং নির্ভরযোগ্য করে তোলে।
  3. ডিস্ট্রিবিউটেড সিস্টেমে মাইক্রোসার্ভিস সম্পর্কিত সমস্যা কমানো:
    সঠিকভাবে সংজ্ঞায়িত চুক্তির মাধ্যমে সার্ভিসগুলোর মধ্যে ট্রানজেকশন সম্পর্কিত ভুল বা সমস্যা কমানো সম্ভব হয়।
  4. ডকুমেন্টেশন এবং API বিবরণ:
    Spring Cloud Contract দিয়ে তৈরি হওয়া চুক্তি স্বয়ংক্রিয়ভাবে API ডকুমেন্টেশন তৈরিতে সাহায্য করে, যা ব্যবহারের জন্য খুবই সুবিধাজনক।

উপসংহার

Spring Cloud Contract মাইক্রোসার্ভিস আর্কিটেকচারে Consumer-Driven Contract Testing সিস্টেম প্রয়োগ করে এবং কনজিউমার ও প্রোভাইডারের মধ্যে সঠিকভাবে যোগাযোগ নিশ্চিত করে। এটি উন্নত API টেস্টিং, স্বয়ংক্রিয় টেস্ট তৈরি, এবং চুক্তি ভিত্তিক কাজের জন্য কার্যকরী। Spring Cloud Contract মাইক্রোসার্ভিস আর্কিটেকচারের নির্ভরযোগ্যতা এবং স্টেবিলিটি বাড়াতে গুরুত্বপূর্ণ ভূমিকা পালন করে।

Content added By

Contract Testing কি এবং এর প্রয়োজনীয়তা

66
66

Contract Testing একটি ধরনের সফটওয়্যার টেস্টিং যা দুটি সিস্টেমের মধ্যে যোগাযোগের চুক্তি (contract) যাচাই করতে ব্যবহৃত হয়। এই চুক্তি সাধারণত একটি API-এর ধরণ এবং আচরণ (behavior) সংক্রান্ত শর্তাবলী। Contract Testing এর মাধ্যমে আমরা নিশ্চিত করতে পারি যে, সার্ভিসের ক্লায়েন্ট এবং সার্ভার উভয়ই একটি সাধারণ চুক্তি মেনে চলছে এবং যোগাযোগের ক্ষেত্রে কোন সমস্যা তৈরি হচ্ছে না।

Contract বলতে বুঝানো হয় দুটি সিস্টেমের মধ্যে API-র কাঠামো (request, response, data type) এবং আচরণ। যদি এই চুক্তি পূর্ণ হয়, তবে সার্ভিসগুলোর মধ্যে নির্ভরযোগ্য এবং কার্যকর কমিউনিকেশন সম্ভব হয়। Contract Testing সাধারণত Consumer-Driven Contract Testing এবং Provider-Driven Contract Testing এই দুটি প্রধান পদ্ধতির মাধ্যমে সম্পাদিত হয়।


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

  1. মাইক্রোসার্ভিস আর্কিটেকচারে API-এর নির্ভরযোগ্যতা নিশ্চিত করা:
    • মাইক্রোসার্ভিস আর্কিটেকচারে একাধিক সার্ভিস একে অপরের উপর নির্ভরশীল থাকে এবং সার্ভিসগুলো একে অপরকে API-র মাধ্যমে কল করে। একে অপরের মধ্যে সঠিকভাবে ডেটা আদান-প্রদান হচ্ছে কিনা তা নিশ্চিত করতে Contract Testing গুরুত্বপূর্ণ। এটি API-এর ধরণ এবং আচরণ সঠিকভাবে কাজ করছে কি না তা পরীক্ষা করে।
  2. চুক্তি অনুসরণকারী সার্ভিস ডেভেলপমেন্ট:
    • Contract Testing এর মাধ্যমে এটি নিশ্চিত করা যায় যে একটি সার্ভিসের কনজিউমার বা ক্লায়েন্ট তার প্রত্যাশিত API স্ট্রাকচার এবং আচরণ মেনে কাজ করছে। সার্ভিসের প্রোভাইডার এবং কনজিউমার উভয়ের জন্য একটি চুক্তি তৈরি করা হয়, যাতে কেউই কোনো ধরনের পরিবর্তন করলে সেটি অটোমেটিক্যালি পরীক্ষা করা যাবে।
  3. রিলায়েবিলিটি এবং কম্প্যাটিবিলিটি নিশ্চিতকরণ:
    • যখন API বা সার্ভিসে কোনো পরিবর্তন আনা হয়, Contract Testing নিশ্চিত করে যে পূর্বের ক্লায়েন্ট এবং সার্ভিসের মধ্যে যোগাযোগ এবং ডেটা স্ট্রাকচার অক্ষুণ্ণ থাকবে এবং নতুন পরিবর্তনের কারণে কোনো সমস্যা হবে না।
  4. API ইন্টিগ্রেশন পরীক্ষা সহজ করা:
    • Contract Testing API-র মাধ্যমে সার্ভিস ইন্টিগ্রেশন পরীক্ষা করা সহজ করে তোলে। API-এর ভ্যালিডেশন এবং যেকোনো ধরনের ব্রেকিং চেঞ্জ সনাক্ত করা দ্রুত হয়।
  5. ফাস্ট এবং কমপ্যাক্ট টেস্টিং:
    • এটি সাধারণত দ্রুত, কমপ্যাক্ট এবং ইনক্রিমেন্টাল টেস্টিং সিস্টেম তৈরি করতে সাহায্য করে, যা মাইক্রোসার্ভিস আর্কিটেকচারে গুরুত্বপূর্ণ।

Contract Testing প্রক্রিয়া

Contract Testing সাধারণত Consumer-Driven Contract Testing এবং Provider-Driven Contract Testing পদ্ধতির মাধ্যমে সম্পাদিত হয়।

1. Consumer-Driven Contract Testing:

  • এই পদ্ধতিতে, Consumer (ক্লায়েন্ট) তাদের প্রত্যাশিত API চুক্তি তৈরি করে এবং এটি Provider (সার্ভিস) দ্বারা যাচাই করা হয়। এখানে Consumer প্রথমে তাদের প্রয়োজনীয় API চুক্তি তৈরি করে এবং পরে Provider সার্ভিসে এই চুক্তি পরীক্ষা করা হয়, যাতে নিশ্চিত করা যায় যে API-টি ঠিকভাবে কাজ করছে।

উদাহরণ:

  • একটি চ্যাট অ্যাপ্লিকেশনে ব্যবহারকারী যদি একটি নতুন মেসেজ পাঠানোর জন্য একটি POST রিকোয়েস্ট পাঠায়, তাহলে সেই API-এর স্ট্রাকচার এবং রেসপন্সের চুক্তি Consumer-Driven Contract Testing-এর মাধ্যমে নিশ্চিত করা হবে।

2. Provider-Driven Contract Testing:

  • এই পদ্ধতিতে, Provider (সার্ভিস) API-র চুক্তি তৈরি করে এবং পরে Consumer (ক্লায়েন্ট) এটি যাচাই করে। এখানে Provider সার্ভিস API-এর আচরণ এবং কাঠামো নির্ধারণ করে, এবং Consumer এই চুক্তি অনুযায়ী কাজ করে।

উদাহরণ:

  • একটি পেমেন্ট গেটওয়ে সার্ভিস একটি পেমেন্ট করার জন্য API প্রদান করে এবং সেই API এর চুক্তি Consumer দ্বারা পরীক্ষা করা হয়, যা নির্ধারণ করবে ক্লায়েন্ট কীভাবে পেমেন্ট প্রক্রিয়া করবে।

Spring Cloud Contract Testing

Spring Cloud Contract হলো Spring Framework এর একটি অংশ যা API কন্ট্রাক্ট টেস্টিং সহজ করে তোলে। এটি Consumer-Driven Contract Testing এবং Provider-Driven Contract Testing উভয়কেই সমর্থন করে। Spring Cloud Contract-এর মাধ্যমে মাইক্রোসার্ভিসের মধ্যে API ইন্টিগ্রেশন টেস্টিং সহজ এবং কার্যকরভাবে সম্পাদিত হয়।

Spring Cloud Contract সরঞ্জাম দিয়ে, আপনি কনট্রাক্ট তৈরি এবং যাচাই করতে পারবেন যা ক্লায়েন্ট এবং সার্ভিসের মধ্যে সম্পর্ক স্থাপন করবে।

Spring Cloud Contract এর প্রধান বৈশিষ্ট্যসমূহ:

  1. Consumer-Driven Contracts:
    • Consumer API কন্ট্রাক্ট তৈরি করতে পারে এবং Provider ওই কন্ট্রাক্টের সাথে মিল রেখে তাদের API ডিজাইন করে।
  2. Groovy DSL বা YAML কনফিগারেশন:
    • Spring Cloud Contract Groovy DSL অথবা YAML কনফিগারেশন ব্যবহার করে API কন্ট্রাক্ট এবং টেস্ট কেস তৈরি করতে সাহায্য করে।
  3. Auto-generated Tests:
    • Spring Cloud Contract স্বয়ংক্রিয়ভাবে কন্ট্রাক্ট টেস্ট তৈরি করে এবং API চুক্তির ভিত্তিতে সার্ভিসের কার্যকারিতা যাচাই করে।
  4. Maven/Gradle ইন্টিগ্রেশন:
    • এটি Maven বা Gradle টুলসের মাধ্যমে সহজে ইন্টিগ্রেট করা যায়, যা CI/CD পাইনলাইন এর অংশ হিসেবে টেস্টিং করতে সাহায্য করে।

Spring Cloud Contract Testing উদাহরণ

1. Spring Cloud Contract Consumer-Driven Contract Example

Maven Dependency for Spring Cloud Contract Consumer:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-contract-stub-runner</artifactId>
    <version>3.1.0</version>
    <scope>test</scope>
</dependency>

Consumer Test Example (JUnit Test):

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureStubRunner(ids = "com.example:payment-service:+:stubs:8080", stubsMode = StubRunnerProperties.StubsMode.LOCAL)
public class PaymentServiceTest {

    @Autowired
    private RestTemplate restTemplate;

    @Test
    public void testPaymentRequest() {
        String url = "http://localhost:8080/payment";
        PaymentRequest paymentRequest = new PaymentRequest("John", 100);
        
        ResponseEntity<String> response = restTemplate.postForEntity(url, paymentRequest, String.class);
        assertEquals(HttpStatus.OK, response.getStatusCode());
    }
}

Contract File Example (Groovy DSL):

org.springframework.cloud.contract.spec.Contract.make {
    description "Should create a new payment"
    request {
        method 'POST'
        url '/payment'
        body([
            "name": "John",
            "amount": 100
        ])
        headers {
            contentType(applicationJson())
        }
    }
    response {
        status 200
        body([
            "status": "success"
        ])
    }
}

2. Spring Cloud Contract Provider-Driven Contract Example

Maven Dependency for Spring Cloud Contract Provider:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-contract-verifier</artifactId>
    <version>3.1.0</version>
</dependency>

Provider Application Code Example:

@RestController
public class PaymentController {

    @PostMapping("/payment")
    public ResponseEntity<PaymentResponse> createPayment(@RequestBody PaymentRequest paymentRequest) {
        PaymentResponse response = new PaymentResponse("success");
        return ResponseEntity.ok(response);
    }
}

Contract Test Verification:

Spring Cloud Contract automatically generates tests that verify the PaymentController implementation against the contract.


উপসংহার

Contract Testing একটি অত্যন্ত গুরুত্বপূর্ণ টেস্টিং পদ্ধতি, যা মাইক্রোসার্ভিসের মধ্যে API চুক্তি নিশ্চিত করতে ব্যবহৃত হয়। এটি API-র আচরণ এবং কাঠামোর সাথে সার্ভিসের সঠিকতা নিশ্চিত করে, যার মাধ্যমে সার্ভিসগুলোর মধ্যে নিরাপদ এবং নির্ভরযোগ্য যোগাযোগ সম্ভব হয়। Spring Cloud Contract এই প্রক্রিয়াটি সরল এবং কার্যকর করে তোলে, যা মাইক্রোসার্ভিসে API ইন্টিগ্রেশন টেস্টিং সহজে এবং স্বয়ংক্রিয়ভাবে সম্পাদিত করতে সহায়তা করে।

Content added By

Spring Cloud Contract ব্যবহার করে Consumer-Driven Contract তৈরি করা

53
53

Spring Cloud Contract এমন একটি টুল যা কনজিউমার-ড্রিভেন কন্ট্রাক্ট (Consumer-Driven Contract) তৈরিতে সহায়তা করে। এটি মূলত প্রোভাইডার (Provider) এবং কনজিউমার (Consumer) এর মধ্যে যোগাযোগের জন্য নির্দিষ্ট চুক্তি বা কন্ট্রাক্ট সংজ্ঞায়িত করতে ব্যবহৃত হয়।

Spring Cloud Contract এর মাধ্যমে API ইন্টারঅ্যাকশন গ্যারান্টি দেয়া যায়, যাতে নিশ্চিত করা যায় যে প্রোভাইডার এবং কনজিউমার উভয় পক্ষই একই কন্ট্রাক্ট অনুযায়ী কাজ করছে।


Consumer-Driven Contract কী?

কনজিউমার-ড্রিভেন কন্ট্রাক্ট (Consumer-Driven Contract) এমন একটি প্যাটার্ন যেখানে API এর কন্ট্রাক্ট কনজিউমার দ্বারা সংজ্ঞায়িত হয়। এটি নিশ্চিত করে যে কনজিউমাররা তাদের প্রয়োজনীয়তার উপর ভিত্তি করে প্রোভাইডারের আচরণ পরীক্ষা করতে পারে।


Spring Cloud Contract এর মূল উপাদান

  1. কন্ট্রাক্ট ডিফিনিশন (Contract Definition):
    কন্ট্রাক্ট নির্ধারণ করার জন্য গ্রোভি (Groovy) বা YAML ফাইল ব্যবহার করা হয়। এটি API এর জন্য ইনপুট এবং আউটপুট নির্ধারণ করে।
  2. প্রোভাইডার টেস্ট জেনারেশন (Provider Test Generation):
    Spring Cloud Contract থেকে প্রোভাইডার API এর জন্য অটোমেটেড টেস্ট তৈরি করা হয়।
  3. স্টাব জেনারেশন (Stub Generation):
    স্টাব তৈরি করে যা কনজিউমার সাইড থেকে API পরীক্ষা করতে ব্যবহার করা যায়।
  4. সার্ভিস ভারিফিকেশন (Service Verification):
    কনজিউমার এবং প্রোভাইডার উভয় পক্ষই কন্ট্রাক্ট অনুযায়ী কাজ করছে কিনা তা যাচাই করা হয়।

Consumer-Driven Contract এর ধাপ

১. ডিপেনডেন্সি অ্যাড করা

build.gradle ফাইল বা pom.xml ফাইলে নিচের ডিপেনডেন্সি যুক্ত করুন:

Gradle:

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-contract-verifier'
    testImplementation 'org.springframework.cloud:spring-cloud-contract-wiremock'
}

Maven:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-contract-verifier</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-contract-wiremock</artifactId>
    <scope>test</scope>
</dependency>

২. কন্ট্রাক্ট ডিফাইন করা

গ্রোভি DSL ফাইল ব্যবহার করে কন্ট্রাক্ট তৈরি করুন।

Example Contract:

Contract.make {
    description("Should return user details when a valid user ID is provided")
    request {
        method 'GET'
        url '/users/1'
    }
    response {
        status 200
        body([
            id: 1,
            name: "John Doe",
            email: "johndoe@example.com"
        ])
        headers {
            contentType('application/json')
        }
    }
}

৩. স্টাব জেনারেশন কনফিগার করা

স্টাব জেনারেট করতে spring-cloud-contract-maven-plugin ব্যবহার করা হয়।

Maven Plugin Configuration:

<plugin>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-contract-maven-plugin</artifactId>
    <version>3.1.3</version>
    <configuration>
        <baseClassForTests>com.example.BaseTest</baseClassForTests>
    </configuration>
</plugin>

৪. প্রোভাইডার টেস্ট চালানো

Spring Cloud Contract এর মাধ্যমে অটোমেটেড টেস্ট চালানোর জন্য BaseTest নামে একটি ক্লাস তৈরি করুন।

public abstract class BaseTest {
    @BeforeEach
    public void setup() {
        RestAssured.baseURI = "http://localhost";
        RestAssured.port = 8080;
    }
}

টেস্ট রান করার পর Spring Cloud Contract নিশ্চিত করবে যে প্রোভাইডার নির্ধারিত কন্ট্রাক্ট মেনে চলছে।


৫. কনজিউমার টেস্ট

WireMock ব্যবহার করে কনজিউমার সাইড থেকে টেস্টিং করা যায়।

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWireMock(port = 0)
public class ConsumerTest {
    @Test
    public void testGetUserDetails() {
        stubFor(get(urlEqualTo("/users/1"))
                .willReturn(aResponse()
                        .withStatus(200)
                        .withBody("{ \"id\": 1, \"name\": \"John Doe\", \"email\": \"johndoe@example.com\" }")));

        ResponseEntity<String> response = new RestTemplate().getForEntity("/users/1", String.class);
        assertEquals(HttpStatus.OK, response.getStatusCode());
    }
}

Spring Cloud Contract ব্যবহার করে Consumer-Driven Contract বাস্তবায়ন করলে কনজিউমার এবং প্রোভাইডার উভয়ের মধ্যে নির্ভরযোগ্যতা নিশ্চিত হয়। এটি মাইক্রোসার্ভিস আর্কিটেকচারে একটি গুরুত্বপূর্ণ পদ্ধতি।

Content added By

Contract Stub তৈরির মাধ্যমে Microservices Integration Testing

81
81

স্প্রিং ক্লাউড কন্ট্রাক্ট (Spring Cloud Contract) একটি টুল যা মাইক্রোসার্ভিস আর্কিটেকচারে ইন্টিগ্রেশন টেস্টিং সহজ করে তোলে। এটি কনজিউমার-প্রভাইডার (Consumer-Provider) আর্কিটেকচারে সার্ভিসগুলোর মধ্যে কন্ট্রাক্ট তৈরি এবং পরীক্ষা করার জন্য ব্যবহৃত হয়।

কন্ট্রাক্ট স্টাব (Contract Stub) তৈরির মাধ্যমে স্প্রিং ক্লাউড কন্ট্রাক্ট নিশ্চিত করে যে, মাইক্রোসার্ভিসগুলো নির্ধারিত চুক্তি বা কন্ট্রাক্ট অনুসারে একে অপরের সাথে যোগাযোগ করছে।


কন্ট্রাক্ট স্টাব (Contract Stub) কী?

কন্ট্রাক্ট স্টাব এমন একটি মক বা নকল সার্ভিস যা আসল সার্ভিসের মতো আচরণ করে। এটি কনজিউমার এবং প্রভাইডারের মধ্যে নির্ধারিত কন্ট্রাক্ট অনুযায়ী আচরণ নিশ্চিত করতে ব্যবহৃত হয়। কন্ট্রাক্ট স্টাব প্রভাইডার সার্ভিসের প্রত্যাশিত রেসপন্সগুলো কনজিউমার সার্ভিসে পরীক্ষা করার জন্য তৈরি করা হয়।


মাইক্রোসার্ভিস ইন্টিগ্রেশন টেস্টিংয়ের জন্য কন্ট্রাক্ট স্টাব ব্যবহারের ধাপ

কনজিউমার এবং প্রভাইডার নির্ধারণ

  1. কনজিউমার সার্ভিস (Consumer Service): যে সার্ভিস অন্য একটি সার্ভিস থেকে ডেটা বা রিসোর্স গ্রহণ করে।
  2. প্রভাইডার সার্ভিস (Provider Service): যে সার্ভিস ডেটা বা রিসোর্স প্রদান করে।

কন্ট্রাক্ট তৈরি

স্প্রিং ক্লাউড কন্ট্রাক্ট ব্যবহার করে একটি DSL (Domain Specific Language) ফাইল তৈরি করা হয়, যা কনজিউমার-প্রভাইডার সম্পর্কের চুক্তি বর্ণনা করে। উদাহরণস্বরূপ, গ্রোভি (Groovy) বা YAML ফরম্যাটে এই কন্ট্রাক্ট ফাইল লেখা হয়।

উদাহরণ:

Contract.make {
    description "Get user details by ID"
    request {
        method GET()
        url '/users/1'
    }
    response {
        status 200
        body(
            id: 1,
            name: "John Doe"
        )
        headers {
            contentType(applicationJson())
        }
    }
}

কন্ট্রাক্ট ভেরিফিকেশন এবং স্টাব জেনারেশন

  1. প্রভাইডার সার্ভিসে কন্ট্রাক্ট ভেরিফাই করা: কন্ট্রাক্ট অনুযায়ী প্রভাইডার সার্ভিস প্রত্যাশিত রেসপন্স দিচ্ছে কিনা তা পরীক্ষা করা হয়।
  2. স্টাব জেনারেশন: কন্ট্রাক্ট ফাইল থেকে স্টাব জেনারেট করা হয়। এটি ব্যবহার করে কনজিউমার সার্ভিস পরীক্ষা করা যায়।

কনজিউমার সার্ভিসে ইন্টিগ্রেশন টেস্টিং

কনজিউমার সার্ভিসে স্টাব ব্যবহার করে পরীক্ষা করা হয় যে, প্রভাইডার সার্ভিস থেকে প্রত্যাশিত রেসপন্স পাওয়া যাচ্ছে কিনা।


স্প্রিং ক্লাউড কন্ট্রাক্ট ইন্টিগ্রেশন সেটআপ

প্রয়োজনীয় ডিপেনডেন্সি

Gradle বা Maven ব্যবহার করে স্প্রিং ক্লাউড কন্ট্রাক্টের প্রয়োজনীয় ডিপেনডেন্সি যোগ করুন।

Maven:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-contract-verifier</artifactId>
    <version>3.0.0</version>
</dependency>

Gradle:

implementation 'org.springframework.cloud:spring-cloud-starter-contract-verifier:3.0.0'

প্লাগিন কনফিগারেশন

Maven:

<plugin>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-contract-maven-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
        <baseClassForTests>com.example.BaseTestClass</baseClassForTests>
    </configuration>
</plugin>

Gradle:

plugins {
    id "org.springframework.cloud.contract" version "3.0.0"
}
contracts {
    testFramework = 'JUNIT5'
}

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

  1. ইন্টিগ্রেশন টেস্টিং সহজ এবং নির্ভুল করা।
  2. ডেভেলপমেন্টের প্রাথমিক ধাপেই বাগ শনাক্তকরণ।
  3. কনজিউমার এবং প্রভাইডারের মধ্যে স্পষ্ট চুক্তি নিশ্চিতকরণ।
  4. স্টাব ব্যবহার করে প্রভাইডার সার্ভিস ছাড়াই কনজিউমার টেস্টিং করা।

সারাংশ

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


Content added By

উদাহরণ সহ Spring Cloud Contract Testing

71
71

Spring Cloud Contract Testing একটি শক্তিশালী টুল যা প্রোডিউসার (Producer) এবং কনজিউমার (Consumer) এর মধ্যে যোগাযোগের চুক্তি বা কন্ট্রাক্ট পরীক্ষা করার জন্য ব্যবহৃত হয়। এটি মাইক্রোসার্ভিস আর্কিটেকচারে ইন্টার-সার্ভিস কমিউনিকেশনের নির্ভুলতা নিশ্চিত করে।

Spring Cloud Contract Testing এর মূল উদ্দেশ্য হলো কনজিউমার এবং প্রোডিউসারের মধ্যে নির্ধারিত চুক্তি লঙ্ঘন না হয় তা নিশ্চিত করা। এটি প্রোডিউসার এবং কনজিউমার উভয়ের জন্যই আলাদা আলাদা পরীক্ষা চালায় এবং মাইক্রোসার্ভিসের মধ্যে সমন্বয় বজায় রাখে।


Spring Cloud Contract Testing-এর কাজ করার প্রক্রিয়া

Spring Cloud Contract Testing প্রোডিউসার এবং কনজিউমারের মধ্যে HTTP বা Messaging প্রোটোকলের ভিত্তিতে কন্ট্রাক্ট তৈরি করে। নিচে কাজের ধাপগুলো দেওয়া হলো:

১. কন্ট্রাক্ট সংজ্ঞায়িত করা

কন্ট্রাক্ট একটি DSL (Domain Specific Language)-এর মাধ্যমে সংজ্ঞায়িত করা হয়। এই কন্ট্রাক্ট ফাইলটি একটি প্রোডিউসারের প্রত্যাশিত আউটপুট এবং কনজিউমারের প্রত্যাশিত ইনপুট নির্ধারণ করে।

২. কন্ট্রাক্ট যাচাই করা

Spring Cloud Contract Verifier ব্যবহার করে প্রোডিউসার সাইডে অটো-জেনারেটেড টেস্ট তৈরি হয়। এটি নিশ্চিত করে যে প্রোডিউসার কন্ট্রাক্ট অনুযায়ী কাজ করছে।

৩. স্টাব জেনারেশন

কন্ট্রাক্ট ফাইল থেকে স্টাব তৈরি করা হয়, যা কনজিউমার সাইডে মক ডেটা হিসেবে ব্যবহৃত হয়। এটি কনজিউমার টেস্টিং সহজ করে তোলে।


উদাহরণ: Spring Cloud Contract Testing

কন্ট্রাক্ট সংজ্ঞায়ন (Producer Side)

Contract.make {
    description "Should return a user by ID"
    request {
        method GET()
        urlPath '/users/1'
    }
    response {
        status 200
        body([
            id: 1,
            name: "John Doe"
        ])
        headers {
            contentType(applicationJson())
        }
    }
}

উপরের কন্ট্রাক্টটি নির্ধারণ করে যে /users/1 এ GET রিকুয়েস্ট পাঠালে একটি 200 OK রেসপন্স পাওয়া যাবে, যার মধ্যে একটি JSON অবজেক্ট থাকবে।


প্রোডিউসার টেস্টিং

Spring Cloud Contract Verifier এই কন্ট্রাক্ট থেকে টেস্ট জেনারেট করবে। উদাহরণস্বরূপ:

@Test
public void validate_shouldReturnUserById() {
    // Test logic for producer
    RestAssured
        .given()
        .when()
        .get("/users/1")
        .then()
        .statusCode(200)
        .body("name", equalTo("John Doe"));
}

কনজিউমার টেস্টিং

স্টাব জেনারেট করার পর কনজিউমার মক সার্ভিস ব্যবহার করে টেস্ট করতে পারে। উদাহরণ:

@Test
public void shouldReturnUserByIdUsingStub() {
    // Mock Server URL
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<User> response = restTemplate.getForEntity(
        "http://localhost:8080/users/1", User.class);

    assertEquals(200, response.getStatusCodeValue());
    assertEquals("John Doe", response.getBody().getName());
}

Spring Cloud Contract Testing-এর সুবিধা

  • চুক্তি লঙ্ঘন প্রতিরোধ: কনজিউমার এবং প্রোডিউসারের মধ্যে চুক্তি সঠিকভাবে পালন হচ্ছে কিনা তা নিশ্চিত করে।
  • অটোমেশন: টেস্ট অটোমেশনের মাধ্যমে ত্রুটি কমায়।
  • ডকুমেন্টেশন: কন্ট্রাক্ট ফাইল সরাসরি ডকুমেন্টেশন হিসেবে ব্যবহার করা যায়।
  • স্টাব জেনারেশন: মক সার্ভার বা স্টাব তৈরি করে টেস্টিং দ্রুততর করে।

Content added By
Promotion