একটি Tradefed পরীক্ষা থেকে মেট্রিক্স বা ডেটা রিপোর্ট করুন

এই পৃষ্ঠায় বর্ণনা করা হয়েছে কীভাবে ট্রেডফেডে টেস্ট লেখার সময় পরীক্ষার ফলাফলের সাথে মেট্রিক্স রিপোর্ট করতে হয়।

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

ডিভাইসটেস্টকেস - JUnit3 স্টাইল

যদি আপনার টেস্টটি JUnit3-ধাঁচের কোনো টেস্টে DeviceTestCase-কে এক্সটেন্ড করে, তাহলে একটি মেট্রিক রিপোর্ট করার জন্য আপনি যেকোনো টেস্ট কেসের ভেতর থেকে addTestMetric(String key, String value) মেথডটি কল করতে পারেন। যতক্ষণ পর্যন্ত key-টি ইউনিক থাকে, ততক্ষণ এটি একাধিকবার কল করা যেতে পারে।

উদাহরণ:

    public static class TestMetricTestCase extends DeviceTestCase {

        public void testPass() {
            addTestMetric("key1", "metric1");
        }

        public void testPass2() {
            addTestMetric("key2", "metric2");
        }
    }

যদি আপনি result_reporters এ কোনো ফাইল লগ করতে চান, তাহলে যেকোনো টেস্ট কেসের ভেতর থেকে addTestLog(String dataName, LogDataType dataType, InputStreamSource dataStream) মেথডটি কল করে লগ করার জন্য একটি ফাইল রিপোর্ট করতে পারেন।

উদাহরণ:

    public static class TestLogTestCase extends DeviceTestCase {

        public void testPass() {
            try (InputStreamSource source = getDevice().getScreenshot()) {
                addTestLog("screenshot", LogDataType.PNG, source);
            }
        }
    }

টেস্টকেস - সাধারণ JUnit3 টেস্ট

আপনি যদি একটি সাধারণ JUnit3 TestCase ক্লাস থেকে Tradefed-এর ভিতরে মেট্রিক্স রিপোর্ট করতে চান, তাহলে সেটিকে MetricTestCase এ রূপান্তর করতে হবে, যা হলো হুবহু একই ক্লাস, তবে এতে একটি অতিরিক্ত মেথড রয়েছে: addTestMetric(String key, String value)

DeviceJUnit4ClassRunner - JUnit4 স্টাইল

আপনার JUnit4 স্টাইলের টেস্ট যদি DeviceJUnit4ClassRunner দিয়ে চলে, তাহলে আপনি Tradefed-এর মাধ্যমে রিপোর্ট করার জন্য একটি টেস্ট কেসের মধ্যে (@Test-এর ভিতরে) মেট্রিক্স লগ করতে পারেন। আপনার মেট্রিক্স রিপোর্ট করার জন্য TestMetrics রুল ব্যবহার করতে হবে।

উদাহরণ:

    @RunWith(DeviceJUnit4ClassRunner.class)
    public static class Junit4TestClass {

        @Rule
        public TestMetrics metrics = new TestMetrics();

        @Test
        public void testPass5() {
            // test log through the rule.
            metrics.addTestMetric("key", "value");
        }

        @Test
        public void testPass6() {
            metrics.addTestMetric("key2", "value2");
        }
    }

ফাইল রিপোর্ট করার জন্য, আপনাকে TestLogData রুলটি ব্যবহার করতে হবে।

উদাহরণ:

    @RunWith(DeviceJUnit4ClassRunner.class)
    public static class Junit4TestClass {

        @Rule
        public TestLogData logs = new TestLogData();

        @Test
        public void testPass5() {
            // test log through the rule.
            try (InputStreamSource source = getDevice().getScreenshot()) {
                logs.addTestLog("screenshot", LogDataType.PNG, source);
            }
        }
    }

আইরিমোটটেস্ট - বিশুদ্ধ ট্রেডফেড টেস্ট

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

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

ট্রেডফেড মেট্রিক্স সংগ্রাহক

ট্রেডফেড পরীক্ষাগুলোর সমান্তরালে মেট্রিক্স সংগ্রহ করার জন্য একটি বিশেষ metrics_collector অবজেক্ট প্রদান করে।

আয়োজক পক্ষে

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

আপনার ট্রেডফেড আহ্বানে ব্যবহৃত সংগ্রাহক নির্দিষ্ট করার জন্য, আপনাকে কেবল আপনার ট্রেডফেড এক্সএমএল কনফিগারেশনে অবজেক্টটি যোগ করতে হবে:

উদাহরণ:

  <metrics_collector class="com.android.tradefed.device.metric.AtraceCollector">
      <option name="categories" value="freq"/>
  </metrics_collector>

