সবাইকে অভিবাদন!
আমি সর্বদা একটি দ্বৈত উদ্দেশ্য - UI এবং API পরীক্ষার কভারেজ সহ পরীক্ষার অটোমেশন ফ্রেমওয়ার্কগুলিতে সন্দেহের দৃষ্টিতে দেখতাম। সাধারণত, আপনি বিভিন্ন টেস্ট রানে (বা ইভেন্ট প্রজেক্ট) পরীক্ষার বিভিন্ন স্তর চালাবেন, কারণ তাদের প্রতিটিরই সম্ভবত নিজস্ব আছে
সম্প্রতি, আমি এপিআই পরীক্ষার পরিপ্রেক্ষিতে নাট্যকারকে কী অফার করতে হবে তা দেখেছি এবং আমার সাইপ্রেস অভিজ্ঞতার সাথে এটির তুলনা করেছি, তাই এখানে আমি আপনাদের সবার সাথে ভাগ করে নেওয়ার জন্য কী পেয়েছি…
সাইপ্রেস
কিছুক্ষণ আগে সাইপ্রেস এপিআই পরীক্ষা করা সম্ভব করেছে। উদাহরণ সহ API পরীক্ষার ক্ষেত্রে এই টুলটি কতটা দুর্দান্ত সে সম্পর্কে আপনি শিখন পোর্টালে একটি নিবন্ধ খুঁজে পেতে পারেন।
ইনস্টলেশন কর্মক্ষমতা
পরীক্ষা চালানোর জন্য, আপনাকে আপনার প্রকল্প নির্ভরতা ইনস্টল করতে হবে, ঠিক? ঠিক আছে, সাইপ্রেস একটি ইলেক্ট্রন ব্রাউজার সহ আসে, এবং আপনি যদি একচেটিয়াভাবে API পরীক্ষা চালাতে চান তবে এটি ইনস্টল করা বেশ অপ্রয়োজনীয় (এবং সময়সাপেক্ষ) হতে পারে (আসুন, আপনি UI এবং API পরীক্ষা চালানোর জন্য CI তে আলাদা চাকরি পেয়েছেন, যা সাধারণত হয়)।
ভালো লাগছে না, তাই না? ☝️
এছাড়াও, আপনি যখন API পরীক্ষা চালান - এটি যেভাবেই হোক একটি ব্রাউজার চালু করে।
পরীক্ষার উদাহরণ
সাইপ্রেসের সাথে একটি সাধারণ API পরীক্ষা এইরকম দেখতে হবে:
it('Sign in with valid credentials', () => { cy.request('POST', '/auth', { login: Cypress.env('username'), password: Cypress.env('password'), }).should(response => { expect(response.body.token).to.be.a('string') expect(response.status).to.eq(200) }) })
দেখতে বেশ সহজ এবং সোজা, হাহ? এখানে বলা জরুরী যে এটি একটি সাধারণ সাইপ্রেস সিনট্যাক্স - অর্থাৎ চেইনিং স্টাফ , প্রতিটি আউটপুটকে ভেরিয়েবলে লেখার পরিবর্তে (যদিও এটি কিছু পরিবর্তনের সাথে সম্ভব )।
নাট্যকার
সাইপ্রেসের মতো, নাট্যকার হল একটি পরীক্ষা অটোমেশন ফ্রেমওয়ার্ক - আপনি শুধুমাত্র একটি ব্রাউজার অটোমেশন টুল একচেটিয়াভাবে ব্যবহার করতে পারেন, বা পুরো ফ্রেমওয়ার্ক (টেস্ট রানার, অ্যাসারশন লাইব্রেরি, ব্রাউজার অটোমেশন টুল, HTTP ক্লায়েন্ট, রিপোর্টার, ইত্যাদি) ব্যবহার করতে পারেন৷
ইনস্টলেশন কর্মক্ষমতা
এখানে পার্থক্য হল নাট্যকার বাক্সের বাইরে কোনো ব্রাউজার নিয়ে আসে না - আপনাকে সেগুলি একটি পৃথক কমান্ড দিয়ে ইনস্টল করতে হবে (যদি আপনি চান)।
এটি এখানে একটি বিশাল পার্থক্য করে, যেমন একচেটিয়াভাবে API পরীক্ষা চালানোর ক্ষেত্রে, এটি কোনও ব্রাউজার বা অন্য কোনও ডেস্কটপ অ্যাপ চালাবে না এবং আপনার মেশিনে কিছু রান টাইম এবং সংস্থান সংরক্ষণ করবে না।
পরীক্ষার উদাহরণ
নাট্যকারের সাথে একটি সাধারণ API পরীক্ষা এইরকম দেখতে হবে:
import {test, expect} from '@playwright/test' test('Sign in with valid credentials', async ({request}) => { const response = await request.post('/auth', { data: { login: process.env.USERNAME, password: process.env.PASSWORD, }, }) expect(response.status()).toEqual(200) expect(await response.json()).toEqual({ token: expect.any(String), }) })
আমি বস্তু জাহির করার একটি জেস্ট-এর মতো সিনট্যাক্স হাইলাইট করতে চাই:
expect(await response.json()).toEqual({ token: expect.any(String), })
এই সিনট্যাক্সটি আপনাকে শুধুমাত্র একটি expect
কলের মাধ্যমে বস্তুর সম্পূর্ণ কাঠামো যাচাই করতে দেয় ☝️
উপসংহার
এপিআই পরীক্ষাগুলি ছোট এবং লাইটওয়েট বলে মনে করা হয় কারণ তাদের চালানোর জন্য খুব বেশি প্রয়োজন হয় না।
আসুন উপরের উপাদানগুলিকে সংক্ষিপ্ত করি…
ইনস্টলেশন কর্মক্ষমতা
✅ নাট্যকার একটি বাক্সের বাইরে 13 গুণ দ্রুত পরিষ্কার ইনস্টলেশনের সাথে জিতেছেন।
ℹ️ আপনি CI- এ সাইপ্রেস ইনস্টলেশনের সময় কমাতে পারেন যদি আগে থেকে ইনস্টল করা নির্ভরতা সহ একটি ছবি ব্যবহার করেন বা আপনার CI স্টোরেজে ক্যাশে করেন ।
পারফরম্যান্স চালান
✅ নাট্যকার বিজয়ী হন কারণ API পরীক্ষা চালানোর জন্য ব্রাউজারের প্রয়োজন হয় না, তাই এটি সরাসরি পয়েন্টে যায়।
ℹ️ API পরীক্ষায় ব্রাউজারটিকে "চালাতে না দেওয়ার" কোন উপায় নেই, কারণ এটি ফ্রেমওয়ার্কের যুক্তির অংশ৷
সিনট্যাক্স পরীক্ষা করুন
এখানে একজন বিজয়ী বাছাই করা যাবে না, কারণ সাইপ্রেস বা নাট্যকারের জন্য কোন উদ্দেশ্যমূলক সুবিধা নেই।
তারা উভয়ই সামান্য পার্থক্য সহ বেশ সহজবোধ্য সিনট্যাক্স পেয়েছে। আমি বলব যে তারা এখানে যা পছন্দ করে তা বেছে নেওয়ার পরীক্ষকের সিদ্ধান্ত।
সামগ্রিকভাবে
আমি স্পষ্টভাবে বলতে পারি যে এটির পারফরম্যান্সের কারণে API টেস্ট অটোমেশনের জন্য প্লেরাইট ব্যবহার করা যথেষ্ট নিরাপদ। আপনি যদি ইতিমধ্যে এই কাঠামোর সাথে UI পরীক্ষা করে থাকেন তবে এটি একটি ন্যায্য সমাধান হবে।
যারা UI পরীক্ষার জন্য সাইপ্রেস ব্যবহার করেন এবং API স্তরটি কভার করতে চান তাদের জন্য আমার পরামর্শ - অন্য কিছু ব্যবহার করুন ( Jest + Axios , আপনি সেখানে একটি উদাহরণ দেখতে পারেন)।