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

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

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

DeviceTestCase - JUnit3 শৈলী

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

উদাহরণ:

    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)

ডিভাইসJUnit4ClassRunner - JUnit4 শৈলী

যদি আপনার JUnit4 শৈলী পরীক্ষাটি DeviceJUnit4ClassRunner এর সাথে চলছে, তাহলে আপনি ট্রেডফেড দ্বারা রিপোর্ট করার জন্য একটি পরীক্ষার ক্ষেত্রে (@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 - বিশুদ্ধ ট্রেডফেড টেস্ট

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

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

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

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

হোস্ট সাইডে

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

আপনার Tradefed আমন্ত্রণে ব্যবহার করা সংগ্রাহককে নির্দিষ্ট করার জন্য, আপনাকে কেবলমাত্র আপনার Tradefed XML কনফিগারেশনে বস্তুটি যোগ করতে হবে:

উদাহরণ:

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

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

ডিভাইসের পাশে

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

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

আপনি যদি Tradefed থেকে ' 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. ফাইল লগ করার জন্য আমরা যে @রুল প্রদান করি তা ব্যবহার করুন:
    @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 উপর নির্ভর করে।