কীভাবে স্কেলযোগ্য এবং পার্শ্ব-প্রভাব বিনামূল্যে ইন্টিগ্রেশন পরীক্ষাগুলি তৈরি করবেন?


14

আমার বর্তমান প্রকল্পে, স্কেলযোগ্য ইন্টিগ্রেশন টেস্টগুলি তৈরি করার জন্য একটি ভাল সমাধান নিয়ে আসার জন্য আমার খুব কষ্ট হচ্ছে, যার কোনও পার্শ্ব প্রতিক্রিয়া নেই। পার্শ্ব প্রতিক্রিয়া মুক্ত সম্পত্তি সম্পর্কে একটু স্পষ্টতা: এটি বেশিরভাগ ডাটাবেস সম্পর্কে; পরীক্ষা শেষ হওয়ার পরে ডাটাবেসে কোনও পরিবর্তন হওয়া উচিত নয় (রাষ্ট্রটি সংরক্ষণ করা উচিত)। সম্ভবত স্কেলাবিলিটি এবং রাষ্ট্র সংরক্ষণ একসাথে আসে না তবে আমি আরও ভাল সমাধানের জন্য সত্যই এগিয়ে যেতে চাই।

এখানে একটি সাধারণ ইন্টিগ্রেশন পরীক্ষা (এই পরীক্ষাগুলি ডাটাবেস স্তরটিকে স্পর্শ করে):

public class OrderTests {

    List<Order> ordersToDelete = new ArrayList<Order>(); 

    public testOrderCreation() {
        Order order = new Order();
        assertTrue(order.save());
        orderToDelete.add(order);
    }

