বাংলা

সাইপ্রেস, শক্তিশালী এন্ড-টু-এন্ড টেস্টিং ফ্রেমওয়ার্কের একটি বিস্তারিত গাইড, যেখানে ইনস্টলেশন, টেস্ট লেখা, ডিবাগিং, CI/CD ইন্টিগ্রেশন এবং সেরা অনুশীলনগুলি কভার করা হয়েছে।

সাইপ্রেস: ওয়েব অ্যাপ্লিকেশনের জন্য চূড়ান্ত এন্ড-টু-এন্ড টেস্টিং গাইড

আজকের দ্রুত পরিবর্তনশীল ওয়েব ডেভেলপমেন্টের জগতে, ওয়েব অ্যাপ্লিকেশনের গুণমান এবং নির্ভরযোগ্যতা নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ। এন্ড-টু-এন্ড (E2E) টেস্টিং ব্যবহারকারীর দৃষ্টিকোণ থেকে একটি অ্যাপ্লিকেশনের সমস্ত উপাদান একসাথে নির্বিঘ্নে কাজ করছে কিনা তা যাচাই করতে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। সাইপ্রেস একটি নেতৃস্থানীয় E2E টেস্টিং ফ্রেমওয়ার্ক হিসাবে আবির্ভূত হয়েছে, যা একটি ডেভেলপার-বান্ধব অভিজ্ঞতা, শক্তিশালী বৈশিষ্ট্য এবং চমৎকার পারফরম্যান্স প্রদান করে। এই বিস্তারিত গাইডটি আপনাকে সাইপ্রেস শুরু করতে এবং আপনার ওয়েব অ্যাপ্লিকেশনগুলিকে কার্যকরভাবে পরীক্ষা করার জন্য যা যা জানা দরকার তার সবকিছুতেই সাহায্য করবে।

সাইপ্রেস কী?

সাইপ্রেস হলো আধুনিক ওয়েবের জন্য নির্মিত একটি নেক্সট-জেনারেশন ফ্রন্ট-এন্ড টেস্টিং টুল। প্রচলিত টেস্টিং ফ্রেমওয়ার্কগুলি যা ব্রাউজারে টেস্ট চালায়, তার বিপরীতে সাইপ্রেস সরাসরি ব্রাউজারে কাজ করে, যা আপনাকে আপনার অ্যাপ্লিকেশনের আচরণের উপর অতুলনীয় নিয়ন্ত্রণ এবং দৃশ্যমানতা দেয়। এটি দ্রুত, নির্ভরযোগ্য এবং সহজে ব্যবহারযোগ্য করার জন্য ডিজাইন করা হয়েছে, যা এটিকে বিশ্বজুড়ে ডেভেলপার এবং QA ইঞ্জিনিয়ারদের মধ্যে একটি জনপ্রিয় পছন্দ করে তুলেছে। সাইপ্রেস জাভাস্ক্রিপ্টে লেখা এবং ব্রাউজারের মধ্যে চলে, যা এটিকে খুব পারফরম্যান্ট করে এবং অ্যাপ্লিকেশনের অভ্যন্তরীণ অংশে অতুলনীয় অ্যাক্সেস দেয়।

সাইপ্রেস ব্যবহারের মূল সুবিধা

ইনস্টলেশন এবং সেটআপ

