আপনি যদি এই নিবন্ধটি আপনার মনোযোগের যোগ্য ভাল মানের সফ্টওয়্যার লেখার বিষয়ে উত্সাহী এবং পরীক্ষার মাধ্যমে আপনার অ্যাপের স্থায়িত্ব বাড়াতে চান৷ আপনার উত্পাদন সিস্টেমে পপ আপ অপ্রত্যাশিত বাগ ক্লান্ত. স্বয়ংক্রিয় পরীক্ষাগুলি কী এবং কীভাবে তাদের কাছে যেতে হবে তা বোঝার জন্য সহায়তা প্রয়োজন৷ কেন আমাদের স্বয়ংক্রিয় পরীক্ষা প্রয়োজন? প্রকৌশলী হিসাবে, আমরা এমন করতে চাই , কিন্তু আমরা তৈরি করি প্রতিটি নতুন বৈশিষ্ট্যের সাথে, আমরা অনিবার্যভাবে আমাদের অ্যাপগুলির আকার এবং জটিলতা বৃদ্ধি করি। জিনিসগুলি তৈরি যা কাজ করে পণ্য বাড়ার সাথে সাথে আপনার পরিবর্তন দ্বারা প্রভাবিত প্রতিটি কার্যকারিতা (যেমন, আপনার হাত দিয়ে) পরীক্ষা করা আরও বেশি সময়সাপেক্ষ হয়ে ওঠে। ম্যানুয়ালি স্বয়ংক্রিয় পরীক্ষার অনুপস্থিতির কারণে আমাদের হয় খুব বেশি সময় ব্যয় করা হয় এবং আমাদের শিপিংয়ের গতি কমিয়ে দেয় বা বেগ বাঁচাতে খুব কম খরচ করে, ফলে পেজারডিউটি থেকে গভীর রাতের কলগুলির সাথে ব্যাকলগে নতুন বাগ দেখা দেয়। বিপরীতে, . সুতরাং, কম্পিউটার একই বার বার প্রোগ্রাম করা যেতে পারে আসুন কম্পিউটারে পরীক্ষা অর্পণ করা যাক! টেস্টের প্রকারভেদ । আসুন প্রতিটি ধরণের গভীরে ডুব দেওয়া যাক এবং বুঝতে পারি কেন আমাদের প্রতিটির প্রয়োজন। টেস্টিং পিরামিড ধারণাটি তিনটি প্রধান ধরণের পরীক্ষার পরামর্শ দেয়: ইউনিট, ইন্টিগ্রেশন এবং এন্ড-টু-এন্ড ইউনিট পরীক্ষা একটি হল যুক্তির একটি ছোট অংশ যা আপনি পরীক্ষা করেন (অন্যান্য উপাদানগুলির উপর নির্ভর না করে)। ইউনিট বিচ্ছিন্নভাবে সেকেন্ডের মধ্যেই শেষ হয়। তাদের যেকোন সময়ে স্থানীয়ভাবে এবং সিআই-তে এগুলি চালানোর অনুমতি দেয়, নির্ভরশীল পরিষেবাগুলি/এপিআই এবং ডাটাবেস কল তৈরি না করে। ইউনিট পরীক্ষা দ্রুত হয়. বিচ্ছিন্নতা একটি ফাংশন যা দুটি সংখ্যা গ্রহণ করে এবং তাদের একসাথে যোগ করে। আমরা এটিকে বিভিন্ন যুক্তি দিয়ে কল করতে চাই এবং দাবি করতে চাই যে প্রত্যাবর্তিত মানটি সঠিক। ইউনিট পরীক্ষার উদাহরণ: // Function "sum" is the unit const sum = (x, y) => x + y test('sums numbers', () => { // Call the function, record the result const result = sum(1, 2); // Assert the result expect(result).toBe(3) }) test('sums numbers', () => { // Call the function, record the result const result = sum(5, 10); // Assert the result expect(result).toBe(15) }) একটি আরও আকর্ষণীয় উদাহরণ হল প্রতিক্রিয়া উপাদান যা API অনুরোধ শেষ হওয়ার পরে কিছু পাঠ্য রেন্ডার করে। আমাদের পরীক্ষার জন্য প্রয়োজনীয় মান ফেরত দিতে, কম্পোনেন্ট রেন্ডার করতে এবং রেন্ডার করা এইচটিএমএল-এ আমাদের প্রয়োজনীয় বিষয়বস্তু আছে বলে দাবি করার জন্য আমাদের API মডিউলটিকে উপহাস করতে হবে। // "MyComponent" is the unit const MyComponent = () => { const { isLoading } = apiModule.useSomeApiCall(); return isLoading ? <div>Loading...</div> : <div>Hello world</div> } test('renders loading spinner when loading', () => { // Mocking the API module, so that it returns the value we need jest.mock(apiModule).mockReturnValue(() => ({ useSomeApiCall: jest.fn(() => ({ // Return "isLoading: false" for this test case isLoading: false })) })) // Execute the unit (render the component) const result = render(<MyComponent />) // Assert the result result.findByText('Loading...').toBeInTheDocument() }) test('renders text content when not loading', () => { // Mocking the API module jest.mock(apiModule).mockReturnValue(() => ({ useSomeApiCall: jest.fn(() => ({ // Return "isLoading: false" for this test case isLoading: false })) })) // Execute the unit (render the component) const result = render(<MyComponent />) // Assert the result result.findByText('Hello world').toBeInTheDocument() }) ইন্টিগ্রেশন টেস্ট যখন আপনার অন্যান্য সাথে ইন্টারঅ্যাক্ট করে, তখন আমরা একে বলি। এই পরীক্ষাগুলি ইউনিট পরীক্ষার চেয়ে ধীর, তবে তারা পরীক্ষা করে যে আপনার অ্যাপের অংশগুলি কীভাবে সংযুক্ত হয়। ইউনিট ইউনিটের (নির্ভরতা) ইন্টিগ্রেশন একটি পরিষেবা যা একটি ডাটাবেসে ব্যবহারকারী তৈরি করে। পরীক্ষাগুলি চালানোর সময় এটির জন্য একটি DB উদাহরণ ( ) উপলব্ধ হওয়া প্রয়োজন। আমরা পরীক্ষা করব যে পরিষেবাটি DB থেকে একজন ব্যবহারকারী তৈরি এবং পুনরুদ্ধার করতে পারে। ইন্টিগ্রেশন পরীক্ষার উদাহরণ: নির্ভরতা import db from 'db' // We will be testing "createUser" and "getUser" const createUser = name => db.createUser(name) // creates a user const getUser = name => db.getUserOrNull(name) // retrieves a user or null test("creates and retrieves users", () => { // Try to get a user that doesn't exist, assert Null is returned const nonExistingUser = getUser("i don't exist") expect(nonExistingUser).toBe(null); // Create a user const userName = "test-user" createUser(userName); // Get the user that was just created, assert it's not Null const user = getUser(userName); expect(user).to.not.be(null) }) এন্ড-টু-এন্ড টেস্ট এটি একটি পরীক্ষা যখন আমরা পরীক্ষা করি, যেখানে এর সমস্ত নির্ভরতা উপলব্ধ। এই পরীক্ষাগুলি প্রকৃত ব্যবহারকারীর আচরণকে সর্বোত্তমভাবে অনুকরণ করে এবং আপনাকে আপনার অ্যাপে ধরতে দেয়, তবে সেগুলি হল ধরনের পরীক্ষা৷ এন্ড-টু-এন্ড সম্পূর্ণরূপে স্থাপন করা অ্যাপটি সমস্ত সম্ভাব্য সমস্যাগুলি সবচেয়ে ধীর যখনই আপনি এন্ড-টু-এন্ড পরীক্ষা চালাতে চান, আপনাকে অবশ্যই সমস্ত পরিকাঠামোর ব্যবস্থা করতে হবে এবং নিশ্চিত করতে হবে যে আপনার পরিবেশে তৃতীয় পক্ষের প্রদানকারীরা উপলব্ধ রয়েছে। আপনি আপনার অ্যাপের বৈশিষ্ট্যগুলির জন্য এগুলি পেতে চান৷ শুধুমাত্র মিশন-সমালোচনামূলক লগইন প্রবাহ। আমরা অ্যাপে যেতে চাই, লগইন বিশদ পূরণ করতে, এটি জমা দিতে এবং স্বাগত বার্তা দেখতে চাই। আসুন একটি এন্ড-টু-এন্ড পরীক্ষার উদাহরণ দেখি: test('user can log in', () => { // Visit the login page page.goto('https://example.com/login'); // Fill in the login form page.fill('#username', 'john'); page.fill('#password', 'some-password'); // Click the login button page.click('#login-button'); // Assert the welcome message is visible page.assertTextVisible('Welcome, John!') }) কিভাবে আপনি লিখতে কি ধরনের পরীক্ষা চয়ন করবেন? মনে রাখবেন যে , এবং । এন্ড-টু-এন্ড পরীক্ষাগুলি ইন্টিগ্রেশনের চেয়ে ধীর ইন্টিগ্রেশন পরীক্ষাগুলি ইউনিট পরীক্ষার চেয়ে ধীর আপনি যে বৈশিষ্ট্যটিতে কাজ করছেন তা যদি মিশন-গুরুত্বপূর্ণ হয়, তাহলে অন্তত একটি পরীক্ষা লেখার কথা বিবেচনা করুন (যেমন প্রমাণীকরণ প্রবাহ বিকাশ করার সময় লগইন কার্যকারিতা কীভাবে কাজ করে তা পরীক্ষা করা)। এন্ড-টু-এন্ড মিশন-ক্রিটিকাল ফ্লো ছাড়াও, আমরা যতটা সম্ভব এজ কেস এবং বৈশিষ্ট্যের বিভিন্ন অবস্থা পরীক্ষা করতে চাই। আমাদের অ্যাপের অংশগুলি একসাথে কীভাবে কাজ করে তা পরীক্ষা করার অনুমতি দেয়। ইন্টিগ্রেশন পরীক্ষাগুলি এন্ডপয়েন্টগুলিকে অপারেশন করা উচিত, প্রত্যাশিত ফলাফল তৈরি করা উচিত এবং কোনো অপ্রত্যাশিত ত্রুটি নিক্ষেপ করা উচিত নয়। শেষ পয়েন্ট এবং ক্লায়েন্ট উপাদানগুলির জন্য একীকরণ পরীক্ষা করা একটি ভাল ধারণা। ক্লায়েন্ট উপাদানগুলি সঠিক বিষয়বস্তু প্রদর্শন করা উচিত এবং ব্যবহারকারীর মিথস্ক্রিয়াগুলিতে প্রতিক্রিয়া জানানো উচিত যে আপনি তাদের প্রতিক্রিয়া আশা করেন। এবং অবশেষে, কখন আমাদের বেছে নেওয়া উচিত? সমস্ত ছোট ফাংশন যা বিচ্ছিন্নভাবে পরীক্ষা করা যেতে পারে, যেমন যা সংখ্যার যোগফল, যা রেন্ডার করে ট্যাগ, ইউনিট পরীক্ষার জন্য দুর্দান্ত প্রার্থী। আপনি যদি পদ্ধতি অনুসরণ করেন তবে ইউনিটগুলি নিখুঁত। ইউনিট পরীক্ষা sum Button <button> টেস্ট চালিত উন্নয়ন এরপর কি? (তবে ছোট শুরু করুন) কিছু পরীক্ষা লিখুন! আপনার প্রজেক্ট/ভাষার জন্য উপযুক্ত । প্রতিটি ভাষায় পরীক্ষার জন্য একটি জনপ্রিয় লাইব্রেরি রয়েছে, যেমন জাভাস্ক্রিপ্টের জন্য / , এন্ড-টু-এন্ডের জন্য / (এছাড়াও জাভাস্ক্রিপ্ট ব্যবহার করে), জাভার জন্য ইত্যাদি। একটি টেস্টিং ফ্রেমওয়ার্ক ইনস্টল করুন জেস্ট ভিটেস্ট সাইপ্রেস নাট্যকার JUnit আপনার প্রকল্পে একটি ছোট ফাংশন খুঁজুন এবং এটির জন্য একটি পরীক্ষা লিখুন। ইউনিট কিছু উপাদান/পরিষেবা-ডাটাবেস মিথস্ক্রিয়া জন্য একটি পরীক্ষা লিখুন। ইন্টিগ্রেশন একটি জটিল পরিস্থিতি চয়ন করুন যা দ্রুত পরীক্ষা করা যেতে পারে, যেমন একটি সাধারণ লগইন প্রবাহ, এবং এর জন্য একটি পরীক্ষা লিখুন৷ শেষ থেকে শেষ এটি কীভাবে কাজ করে তা বুঝতে উপরের জিনিসগুলি একবার করুন। তারপরে, কিছু বৈশিষ্ট্য/বাগ কাজের সময় এটি আবার করুন। তারপরে এটি আপনার সহকর্মীদের সাথে ভাগ করুন যাতে আপনি সবাই পরীক্ষা লিখতে পারেন, সময় বাঁচান এবং রাতে আরও ভাল ঘুমান! দরকারী সম্পদ: আমার ব্যক্তিগত ব্লগ দ্বারা হ্যাম Vocke ব্যবহারিক পরীক্ষা পিরামিড দ্বারা মার্টিন ফাওলার পরীক্ষা চালিত উন্নয়ন