    public testOrderComparison() {
        Order order = new Order();
        Order order2 = new Order();
        assertFalse(order.isEqual(order2);
        orderToDelete.add(order);
        orderToDelete.add(order2);
    }
    // More tests

    public teardown() {
         for(Order order : ordersToDelete)
             order.delete();
    }
}

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

এই ধরনের পরীক্ষা লেখার জন্য অন্য পদ্ধতির কী হবে? আমি যে বিকল্পটি ভাবতে পারি তা হ'ল ধরণের বৈশ্বিক ভেরিয়েবল (এক শ্রেণীর মধ্যে) এবং সমস্ত পরীক্ষার পদ্ধতিগুলি এই পরিবর্তনশীল ভাগ করে। ফলস্বরূপ, কেবলমাত্র কয়েকটি অর্ডার তৈরি এবং মুছে ফেলা হয়; দ্রুত পরীক্ষা ফলাফল। যাইহোক, আমি মনে করি এটি আরও বড় সমস্যাটির পরিচয় দেয়; পরীক্ষাগুলি আর বিচ্ছিন্ন হয় না এবং সেগুলি বোঝা ও বিশ্লেষণ করা আরও আরও কঠিন হয়ে যায়।

এটি কেবল এটি হতে পারে যে ইন্টিগ্রেশন পরীক্ষাগুলি ইউনিট পরীক্ষার মতো প্রায়শই চালানো হয় না; সুতরাং স্বল্প পারফরম্যান্স তাদের জন্য গ্রহণযোগ্য হতে পারে। যাই হোক না কেন, কেউ যদি স্কেল্যাবিলিটি উন্নতির বিকল্প নিয়ে আসে তবে তা জেনে রাখা ভাল।

উত্তর:


6

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

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

হ্যাঁ, আমি নিজেই এই পদ্ধতিটি ব্যবহার করি এবং হ্যাঁ প্রথমবারের জন্য এটি পিটা ছিল, তবে আমি যে প্রকল্পটি শেষ করতে চলেছি তার জীবদ্দশায় এটি নিজের চেয়ে বেশি অর্থ প্রদানের চেয়ে বেশি। এমন অনেকগুলি সরঞ্জাম রয়েছে যা ডেটা মকআপগুলিতে সহায়তা করে।


একটি দুর্দান্ত ধারণা মত শোনাচ্ছে। আমি বিশেষত এর সম্পূর্ণ বিচ্ছিন্ন দিকটি পছন্দ করি; একটি নতুন ডাটাবেস ইনস্টল দিয়ে শুরু। দেখে মনে হচ্ছে এটি কিছু প্রচেষ্টা নেবে তবে একবার সেটআপ হয়ে গেলে এটি খুব উপকারী হবে। ধন্যবাদ।
গুভেন

3

ইন্টিগ্রেশন টেস্টগুলি লেখার সময় এটিই চিরন্তন সমস্যা।

আদর্শ সমাধান, বিশেষত যদি আপনি উত্পাদন সম্পর্কে পরীক্ষা করছেন, সেটআপে একটি লেনদেন খুলছে এবং টিয়ারডাউনতে এটি আবার ঘূর্ণায়মান। আমি মনে করি এটি আপনার প্রয়োজন অনুসারে উচিত।

যেখানে এটি সম্ভব নয়, উদাহরণস্বরূপ যেখানে আপনি ক্লায়েন্ট স্তর থেকে অ্যাপটি পরীক্ষা করছেন সেখানে অন্য সমাধান হ'ল ভার্চুয়াল মেশিনে একটি ডিবি ব্যবহার এবং সেটআপে একটি স্ন্যাপশট নেওয়া এবং টিয়ারডাউনতে ফিরে যেতে (এটি হয় না) যতক্ষণ আপনি আশা করতে পারেন নিতে পারেন)।


আমি বিশ্বাস করতে পারি না যে আমি লেনদেনের রোলব্যাকের কথা ভাবিনি। আমি সমাধানটি দ্রুত সমাধান হিসাবে সেই ধারণাটি ব্যবহার করব, তবে শেষ পর্যন্ত ইন-মেমরি ডিবি খুব আশাব্যঞ্জক মনে হচ্ছে।
গুভেন

3

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

আপনার কখনই করা উচিত নয় তা হ'ল আপনার লেনদেনের সুযোগ বাড়ানো। কিছু লোক লেনদেনের উপরে নিয়ন্ত্রণ নেওয়ার এবং পরীক্ষার পরে এটিকে আবার রোল করার পরামর্শ দেয়। আপনি যখন এটি করেন, সমস্ত সত্ত্বা (ধরে নিলে আপনি জেপিএ ব্যবহার করছেন) পরীক্ষার কার্যকর করার সময় জুড়ে থাকা দৃ context়তার প্রসঙ্গে যুক্ত থাকবে । এর ফলস্বরূপ কিছু খুব কদর্য বাগ পাওয়া যেতে পারে যা খুঁজে পাওয়া খুব শক্ত

পরিবর্তে, আপনার জেপিএউনিট বা এই পদ্ধতির অনুরূপ লাইব্রেরির মাধ্যমে প্রতিটি পরীক্ষার পরে ম্যানুয়ালি ডাটাবেস সাফ করা উচিত (জেডিবিসি ব্যবহার করে সমস্ত সারণী সাফ করুন)।

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

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


ভাল উত্তর. একটি পয়েন্ট: এটি কিছু বাহ্যিক নির্ভরতা (যেমন ইমেল প্রেরণ) উপহাস করা গ্রহণযোগ্য হতে পারে। তবে আপনি জাভা কোডটিতে উপহাস না করে একটি সম্পূর্ণ মক পরিষেবা / সার্ভার স্থাপন করে বিদ্রূপ করা উচিত।
sleske

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

2

স্কেলিবিলিটি অন

আমি এর আগেও বেশ কয়েকবার এই সমস্যাটি পেয়েছি যে, ইন্টিগ্রেশন পরীক্ষাগুলি চালাতে খুব বেশি সময় নিচ্ছিল এবং একক বিকাশকারীকে ক্রমাগত পরিবর্তনের শক্ত প্রতিক্রিয়া লুপটিতে চালানোর জন্য ব্যবহারিক ছিল না। এটি মোকাবেলার জন্য কিছু কৌশল হ'ল:

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

বৃহত্তর প্রভাবের জন্য এই কৌশলগুলি একত্রিত করার চেষ্টা করুন।


1
সত্যিই ভাল নির্দেশিকা; কম ইন্টিগ্রেশন পরীক্ষা লিখার জন্য অবশ্যই সেরা পরামর্শ। এছাড়াও, এগুলি সমান্তরালে চালানো একটি খুব ভাল বিকল্প হবে; বিচ্ছিন্নতার ক্ষেত্রে আমি সরাসরি আমার পরীক্ষা পেয়েছি কিনা তা যাচাই করার জন্য একটি নিখুঁত "পরীক্ষা"।
গুভেন

2

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.