সাইপ্রেস দিয়ে শুরু করা খুবই সহজ। এটি ইনস্টল করার পদ্ধতি নিচে দেওয়া হলো:

  1. পূর্বশর্ত: নিশ্চিত করুন যে আপনার সিস্টেমে Node.js এবং npm (Node Package Manager) ইনস্টল করা আছে। আপনি অফিসিয়াল Node.js ওয়েবসাইট থেকে সেগুলি ডাউনলোড করতে পারেন।
  2. সাইপ্রেস ইনস্টল করুন: আপনার টার্মিনাল বা কমান্ড প্রম্পট খুলুন, আপনার প্রজেক্ট ডিরেক্টরিতে নেভিগেট করুন এবং নিম্নলিখিত কমান্ডটি চালান:
  3. npm install cypress --save-dev
  4. সাইপ্রেস খুলুন: ইনস্টলেশন সম্পূর্ণ হয়ে গেলে, আপনি নিম্নলিখিত কমান্ডটি চালিয়ে সাইপ্রেস টেস্ট রানার খুলতে পারেন:
  5. npx cypress open

    এই কমান্ডটি সাইপ্রেস টেস্ট রানার চালু করবে, যা আপনার টেস্ট চালানো এবং ডিবাগ করার জন্য একটি গ্রাফিকাল ইন্টারফেস প্রদান করে।

আপনার প্রথম সাইপ্রেস টেস্ট লেখা

আসুন একটি ওয়েবসাইটের হোমপেজ সঠিকভাবে লোড হচ্ছে কিনা তা যাচাই করার জন্য একটি সহজ টেস্ট তৈরি করি। আপনার প্রজেক্টের `cypress/e2e` ডিরেক্টরিতে `example.cy.js` নামে একটি নতুন ফাইল তৈরি করুন।


// cypress/e2e/example.cy.js

describe('My First Test', () => {
  it('Visits the Kitchen Sink', () => {
    cy.visit('https://example.cypress.io')
    cy.contains('type').click()
    cy.url().should('include', '/commands/actions')

    cy.get('.action-email')
      .type('fake@email.com')
      .should('have.value', 'fake@email.com')
  })
})

আসুন এই টেস্টটি ভেঙে দেখি:

সাইপ্রেস টেস্ট রানারে এই টেস্টটি চালিয়ে দেখুন এটি কীভাবে কাজ করে। আপনার দেখা উচিত ব্রাউজারটি সাইপ্রেস কিচেন সিঙ্ক ওয়েবসাইটে নেভিগেট করছে, "type" লিঙ্কে ক্লিক করছে এবং URL যাচাই করছে।

সাইপ্রেস কমান্ডস

সাইপ্রেস আপনার অ্যাপ্লিকেশনের সাথে ইন্টারঅ্যাক্ট করার জন্য বিস্তৃত কমান্ড সরবরাহ করে। এখানে কিছু সর্বাধিক ব্যবহৃত কমান্ড রয়েছে:

এগুলি সাইপ্রেসে উপলব্ধ অনেক কমান্ডের মধ্যে কয়েকটি মাত্র। কমান্ড এবং তাদের বিকল্পগুলির একটি সম্পূর্ণ তালিকার জন্য সাইপ্রেস ডকুমেন্টেশন দেখুন।

সাইপ্রেসে অ্যাসারশন

অ্যাসারশনগুলি আপনার অ্যাপ্লিকেশনের প্রত্যাশিত আচরণ যাচাই করতে ব্যবহৃত হয়। সাইপ্রেস অন্তর্নির্মিত অ্যাসারশনগুলির একটি সমৃদ্ধ সেট সরবরাহ করে যা আপনি উপাদানগুলির অবস্থা, URL, শিরোনাম এবং আরও অনেক কিছু পরীক্ষা করতে ব্যবহার করতে পারেন। অ্যাসারশনগুলি `.should()` পদ্ধতি ব্যবহার করে সাইপ্রেস কমান্ডের পরে চেইন করা হয়।

এখানে কিছু সাধারণ অ্যাসারশনের উদাহরণ দেওয়া হলো:

আপনি আপনার নির্দিষ্ট প্রয়োজন অনুসারে কাস্টম অ্যাসারশনও তৈরি করতে পারেন।

সাইপ্রেস টেস্ট লেখার সেরা অনুশীলন

সেরা অনুশীলনগুলি অনুসরণ করা আপনাকে আরও রক্ষণাবেক্ষণযোগ্য, নির্ভরযোগ্য এবং দক্ষ সাইপ্রেস টেস্ট লিখতে সাহায্য করতে পারে। এখানে কিছু সুপারিশ রয়েছে:

সাইপ্রেসের অ্যাডভান্সড কৌশল

স্টাবিং এবং মকিং

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

একটি নেটওয়ার্ক অনুরোধ স্টাব করতে, আপনি `cy.intercept()` কমান্ড ব্যবহার করতে পারেন। উদাহরণস্বরূপ, নীচের কোডটি `/api/users`-এ একটি GET অনুরোধ স্টাব করে এবং একটি মক প্রতিক্রিয়া প্রদান করে:


cy.intercept('GET', '/api/users', {
  statusCode: 200,
  body: [
    { id: 1, name: 'John Doe' },
    { id: 2, name: 'Jane Doe' }
  ]
}).as('getUsers')

তারপর আপনি `cy.wait('@getUsers')` ব্যবহার করে ইন্টারসেপ্ট করা অনুরোধের জন্য অপেক্ষা করতে পারেন এবং যাচাই করতে পারেন যে আপনার অ্যাপ্লিকেশনটি মক প্রতিক্রিয়া সঠিকভাবে পরিচালনা করছে।

লোকাল স্টোরেজ এবং কুকিজ নিয়ে কাজ করা

সাইপ্রেস লোকাল স্টোরেজ এবং কুকিজের সাথে ইন্টারঅ্যাক্ট করার জন্য কমান্ড সরবরাহ করে। আপনি আপনার টেস্টে লোকাল স্টোরেজ এবং কুকিজ সেট করতে, পেতে এবং পরিষ্কার করতে এই কমান্ডগুলি ব্যবহার করতে পারেন।

একটি লোকাল স্টোরেজ আইটেম সেট করতে, আপনি `cy.window()` কমান্ড ব্যবহার করে উইন্ডো অবজেক্ট অ্যাক্সেস করতে পারেন এবং তারপর `localStorage.setItem()` পদ্ধতি ব্যবহার করতে পারেন। উদাহরণস্বরূপ:


cy.window().then((win) => {
  win.localStorage.setItem('myKey', 'myValue')
})

একটি লোকাল স্টোরেজ আইটেম পেতে, আপনি `cy.window()` কমান্ড ব্যবহার করতে পারেন এবং তারপর `localStorage.getItem()` পদ্ধতি ব্যবহার করতে পারেন। উদাহরণস্বরূপ:


cy.window().then((win) => {
  const value = win.localStorage.getItem('myKey')
  expect(value).to.equal('myValue')
})

একটি কুকি সেট করতে, আপনি `cy.setCookie()` কমান্ড ব্যবহার করতে পারেন। উদাহরণস্বরূপ:


cy.setCookie('myCookie', 'myCookieValue')

একটি কুকি পেতে, আপনি `cy.getCookie()` কমান্ড ব্যবহার করতে পারেন। উদাহরণস্বরূপ:


cy.getCookie('myCookie').should('have.property', 'value', 'myCookieValue')

ফাইল আপলোড পরিচালনা করা

সাইপ্রেস `cypress-file-upload` নামে একটি প্লাগইন সরবরাহ করে যা আপনার টেস্টে ফাইল আপলোডকে সহজ করে। প্লাগইনটি ইনস্টল করতে, নিম্নলিখিত কমান্ডটি চালান:

npm install -D cypress-file-upload

তারপর, আপনার `cypress/support/commands.js` ফাইলে নিম্নলিখিত লাইনটি যোগ করুন:


import 'cypress-file-upload';

তারপর আপনি একটি ফাইল আপলোড করতে `cy.uploadFile()` কমান্ড ব্যবহার করতে পারেন। উদাহরণস্বরূপ:


cy.get('input[type="file"]').attachFile('example.txt')

IFrame নিয়ে কাজ করা

