একটি বৃহত্তর রেল অ্যাপ্লিকেশনগুলিতে আরএসপেক পরীক্ষার গতি বাড়ানো


91

আমার আরএসপেক পরীক্ষায় 2,000 টিরও বেশি উদাহরণ সহ আমার কাছে একটি রেল আবেদন রয়েছে। বলা বাহুল্য, এটি একটি বৃহত প্রয়োগ এবং এটি পরীক্ষা করার মতো অনেক কিছুই আছে। এই মুহুর্তে এই পরীক্ষাগুলি চালানো খুব অদক্ষ এবং কারণ এটি এত দীর্ঘ সময় নেয়, আমরা প্রায় একটি নতুন বিল্ড চাপ দেওয়ার আগে এগুলি লিখতে নিরুৎসাহিত করার পর্যায়ে এসেছি। দীর্ঘতম চলমান উদাহরণগুলি খুঁজে পেতে আমি আমার স্পট.পপ্টসে প্রোফাইলে যুক্ত করেছি এবং এর মধ্যে কমপক্ষে 10 টি রয়েছে যা চালাতে গড়ে 10 সেকেন্ড সময় নেয়। আপনি কি আরএসপেক বিশেষজ্ঞদের মধ্যে স্বাভাবিক? একটি উদাহরণের জন্য 10 সেকেন্ড পুরোপুরি অনেক দীর্ঘ? আমি বুঝতে পেরেছি যে ২,০০০ উদাহরণ সহ, সমস্ত কিছু ভালভাবে পরীক্ষা করতে এটি একটি অ-তুচ্ছ পরিমাণ সময় নেবে - তবে এই মুহুর্তে 4 ঘন্টা কিছুটা হাস্যকর।

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


4
ধীর পরীক্ষা ইন্টিগ্রেশন পরীক্ষা? তারা একটি ডিবি মারছে? যদি তা হয় তবে কতবার ডিবি পুনরায় লোড হচ্ছে এবং আপনি ডিবিটিকে উপহাস করতে পারেন?
কালেব পেডারসন

4
সিয়াটালআরবি'র অটোটেস্টের মতো আপনি যে অংশে কাজ করছেন তার সাথে প্রাসঙ্গিক যে চশমাগুলি কেবল সেগুলি চালাতে সক্ষম? আপনার কি অবিচ্ছিন্ন ইন্টিগ্রেশন সার্ভার রয়েছে যা সমস্ত পরীক্ষা চালাতে পারে?
অ্যান্ড্রু গ্রিম

স্মরণকারীও যে সমস্ত জিনিস আপেক্ষিক। আমি শুনেছি "গ্রার, আমাদের টেস্ট স্যুটটি চিরতরে লাগে" দু'বার 20 মিনিট ... এবং 16-20 ঘন্টা ধরে। সবকিছুই দর্শকের চোখে পড়ে। প্রদত্ত পরীক্ষার জন্য 10 সেকেন্ডের প্রায়শই একটি ইউনিট পরীক্ষা বোঝায় যা নীচে উল্লিখিত হিসাবে একীকরণের পরীক্ষায় পরিণত হয়েছে।
মাইকেল ডুরান্ট

এই ধরণের সমস্যার জন্য একটি পরামর্শ: perftools.rbআপনার বেশিরভাগ সময় কী ব্যবহার করছে তা বোঝার জন্য আপনার পরীক্ষার কাঠামোর সাথে একত্রে ব্যবহার করুন। শীর্ষ 10 টি কল করুন এবং সেগুলি সরিয়ে / স্কিম করার চেষ্টা করুন। তারপরে পুনরাবৃত্তি করুন, খুশি হওয়া পর্যন্ত।
আলেডালগ্রান্ডে

উত্তর:


118

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

1. একীকরণ টেস্ট থেকে পৃথক ইউনিট

আমি প্রথমে যা করব তা হ'ল ইউনিটকে ইন্টিগ্রেশন টেস্ট থেকে আলাদা করা। আপনি এটি দ্বারা এটি করতে পারেন:

  1. এগুলিকে সরানো (স্পেক ডিরেক্টরিের অধীনে পৃথক ফোল্ডারে) - এবং রেক লক্ষ্যগুলি সংশোধন করা
  2. এগুলি ট্যাগ করা (আরএসপিএক আপনাকে আপনার পরীক্ষাগুলি ট্যাগ করার অনুমতি দেয়)

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

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

২. ইউনিট টেস্টগুলিতে ইন্টিগ্রেশন টেস্টে রূপান্তর করুন

