XUnit ফ্রেমওয়ার্কগুলি কেন সমান্তরালে পরীক্ষাগুলি চালানোর অনুমতি দেয় না?


15

আপনি কি এমন কোনও xUnit কাঠামো জানেন যা সমান্তরালভাবে পরীক্ষা চালাতে, আজকের মেশিনে একাধিক কোর ব্যবহার করতে দেয়?

যদি তাদের মধ্যে কেউ (বা খুব কম) এটি না করে থাকে, তবে এর কোনও কারণ থাকতে পারে ... এটি কি পরীক্ষাগুলি সাধারণত এত তাড়াতাড়ি হয় যে লোকেরা কেবল তাদের প্যারালাইলেজ করার প্রয়োজন বোধ করে না?

আরও গভীর কিছু আছে যা একাধিক থ্রেডের উপর পরীক্ষাগুলি বিতরণ (কমপক্ষে কিছু) বন্ধ করে দেয়?


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

উত্তর:


6

NUnit 2.5 বান্ডিলযুক্ত পিএনউনিট যা সমান্তরালে পরীক্ষাগুলি চালনার অনুমতি দেয়।

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

JUnit পাশের সমান্তরাল-জুনিট পাশাপাশি অ্যামিনো রয়েছে


সুতরাং অন্যান্য ফ্রেমওয়ার্কের একমাত্র কারণটি 'এখনও বাস্তবায়িত হয়নি'?
জাভিয়ের নোডেট

1
@ জাভেয়ার হ্যাঁ; এটি একটি নিখুঁত বিবৃতি।
অ্যারন ম্যাকআইভার

10

আপনার প্রশ্নের দ্বিতীয় অংশের উত্তর দিতে: আরও গভীর কিছু আছে যা একাধিক থ্রেডের উপর পরীক্ষাগুলি বিতরণ (কমপক্ষে কিছু) থামিয়ে দেয়?

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

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

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


+1 এটি ব্যতীত উত্তর হওয়া উচিত কারণ এটি আসলে কেন উত্তর দেয়।
অলিভার ওয়েইলার

4

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


এটি যত্ন নেওয়ার জন্য টেস্টিং প্ল্যাটফর্মের জন্য নয় (xUnit); এটি একটি বাস্তবায়ন বিশদ।
অ্যারন ম্যাকআইভার

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

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

2

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

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


0

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

মাল্টি প্রসেসরগুলিতে মাল্টি-থ্রেডিং করার কৌশলগুলি মাল্টি-প্রসেসর পিসিগুলির আবির্ভাবের সাথে আরও ভাল হচ্ছে। তবে এগুলি ব্যাপকভাবে ব্যবহারের আগে সময় লাগবে।

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

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


0

এমবিউনিত কিছু সমাবেশ স্তরের বৈশিষ্ট্যগুলি নির্দিষ্ট করে কেবল সমান্তরালে পরীক্ষা চালাতে সক্ষম হন।

[assembly: DegreeOfParallelism(6)]
[assembly: Parallelizable(TestScope.All)]

আমি বেশ কিছু সময়ের জন্য বেশ সফলতার সাথে সমান্তরালে সেলেনিয়াম পরীক্ষা চালানোর জন্য সেই প্রকল্পটি ব্যবহার করছি। দুর্ভাগ্যক্রমে প্রকল্পটি খুব বেশি বেঁচে নেই।

xUnit 2.0 এছাড়াও সমান্তরাল ইউনিট পরীক্ষার সমর্থন করা উচিত কিন্তু আমি এখনও এটি চেষ্টা করে নি।

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