IFrame টেস্টিং জটিল হতে পারে, কিন্তু সাইপ্রেস তাদের সাথে ইন্টারঅ্যাক্ট করার একটি উপায় সরবরাহ করে। আপনি একটি IFrame লোড হওয়ার জন্য অপেক্ষা করতে `cy.frameLoaded()` কমান্ড ব্যবহার করতে পারেন, এবং তারপর IFrame-এর ডকুমেন্ট অবজেক্ট পেতে `cy.iframe()` কমান্ড ব্যবহার করতে পারেন।


cy.frameLoaded('#myIframe')
cy.iframe('#myIframe').find('button').click()

সাইপ্রেস এবং কন্টিনিউয়াস ইন্টিগ্রেশন/কন্টিনিউয়াস ডিপ্লয়মেন্ট (CI/CD)

আপনার অ্যাপ্লিকেশনের গুণমান নিশ্চিত করার জন্য আপনার CI/CD পাইপলাইনে সাইপ্রেসকে একীভূত করা অপরিহার্য। আপনি আপনার CI/CD পরিবেশে হেডলেস মোডে সাইপ্রেস টেস্ট চালাতে পারেন। এখানে কীভাবে:

  1. সাইপ্রেস ইনস্টল করুন: নিশ্চিত করুন যে সাইপ্রেস আপনার প্রজেক্টে একটি নির্ভরতা হিসাবে ইনস্টল করা আছে।
  2. CI/CD কনফিগার করুন: প্রতিটি বিল্ডের পরে সাইপ্রেস টেস্ট চালানোর জন্য আপনার CI/CD পাইপলাইন কনফিগার করুন।
  3. হেডলেস মোডে সাইপ্রেস চালান: হেডলেস মোডে সাইপ্রেস টেস্ট চালানোর জন্য `cypress run` কমান্ড ব্যবহার করুন।

উদাহরণ CI/CD কনফিগারেশন (গিটহাব অ্যাকশন ব্যবহার করে):


name: Cypress Tests

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  cypress-run:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 16
      - name: Install dependencies
        run: npm install
      - name: Cypress run
        uses: cypress-io/github-action@v5
        with:
          start: npm start
          wait-on: 'http://localhost:3000'

এই কনফিগারেশনটি যখনই `main` শাখায় কোড পুশ করা হয় বা `main` শাখার বিরুদ্ধে একটি পুল অনুরোধ তৈরি করা হয় তখন সাইপ্রেস টেস্ট চালাবে। `cypress-io/github-action` অ্যাকশনটি গিটহাব অ্যাকশনে সাইপ্রেস টেস্ট চালানোর প্রক্রিয়াকে সহজ করে।

সাইপ্রেস টেস্ট ডিবাগ করা

সাইপ্রেস আপনার টেস্টে সমস্যা সনাক্ত করতে এবং সমাধান করতে সাহায্য করার জন্য চমৎকার ডিবাগিং টুল সরবরাহ করে। সাইপ্রেস টেস্ট ডিবাগ করার জন্য এখানে কিছু টিপস রয়েছে:

সাইপ্রেস বনাম অন্যান্য টেস্টিং ফ্রেমওয়ার্ক

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

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

বাস্তব জগতে সাইপ্রেসের প্রয়োগের উদাহরণ

আসুন বিভিন্ন ধরণের ওয়েব অ্যাপ্লিকেশন পরীক্ষা করার জন্য সাইপ্রেস কীভাবে ব্যবহার করা যেতে পারে তার কয়েকটি বাস্তব-বিশ্বের উদাহরণ অন্বেষণ করি:

একটি ই-কমার্স অ্যাপ্লিকেশন টেস্টিং

আপনি একটি ই-কমার্স অ্যাপ্লিকেশনে বিভিন্ন ব্যবহারকারী ফ্লো পরীক্ষা করতে সাইপ্রেস ব্যবহার করতে পারেন, যেমন:

এখানে একটি সাইপ্রেস টেস্টের উদাহরণ রয়েছে যা যাচাই করে যে একজন ব্যবহারকারী সফলভাবে তাদের কার্টে একটি পণ্য যোগ করতে পারে:


it('Adds a product to the cart', () => {
  cy.visit('/products')
  cy.get('.product-card').first().find('button').click()
  cy.get('.cart-count').should('have.text', '1')
})

একটি সোশ্যাল মিডিয়া অ্যাপ্লিকেশন টেস্টিং

আপনি একটি সোশ্যাল মিডিয়া অ্যাপ্লিকেশনে ব্যবহারকারীর ইন্টারঅ্যাকশন পরীক্ষা করতে সাইপ্রেস ব্যবহার করতে পারেন, যেমন:

এখানে একটি সাইপ্রেস টেস্টের উদাহরণ রয়েছে যা যাচাই করে যে একজন ব্যবহারকারী সফলভাবে একটি নতুন পোস্ট তৈরি করতে পারে:


it('Creates a new post', () => {
  cy.visit('/profile')
  cy.get('#new-post-textarea').type('Hello, world!')
  cy.get('#submit-post-button').click()
  cy.get('.post').first().should('contain', 'Hello, world!')
})

একটি ব্যাংকিং অ্যাপ্লিকেশন টেস্টিং

ব্যাংকিং অ্যাপ্লিকেশনগুলির জন্য, সাইপ্রেস গুরুত্বপূর্ণ কার্যকারিতা পরীক্ষা করতে ব্যবহার করা যেতে পারে যেমন:

একটি তহবিল স্থানান্তর যাচাই করার জন্য একটি টেস্ট এরকম দেখতে পারে (নিরাপত্তার জন্য উপযুক্ত স্টাবিং সহ):


it('Transfers funds successfully', () => {
  cy.visit('/transfer')
  cy.get('#recipient-account').type('1234567890')
  cy.get('#amount').type('100')
  cy.intercept('POST', '/api/transfer', { statusCode: 200, body: { success: true } }).as('transfer')
  cy.get('#transfer-button').click()
  cy.wait('@transfer')
  cy.get('.success-message').should('be.visible')
})

উপসংহার

সাইপ্রেস একটি শক্তিশালী এবং বহুমুখী এন্ড-টু-এন্ড টেস্টিং ফ্রেমওয়ার্ক যা আপনাকে আপনার ওয়েব অ্যাপ্লিকেশনের গুণমান এবং নির্ভরযোগ্যতা নিশ্চিত করতে সাহায্য করতে পারে। এর ডেভেলপার-বান্ধব API, শক্তিশালী বৈশিষ্ট্য এবং চমৎকার পারফরম্যান্স এটিকে বিশ্বজুড়ে ডেভেলপার এবং QA ইঞ্জিনিয়ারদের মধ্যে একটি জনপ্রিয় পছন্দ করে তুলেছে। এই গাইডে বর্ণিত সেরা অনুশীলনগুলি অনুসরণ করে, আপনি কার্যকর সাইপ্রেস টেস্ট লিখতে পারেন যা আপনাকে ডেভেলপমেন্ট প্রক্রিয়ার প্রথম দিকে বাগ ধরতে এবং আপনার ব্যবহারকারীদের কাছে উচ্চ-মানের সফ্টওয়্যার সরবরাহ করতে সাহায্য করবে।

ওয়েব অ্যাপ্লিকেশনগুলি যেমন বিকশিত হতে থাকবে, এন্ড-টু-এন্ড টেস্টিংয়ের গুরুত্ব কেবল বাড়বে। সাইপ্রেসকে গ্রহণ করা এবং এটিকে আপনার ডেভেলপমেন্ট ওয়ার্কফ্লোতে একীভূত করা আপনাকে আরও শক্তিশালী, নির্ভরযোগ্য এবং ব্যবহারকারী-বান্ধব ওয়েব অভিজ্ঞতা তৈরি করতে সক্ষম করবে।