যদি আপনার ইউনিট পরীক্ষাগুলির সিংহভাগ আপনার ইন্টিগ্রেশন টেস্ট স্যুটের চেয়ে ছোট হয়, আপনার একটি সমস্যা আছে। এর অর্থ হ'ল অসঙ্গতিগুলি আরও সহজে প্রদর্শিত হতে শুরু করে। সুতরাং এখান থেকে, ইন্টিগ্রেশন পরীক্ষাগুলি প্রতিস্থাপন করতে আরও ইউনিট পরীক্ষা তৈরি করা শুরু করুন। এই প্রক্রিয়াটিতে সহায়তা করতে আপনি যেগুলি করতে পারেন সেগুলি হ'ল:

  1. বাস্তব সংস্থান পরিবর্তে একটি উপহাসের কাঠামো ব্যবহার করুন। আরএসপেকের একটি অন্তর্নির্মিত উপহাসের কাঠামো রয়েছে।
  2. আপনার ইউনিট পরীক্ষা স্যুটটিতে rcov চালান। আপনার ইউনিট পরীক্ষার স্যুটটি কতটা পুঙ্খানুপুঙ্খ তা বিচার করার জন্য এটি ব্যবহার করুন।

আপনার একবারে একটি ইন্টিগ্রেশন টেস্ট প্রতিস্থাপনের জন্য যথাযথ ইউনিট পরীক্ষা (গুলি) করা হলে - ইন্টিগ্রেশন পরীক্ষাটি সরান। সদৃশ পরীক্ষা কেবল রক্ষণাবেক্ষণকে আরও খারাপ করে তোলে।

3. ফিক্সচার ব্যবহার করবেন না

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

4. ইউনিট টেস্ট হয়ে সংহতকরণ পরীক্ষা হয়ে ওঠার জন্য চেক যোগ করুন

এখন আপনার স্থানে দ্রুততর পরীক্ষা করা হচ্ছে, এটি আবার ঘটবে না তা থেকে থামার জন্য চেক লাগানোর সময়।

এমন লাইব্রেরি রয়েছে যা ডাটাবেস (ইউনিটরেকর্ড) অ্যাক্সেস করার চেষ্টা করার সময় একটি ত্রুটি ছুঁড়ে ফেলার জন্য বানর প্যাচ সক্রিয় রেকর্ড করে।

আপনি জোড় এবং টিডিডি চেষ্টা করতে পারেন যা আপনার দলকে দ্রুত পরীক্ষা লিখতে বাধ্য করতে সহায়তা করতে পারে কারণ:

  1. কারও পরীক্ষা করা হচ্ছে - সুতরাং কেউ অলস হয় না
  2. যথাযথ টিডিডির দ্রুত প্রতিক্রিয়া প্রয়োজন। ধীরে ধীরে পরীক্ষা পুরো জিনিসটিকে বেদনাদায়ক করে তোলে।

5. সমস্যাটি কাটিয়ে ওঠার জন্য অন্যান্য গ্রন্থাগারগুলি ব্যবহার করুন

কেউ সামান্য (একাধিক কোর জুড়ে) ইউনিট পরীক্ষা চালানোর জন্য স্পার্ক (রেল 3 এর অধীনে টেস্ট স্যুটটির জন্য লোডের গতি বাড়িয়ে), হাইড্রা / সমান্তরাল_সেটস উল্লেখ করেছেন।

এটি সম্ভবত সর্বশেষে ব্যবহার করা উচিত। আপনার আসল সমস্যাটি 1, 2, পদক্ষেপের সমস্ত ধাপে রয়েছে that এটি সমাধান করুন এবং অতিরিক্ত অবকাঠামোগত ভূমিকা নেওয়ার ক্ষেত্রে আপনি আরও ভাল অবস্থানে থাকবেন।


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

4
আমি আপনার তৃতীয় বিষয়টির সাথে একমত নই যে আপনার ফিক্সচারগুলি ব্যবহার করা উচিত নয়। যদি সঠিকভাবে ব্যবহৃত হয় তবে এগুলি কারখানার চেয়ে দ্রুত হয় কারণ আপনাকে অবজেক্ট তৈরি করতে হবে না। আপনার ডেটা সেখানে প্রতিটি পরীক্ষার ক্ষেত্রে এটি তৈরি করতে হবে না।
ওয়ালারজাকে

4
কারখানাগুলি দ্রুত হওয়া সম্পর্কে এটি একটি রসিকতা, তাই না?
মাইক সিজেন্ডেল

বাছাই করে কারখানার গার্লকে এড়িয়ে
চেষ্টার

16

আপনার পরীক্ষার স্যুটটির কার্যকারিতা উন্নত করার জন্য দুর্দান্ত কুকবুকের জন্য আপনার স্যুট উপস্থাপনাটি গ্রিজ করুন।

তিনি পরীক্ষার স্যুট রান টাইমে 45x স্পিডআপ ডকুমেন্টস যেমন কৌশলগুলি ব্যবহার করে:


আমি লিঙ্কগুলি পছন্দ করি, তবে উপস্থাপনাটি পছন্দ করি না। কারও স্পীচের জন্য সূচক কার্ডগুলি স্পিকারের জন্য উপস্থাপনাটির মাংস পূরণ করার জন্য একটি প্রম্পট।
ব্রায়ান মাল্টজান

