এই পৃষ্ঠাটি বর্ণনা করে কিভাবে Tradefed-এ একজন নতুন টেস্ট রানার লিখতে হয়।
পটভূমি
আপনি যদি ট্রেডফেড আর্কিটেকচারে টেস্ট রানারদের স্থান সম্পর্কে কৌতূহলী হন, তাহলে টেস্ট রানারের কাঠামো দেখুন।
এটি একটি নতুন পরীক্ষার রানার লেখার পূর্বশর্ত নয়; পরীক্ষার রানারদের বিচ্ছিন্নভাবে লেখা যেতে পারে।
বেয়ার ন্যূনতম: ইন্টারফেস প্রয়োগ করুন
ট্রেডফেড টেস্ট রানার হিসেবে যোগ্যতা অর্জনের জন্য ন্যূনতম হল IRemoteTest ইন্টারফেস এবং আরও নির্দিষ্টভাবে run(TestInformation testInfo, ITestInvocationListener listener)
পদ্ধতি প্রয়োগ করা।
এই পদ্ধতিটি হল একটি জাভা রানেবলের মতো টেস্ট রানার ব্যবহার করার সময় জোতা দ্বারা আহ্বান করা হয়।
সেই পদ্ধতির প্রতিটি অংশ পরীক্ষা রানার নির্বাহের অংশ হিসাবে বিবেচিত হয়।
পরীক্ষার রানার থেকে ফলাফল রিপোর্ট
বেস ইন্টারফেসে run
মেথড ITestInvocationListener
টাইপের লিসেনার অবজেক্টে অ্যাক্সেস দেয়। এই বস্তুটি পরীক্ষার রানার থেকে জোতা পর্যন্ত কাঠামোগত ফলাফল রিপোর্ট করার চাবিকাঠি।
কাঠামোগত ফলাফলের প্রতিবেদন করে, একজন পরীক্ষার রানারের নিম্নলিখিত বৈশিষ্ট্য রয়েছে:
- যে সমস্ত পরীক্ষা চালানো হয়েছে, তাদের কতক্ষণ লেগেছে এবং তারা পৃথকভাবে পাস করেছে, ব্যর্থ হয়েছে বা অন্য কিছু রাজ্যের একটি সঠিক তালিকা রিপোর্ট করুন।
- প্রযোজ্য হলে পরীক্ষার সাথে সম্পর্কিত মেট্রিক্স রিপোর্ট করুন, উদাহরণস্বরূপ ইনস্টলেশন-টাইম মেট্রিক্স।
- বেশিরভাগ অবকাঠামো টুলিং-এ মানানসই, উদাহরণস্বরূপ প্রদর্শন ফলাফল এবং মেট্রিক্স ইত্যাদি।
- সাধারনত ডিবাগ করা সহজ যেহেতু এক্সিকিউশনের আরও দানাদার ট্রেস আছে।
যে বলে, কাঠামোগত ফলাফল রিপোর্ট করা ঐচ্ছিক; একজন টেস্ট রানার প্রকৃত কার্য সম্পাদনের কোনো বিশদ বিবরণ ছাড়াই কেবলমাত্র পাস বা ব্যর্থ হিসাবে সমগ্র রানের অবস্থা মূল্যায়ন করতে চাইতে পারেন।
মৃত্যুদণ্ডের বর্তমান অগ্রগতির জোতাকে অবহিত করার জন্য শ্রোতাকে নিম্নলিখিত ইভেন্টগুলি আহ্বান করা যেতে পারে:
- testRunStarted: একসাথে সম্পর্কিত পরীক্ষার কেসগুলির একটি গ্রুপের সূচনাকে অবহিত করুন।
- testStarted: একটি টেস্ট কেস শুরু হওয়ার সূচনা জানিয়ে দিন।
- পরীক্ষা ব্যর্থ/পরীক্ষা উপেক্ষা করা: প্রগতিশীল পরীক্ষার ক্ষেত্রের অবস্থার পরিবর্তনকে অবহিত করুন। রাষ্ট্রের কোনো পরিবর্তন ছাড়াই একটি টেস্ট কেস পাস বলে বিবেচিত হয়।
- testEnded: টেস্ট কেস শেষ হওয়ার কথা জানান।
- testRunFailed: সূচিত করুন যে পরীক্ষার মামলা সম্পাদনের গ্রুপের সামগ্রিক অবস্থা একটি ব্যর্থতা। এক্সিকিউশন কি আশা করছিল তার উপর নির্ভর করে টেস্ট কেস ফলাফল থেকে স্বাধীনভাবে একটি টেস্ট রান পাস বা ব্যর্থ হতে পারে। উদাহরণ স্বরূপ, একটি বাইনারি চলমান একাধিক পরীক্ষার ক্ষেত্রে সমস্ত পাস পরীক্ষার ক্ষেত্রে রিপোর্ট করতে পারে কিন্তু একটি ত্রুটি প্রস্থান কোড সহ (যেকোন কারণে: ফাঁস হওয়া ফাইল ইত্যাদি)।
- testRunEnded: টেস্ট কেস গ্রুপের সমাপ্তি জানান।
কলব্যাকগুলির যথাযথ ক্রম বজায় রাখা এবং নিশ্চিত করা পরীক্ষা রানার বাস্তবায়নকারীর দায়িত্ব, উদাহরণস্বরূপ নিশ্চিত করা যে testRunEnded
একটি finally
ধারা ব্যবহার করে ব্যতিক্রমের ক্ষেত্রে কল করা হয়েছে।
পরীক্ষার ক্ষেত্রে কলব্যাক ( testStarted
, testEnded
, ইত্যাদি) ঐচ্ছিক৷ একটি পরীক্ষা রান কোনো পরীক্ষার ক্ষেত্রে ছাড়া ঘটতে পারে.
আপনি লক্ষ্য করতে পারেন যে ইভেন্টগুলির এই কাঠামোটি সাধারণ JUnit কাঠামো থেকে অনুপ্রাণিত। এটি উদ্দেশ্যমূলকভাবে জিনিসগুলিকে মৌলিক কিছুর কাছাকাছি রাখার জন্য যা ডেভেলপারদের সাধারণত জ্ঞান থাকে৷
পরীক্ষার রানার থেকে রিপোর্ট লগ
আপনি যদি নিজের ট্রেডফেড টেস্ট ক্লাস বা রানার লিখছেন, আপনি IRemoteTest বাস্তবায়ন করবেন এবং run()
পদ্ধতির মাধ্যমে একটি ITestInvocationListener
পাবেন। এই শ্রোতা নিম্নরূপ ফাইল লগ করতে ব্যবহার করা যেতে পারে:
listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);
একটি ডিভাইস দিয়ে পরীক্ষা করুন
উপরের ন্যূনতম ইন্টারফেসটি খুব সাধারণ পরীক্ষা চালানোর অনুমতি দেয় যা বিচ্ছিন্ন এবং কোনো বিশেষ সংস্থান প্রয়োজন হয় না, উদাহরণস্বরূপ জাভা ইউনিট পরীক্ষা।
পরীক্ষা লেখক যারা ডিভাইস পরীক্ষার পরবর্তী ধাপে যেতে চান তাদের নিম্নলিখিত ইন্টারফেসের প্রয়োজন হবে:
- IDeviceTest
ITestDevice
অবজেক্ট গ্রহণ করতে দেয় যা পরীক্ষার অধীনে ডিভাইসটিকে উপস্থাপন করে এবং এটির সাথে ইন্টারঅ্যাক্ট করার জন্য API প্রদান করে। - IBuildReceiver পরীক্ষাটিকে বিল্ড প্রোভাইডার ধাপে তৈরি করা
IBuildInfo
অবজেক্ট পেতে দেয় যাতে পরীক্ষা সেটআপ সম্পর্কিত সমস্ত তথ্য এবং নিদর্শন থাকে।
টেস্ট রানাররা সাধারণত এই ইন্টারফেসে আগ্রহী হয় যাতে এক্সিকিউশনের সাথে সম্পর্কিত আর্টিফ্যাক্ট পাওয়া যায়, উদাহরণস্বরূপ অতিরিক্ত ফাইল, এবং এক্সিকিউশনের সময় টার্গেট করা হবে এমন ডিভাইসটিকে পরীক্ষার অধীনে পেতে।
একাধিক ডিভাইস দিয়ে পরীক্ষা করুন
ট্রেডফেড একই সময়ে একাধিক ডিভাইসে পরীক্ষা চালানো সমর্থন করে। ফোন এবং ঘড়ির জোড়ার মতো বাহ্যিক মিথস্ক্রিয়া প্রয়োজন এমন উপাদানগুলি পরীক্ষা করার সময় এটি কার্যকর।
একাধিক ডিভাইস ব্যবহার করতে পারে এমন একটি টেস্ট রানার লেখার জন্য, আপনাকে IMultiDeviceTest বাস্তবায়ন করতে হবে, যা IBuildInfo
তে ITestDevice
এর একটি মানচিত্র গ্রহণ করতে দেবে যাতে ডিভাইসের উপস্থাপনাগুলির সম্পূর্ণ তালিকা এবং তাদের সম্পর্কিত বিল্ড তথ্য রয়েছে।
ইন্টারফেস থেকে সেটারকে সর্বদা run
পদ্ধতির আগে কল করা হবে, তাই এটি অনুমান করা নিরাপদ যে যখন run
কল করা হবে তখন কাঠামোটি উপলব্ধ হবে।
পরীক্ষা তাদের সেটআপ সম্পর্কে সচেতন
সঠিকভাবে কাজ করার জন্য কিছু পরীক্ষা রানার বাস্তবায়নের সামগ্রিক সেটআপ সম্পর্কে তথ্যের প্রয়োজন হতে পারে, উদাহরণস্বরূপ, আমন্ত্রণ সম্পর্কে কিছু মেটাডেটা, বা কোন target_preparer
আগে দৌড়েছিল ইত্যাদি।
এটি অর্জন করার জন্য, একজন টেস্ট রানার IConfiguration
অবজেক্টটি অ্যাক্সেস করতে পারে যার এটি অংশ এবং এটি কার্যকর করা হয়েছে। আরও বিস্তারিত জানার জন্য কনফিগারেশন অবজেক্টের বিবরণ দেখুন।
পরীক্ষার রানার বাস্তবায়নের জন্য, আপনাকে IConfiguration
অবজেক্ট পেতে IConfigurationReceiver প্রয়োগ করতে হবে।
নমনীয় পরীক্ষা রানার
টেস্ট রানাররা তাদের পরীক্ষা চালানোর একটি নমনীয় উপায় প্রদান করতে পারে যদি তাদের উপর তাদের একটি দানাদার নিয়ন্ত্রণ থাকে, উদাহরণস্বরূপ, একজন JUnit পরীক্ষা রানার পৃথকভাবে প্রতিটি ইউনিট পরীক্ষা চালাতে পারে।
এটি বৃহত্তর জোতা এবং পরিকাঠামোকে সেই সূক্ষ্ম নিয়ন্ত্রণের সুবিধা দেয় এবং ব্যবহারকারীদের ফিল্টারিংয়ের মাধ্যমে আংশিকভাবে টেস্ট রানার চালাতে দেয়।
ফিল্টারিং সমর্থন ITestFilterReceiver ইন্টারফেসে বর্ণনা করা হয়েছে, যা চালানো উচিত বা না হওয়া উচিত এমন পরীক্ষার জন্য ফিল্টার include
এবং exclude
সেট গ্রহণ করতে দেয়।
আমাদের নিয়ম হল যে একটি পরীক্ষা IFF চালানো হবে এটি এক বা একাধিক অন্তর্ভুক্ত ফিল্টারের সাথে মেলে এবং বাদ দেওয়া ফিল্টারগুলির সাথে মেলে না। যদি কোনও অন্তর্ভুক্ত ফিল্টার দেওয়া না হয়, সমস্ত পরীক্ষা চালানো উচিত যতক্ষণ না তারা বাদ দেওয়া ফিল্টারগুলির সাথে মেলে।