Tradefed টেস্ট রানার লিখুন

Tradefed-এ কীভাবে নতুন টেস্ট রানার লিখতে হয় তা এই পৃষ্ঠায় বর্ণনা করা হয়েছে।

ব্যাকগ্রাউন্ড

Tradefed আর্কিটেকচারে টেস্ট রানারের স্থান সম্পর্কে জানতে আগ্রহী হলে, টেস্ট রানারের গঠন দেখুন।

নতুন টেস্ট রানার লেখার জন্য এটি পূর্বশর্ত নয়; টেস্ট রানার আলাদাভাবে লেখা যেতে পারে।

একেবারে ন্যূনতম: ইন্টারফেস প্রয়োগ করা

Tradefed টেস্ট রানার হিসেবে যোগ্যতা অর্জন করার জন্য ন্যূনতম প্রয়োজনীয়তা হল IRemoteTest ইন্টারফেস এবং আরও নির্দিষ্টভাবে run(TestInformation testInfo, ITestInvocationListener listener) পদ্ধতি প্রয়োগ করা।

এই পদ্ধতিটি টেস্ট রানার ব্যবহার করার সময় হার্নেস দ্বারা আহ্বান করা হয়, জাভা রানএবেলের মতো।

সেই পদ্ধতির প্রতিটি অংশ টেস্ট রানার এক্সিকিউশনের অংশ হিসেবে বিবেচনা করা হয়।

টেস্ট রানার থেকে পাওয়া ফলাফল সম্পর্কে অভিযোগ জানানো

বেস ইন্টারফেসে run মেথডটি ITestInvocationListener টাইপের লিসনার অবজেক্টে অ্যাক্সেস দেয়। এই অবজেক্টটি টেস্ট রানার থেকে হার্নেসে স্ট্রাকচার্ড ফলাফল রিপোর্ট করার মূল চাবিকাঠি।

স্ট্রাকচার্ড ফলাফল রিপোর্ট করার মাধ্যমে, টেস্ট রানারের নিম্নলিখিত প্রপার্টি থাকে:

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

তবে, স্ট্রাকচার্ড ফলাফল রিপোর্ট করা ঐচ্ছিক; কোনও টেস্ট রানার হয়তো প্রকৃত এক্সিকিউশনের কোনও বিবরণ ছাড়াই সম্পূর্ণ রানটি পাস করেছে বা ফেল করেছে হিসেবে মূল্যায়ন করতে চান।

এক্সিকিউশনের বর্তমান প্রগ্রেস সম্পর্কে হার্নেসকে বিজ্ঞপ্তি দিতে, লিসনারে নিম্নলিখিত ইভেন্ট কল করা যেতে পারে:

  • testRunStarted: Notify the beginning of a group of test cases that are related together.
    • testStarted: কোনও টেস্ট কেস শুরু হওয়ার ব্যাপারে বিজ্ঞপ্তি দেয়।
    • testFailed/testIgnored: প্রোগ্রেসে থাকা টেস্ট কেসের স্ট্যাটাস পরিবর্তন সম্পর্কে বিজ্ঞপ্তি দেয়। কোনও টেস্ট কেসের স্ট্যাটাস পরিবর্তন না হলে সেটি পাস করেছে বলে ধরে নেওয়া হয়।
    • testEnded: টেস্ট কেস শেষ হওয়ার ব্যাপারে বিজ্ঞপ্তি পাঠায়।
  • testRunFailed: Notify that the overall status of the group of test cases execution is a failure. টেস্ট রান সফল বা ব্যর্থ হতে পারে টেস্ট কেসের ফলাফলের উপর নির্ভর না করে এক্সিকিউশন কী প্রত্যাশা করেছিল তার উপর নির্ভর করে। যেমন, কোনও বাইনারি একাধিক টেস্ট কেস রান করলে সেটি সব পাস টেস্ট কেসের রিপোর্ট করতে পারে, কিন্তু এর সাথে একটি ভুল এক্সিট কোডও (যেকোনও কারণে: ফাইল লিক করা ইত্যাদি) থাকতে পারে।
  • testRunEnded: টেস্ট কেসের গ্রুপের সমাপ্তি সম্পর্কে বিজ্ঞপ্তি দেয়।

কলব্যাকের সঠিক ক্রম বজায় রাখা ও নিশ্চিত করা হল টেস্ট রানার ইমপ্লিমেন্টারের দায়িত্ব, যেমন, finally ক্লজ ব্যবহার করে ব্যতিক্রমের ক্ষেত্রে testRunEnded কল করা নিশ্চিত করা।

টেস্ট কেস কলব্যাক (testStarted, testEnded, ইত্যাদি) ঐচ্ছিক। কোনও টেস্ট কেস ছাড়াই টেস্ট রান হতে পারে।