বর্তমানে বিদ্যমান কিছু কালেক্টর: * টেম্পারেচারকালেক্টর (TemperatureCollector) যা টেস্ট রান চলাকালীন পর্যায়ক্রমে তাপমাত্রা সংগ্রহ করে। * অ্যাট্রেসকালেক্টর (AtraceCollector) যা প্রতিটি টেস্ট কেসের জন্য 'অ্যাট্রেস' (atrace) ব্যবহার করে ডেটা সংগ্রহ করে।

ডিভাইসের দিকে

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

এইসব ব্যবহারের চাহিদা মেটাতে, আমাদের কালেক্টরগুলোর একটি ডিভাইস-সাইড সংস্করণ রয়েছে এবং এটি যেকোনো 'AndroidJUnitRunner' ইন্সট্রুমেন্টেশনে ব্যবহার করা যেতে পারে। Tradefed রিপোর্টিং পাইপলাইনের সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ উপায়ে সংগৃহীত মেট্রিকগুলো স্বয়ংক্রিয়ভাবে রিপোর্ট করার জন্য BaseMetricListener প্রয়োগ করা যেতে পারে।

আপনি যদি ট্রেডফেডের ' AndroidJUnitTest ' রানারটি ব্যবহার করে থাকেন, তাহলে আপনার টেস্টগুলোর সাথে কালেক্টরটি চালানোর জন্য আপনি কেবল নিম্নলিখিত কমান্ড লাইন অপশনটি নির্দিষ্ট করতে পারেন:

  --device-listeners android.device.collectors.ScreenshotListener

সতর্কতা: রানটাইমে কালেক্টর ক্লাসগুলো রিজলভ করার জন্য, আপনার ইন্সট্রুমেন্টেশন APK-তে সম্ভবত সেগুলোকে স্ট্যাটিক্যালি অন্তর্ভুক্ত করতে হবে। এর জন্য আপনার মেকফাইলে নিম্নলিখিত কোডটি যোগ করতে হবে:

  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib

ডিভাইস-সাইড কালেক্টর সম্পর্কিত অবদানও স্বাগত।

স্যুইটের জন্য বিশেষ বিবেচনা

CTS-এর মতো সুইটগুলির ক্ষেত্রে, যেগুলির শীর্ষ-স্তরের কনফিগারেশনে কিছু মডিউল কনফিগারেশন চলে, সেগুলির প্রতিটি মডিউল কনফিগারেশনে ( AndroidTest.xml ) metrics_collector উল্লেখ করার কোনো প্রয়োজন নেই। প্রকৃতপক্ষে, এটি নিষিদ্ধ।

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

একটি মডিউল থেকে ডিভাইস লগ ফাইল সংগ্রহ করুন

ডিভাইস সাইড টেস্টের মাধ্যমে কিছু ফাইল সংগ্রহ করার জন্য বিজ্ঞপ্তি পাঠানোর একটি ব্যবস্থা রয়েছে।

AndroidTest.xml এমন একটি কালেক্টর নির্দিষ্ট করা যায়, যা ডিভাইসে ফাইল খুঁজে বের করে সেগুলো নিয়ে আসবে।

  <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
      <!-- repeatable: Pattern of key of a FILE we listen on that should be pulled -->
      <option name = "pull-pattern-keys" value = "ScreenshotListener_.*" />

      <!-- repeatable: The key of the DIRECTORY to pull -->
      <option name = "directory-keys" value = "<example-key: /sdcard/atrace_logs>" />
  </metrics_collector>

এই প্যাটার্ন এবং কী নির্দিষ্ট করে দিলে, কালেক্টরটি কী-টি দেখতে পেলে সংশ্লিষ্ট ফাইলটি টেনে এনে লগ করার চেষ্টা করবে।

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

  1. আপনার টেস্ট APK-এর মেক ফাইলগুলিতে collector-device-lib যোগ করুন:
  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
  1. ফাইলগুলি লগ করতে আমাদের দেওয়া @rule ব্যবহার করুন:
    @RunWith(AndroidJUnit4.class)
    public static class Junit4TestClass {

        @Rule
        public TestLogData logs = new TestLogData();

        @Test
        public void testPass5() {
            // test log through the rule.
            File logFile = new File("whatever");
            logs.addTestLog("KEY", logFile);
        }
    }

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

দ্রষ্টব্য: ফাইলটি পুল করার পর, FilePullerDeviceMetricCollector স্বয়ংক্রিয়ভাবে ডিভাইস থেকে এটি মুছে ফেলে।

আমি মেট্রিকগুলো কোথায় পাব?

এটি আপনার XML কনফিগারেশনে নির্দিষ্ট করা result_reporter এর উপর নির্ভর করে।