এই উপস্থাপনা আর শেষ হয় না। fast_context একাধিক কাঁটা ব্লক গতি বাড়ায়। তড়িঘড়ি ক্লিপ (সেই লিঙ্কটিও মৃত) স্পষ্টতই পেপারক্লিপকে গতি দেয়। সমান্তরাল_সেটস এবং গর্গনের জন্য হাইড্রা হ্রাস করা হয়। বুটস্নাপে ফাইল সিস্টেমের টুইট রয়েছে এবং এটি এখন রেলের সাথে অন্তর্ভুক্ত রয়েছে। রুবির সাম্প্রতিক সংস্করণগুলি বরাদ্দ এবং জিসি উন্নত করেছে।
rep

5

আপনি স্পর্ক ব্যবহার করতে পারেন। এটির 2.3.x সমর্থন রয়েছে,

https://github.com/sporkrb/spork

বা ./script/spec_server যা 2.x এর জন্য কাজ করতে পারে

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


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

4
স্পার্ক শুধুমাত্র স্টার্টআপ গতির জন্য, পরীক্ষাগুলি নয়। সুতরাং অনেকগুলি চশমা সহ, সুবিধা তুচ্ছ।
রিঅ্যাক্টরমনক

উপরের মন্তব্যের বিপরীতে স্পার্ককে পরীক্ষার গতি বাড়ানোর পাশাপাশি রেলস্কাস্ট রেলস্ক্রাস্ট . com /episodes/285- spork অনুযায়ী স্টার্টআপ হিসাবে ব্যবহার করা যেতে পারে । খুব বড় অ্যাপ্লিকেশনটিতে আমার আরএসপেক পরীক্ষার স্যুটটি ব্যাপকভাবে উন্নত করা হয়েছে। (192 সেকেন্ড থেকে 10 সেকেন্ডে হ্রাস পেয়েছে!)
জামেস্ক

3

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

ম্যাকস এবং স্টাবগুলি যথাসম্ভব ব্যবহার করুন - এগুলি ডাটাবেসকে হিট করে এমন কোড লেখার চেয়ে অনেক দ্রুত are দুর্ভাগ্যক্রমে ঠাট্টা-বিদ্রূপ ও স্ট্যাবিং লিখতে আরও বেশি সময় নেয় (এবং সঠিকভাবে করা আরও কঠিন)। পরীক্ষাগুলি লেখার সময় কাটাতে আপনার ভারসাম্য বজায় রাখতে হবে running

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


হ্যাঁ এটি যদি 10 সেকেন্ড হয় তবে আমি এটি প্রোফাইল করব এবং দেখি যে
অটলটি

4
আমার একটি বিশাল প্রকল্প রয়েছে এবং একটি একক আরএসপেক পরীক্ষা চালাতে 15-20 সেকেন্ড সময় লাগে।
এক্সিআর

2

বেশিরভাগ মানুষ উপরে হাইড্রার কথা উল্লেখ করেছেন। আমরা এটি অতীতে দুর্দান্ত সাফল্যের সাথে ব্যবহার করেছি। আমি সম্প্রতি হাইড্রা আপ এবং চলমান প্রক্রিয়াটি নথিবদ্ধ করেছি: http://logicalfriday.com/2011/05/18/faster-rails-tests-with-hydra/

আমি এই সংবেদনের সাথে একমত হই যে এই ধরণের কৌশলটি টেস্ট লেখার বিকল্প হিসাবে ব্যবহার করা উচিত নয় যা ডিফল্টরূপে সুগঠিত এবং দ্রুত হয়।


2

আপনি যদি অ্যাক্টিভেকর্ড মডেল ব্যবহার করেন তবে আপনার বিসিক্রিপ্ট এনক্রিপশনের ব্যয়টিও বিবেচনা করা উচিত।

আপনি এই ব্লগ পোস্টে এটি সম্পর্কে আরও পড়তে পারেন: http://blog.syncopelabs.co.uk/2012/12/speed-up-rspec-test.html


0

quick_require মণি আপনাকে সাহায্য করতে পারে। এ ছাড়া আপনার একমাত্র উপায় হ'ল প্রোফাইল এবং অনুকূলিতকরণ, বা স্পার্ক বা এমন কিছু ব্যবহার করুন যা আপনার চশমা আপনার জন্য সমান্তরালভাবে চালায়। http://ruby-toolbox.com/categories/distributes_testing.html


0

আপনি যদি ইতিমধ্যে চেষ্টা না করে থাকেন তবে বেশিরভাগ সময় কোথায় ব্যয় হয় তা অনুসন্ধানের জন্য আপনি কয়েকটি সাধারণ টিপস অনুসরণ করতে পারেন। নীচের নিবন্ধটি দেখুন:

https://blog.mavenhive.in/7-tips-to-speed-up-your-webdriver-tests-4f4d043ad581

আমার ধারণা, এগুলির বেশিরভাগটি সাধারণ পদক্ষেপ যা পরীক্ষার জন্য ব্যবহৃত সরঞ্জাম নির্বিশেষে প্রয়োগ করবে would


-4

বিদ্যমান পরীক্ষা স্যুট মুছুন। অবিশ্বাস্যভাবে কার্যকর হবে।

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