আপনি হয়ত লক্ষ্য করেছেন যে ইভেন্টের এই স্ট্রাকচারটি JUnit-এর সাধারণ স্ট্রাকচার থেকে অনুপ্রাণিত। ডেভেলপাররা সাধারণত যে বিষয়গুলি সম্পর্কে জানেন, সেইসব মৌলিক বিষয়গুলির সাথে মিল রেখেই এটি করা হয়েছে।

টেস্ট রানার থেকে পাওয়া লগ রিপোর্ট

আপনি নিজের Tradefed টেস্ট ক্লাস বা রানার লিখলে, আপনাকে IRemoteTest ইমপ্লিমেন্ট করতে হবে এবং run() পদ্ধতির মাধ্যমে ITestInvocationListener পেতে হবে। এই লিসেনার নিম্নলিখিত উপায়ে ফাইল লগ করতে ব্যবহার করা যেতে পারে:

    listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);

ডিভাইস দিয়ে পরীক্ষা করা

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

যেসব টেস্ট রাইটার ডিভাইস টেস্টিং-এর পরবর্তী ধাপে যেতে চান, তাদের নিম্নলিখিত ইন্টারফেসের প্রয়োজন হবে:

  • IDeviceTest ITestDevice অবজেক্ট রিসিভ করার অনুমতি দেয় যা টেস্টের অধীনে থাকা ডিভাইসকে প্রতিনিধিত্ব করে এবং এটির সাথে ইন্টার‍্যাক্ট করার জন্য API প্রদান করে।
  • IBuildReceiver টেস্ট সেট-আপ সম্পর্কিত সমস্ত তথ্য ও আর্টিফ্যাক্ট সহ বিল্ড প্রোভাইডার স্টেপে তৈরি করা IBuildInfo অবজেক্ট পেতে দেয়।

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

একাধিক ডিভাইসের মাধ্যমে পরীক্ষা করুন

Tradefed একই সময়ে একাধিক ডিভাইসে টেস্ট চালানোর সুবিধা দেয়। ফোন ও ওয়াচ পেয়ারিংয়ের মতো এক্সটার্নাল ইন্টার‍্যাকশনের প্রয়োজন হয় এমন কম্পোনেন্ট টেস্ট করার সময় এটি কাজে লাগে।

একাধিক ডিভাইস ব্যবহার করতে পারে এমন একটি টেস্ট রানার লিখতে, আপনাকে IMultiDeviceTest ইমপ্লিমেন্ট করতে হবে, যা ITestDevice থেকে IBuildInfo-এর একটি ম্যাপ পেতে সাহায্য করবে, এতে ডিভাইস উপস্থাপনা এবং তাদের সম্পর্কিত বিল্ড তথ্যের সম্পূর্ণ তালিকা থাকবে।

ইন্টারফেস থেকে সেটার সবসময় run পদ্ধতির আগে কল করা হবে, তাই run কল করা হলে স্ট্রাকচার উপলভ্য হবে বলে ধরে নেওয়া নিরাপদ।

টেস্টের সেট-আপ সম্পর্কে সচেতন

কিছু টেস্ট রানার ইমপ্লিমেন্টেশনকে সঠিকভাবে কাজ করার জন্য সামগ্রিক সেট-আপ সম্পর্কে তথ্য প্রয়োজন হতে পারে, যেমন ইনভোকেশন সম্পর্কে কিছু মেটাডেটা অথবা কোন target_preparer আগে রান করেছে ইত্যাদি।

এটি করার জন্য, টেস্ট রানার IConfiguration অবজেক্ট অ্যাক্সেস করতে পারে, এটি যেটির অংশ এবং যেটিতে এটি এক্সিকিউট করা হয়। আরও বিবরণের জন্য কনফিগারেশন অবজেক্টের বিবরণ দেখুন।

টেস্ট রানার প্রয়োগ করার জন্য, আপনাকে IConfigurationReceiver প্রয়োগ করতে হবে যাতে IConfiguration অবজেক্ট পাওয়া যায়।

ফ্লেক্সিবল টেস্ট রানার

টেস্ট রানাররা তাদের টেস্ট চালানোর একটি নমনীয় উপায় প্রদান করতে পারে যদি তাদের উপর গ্র্যানুলার কন্ট্রোল থাকে, যেমন একটি JUnit টেস্ট রানার আলাদাভাবে প্রতিটি ইউনিট টেস্ট চালাতে পারে।

এর ফলে, বৃহত্তর হার্নেস ও ইনফ্রাস্ট্রাকচার সেই ফাইন কন্ট্রোলকে কাজে লাগাতে পারে এবং ব্যবহারকারীরা ফিল্টারিংয়ের মাধ্যমে টেস্ট রানার আংশিকভাবে রান করতে পারেন।

ফিল্টারিং সংক্রান্ত সহায়তা ITestFilterReceiver ইন্টারফেসে বর্ণনা করা হয়েছে, যা টেস্টের জন্য include এবং exclude ফিল্টারের সেট গ্রহণ করার অনুমতি দেয় যেগুলি রান করা উচিত বা উচিত নয়।

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