ट्रेडफेड परीक्षण से मेट्रिक्स या डेटा की रिपोर्ट कैसे करें

यह पृष्ठ बताता है कि ट्रेडफेड में परीक्षण लिखते समय परीक्षण परिणामों के साथ मेट्रिक्स की रिपोर्ट कैसे करें।

ट्रेडफेड पाइपलाइन के माध्यम से लॉगिंग का लाभ आपके कार्यात्मक परिणामों के साथ-साथ आपके मेट्रिक्स को खोजना है। मेट्रिक्स की लॉगिंग परीक्षणों के भीतर बहुत स्वाभाविक रूप से की जा सकती है, जिससे परीक्षण लेखकों के लिए अधिक इंस्ट्रूमेंटेशन जोड़ना सुविधाजनक हो जाता है।

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)

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 - शुद्ध ट्रेडफेड टेस्ट

यदि आप अपना खुद का ट्रेडफेड टेस्ट क्लास या रनर लिख रहे हैं तो आप 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>

वर्तमान में कुछ मौजूदा संग्राहक: * तापमान संग्राहक जो परीक्षण चलाने के दौरान समय-समय पर तापमान एकत्र करता है। * एट्रेस कलेक्टर जो प्रत्येक परीक्षण मामले के लिए 'एट्रेस' का उपयोग करके एकत्र करता है।

डिवाइस की तरफ

डिवाइस-साइड परीक्षण (इंस्ट्रुमेंटेशन, UIAutomator परीक्षण, आदि) चलाते समय, होस्ट-साइड पर कलेक्टर को अतुल्यकालिक रूप से एकत्रित करना आदर्श नहीं हो सकता है। उदाहरण के लिए, एसिंक्रोनस रूप से लिया गया एक स्क्रीनशॉट सबसे अधिक वांछित स्क्रीन को याद करेगा और बेकार होगा।

इन उपयोग मामलों को पूरा करने के लिए, हमारे संग्राहकों का एक उपकरण-पक्ष संस्करण मौजूद है और किसी भी 'AndroidJUnitRunner' उपकरण में उपयोग किया जा सकता है। बेसमैट्रिक लिस्टनर को स्वचालित रूप से मेट्रिक्स की रिपोर्ट करने के लिए कार्यान्वित किया जा सकता है जो ट्रेडफेड रिपोर्टिंग पाइपलाइन के साथ पूरी तरह से संगत तरीके से एकत्र किए जाते हैं।

यदि आप Tradefed से ' AndroidJUnitTest ' रनर का उपयोग कर रहे हैं, तो आप अपने कलेक्टर को अपने परीक्षणों के साथ चलाने के लिए बस निम्नलिखित कमांड लाइन विकल्प निर्दिष्ट कर सकते हैं:

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

चेतावनी: संग्राहक कक्षाओं को रनटाइम पर हल करने के लिए, आपके उपकरण एपीके को आपके मेकफ़ाइल में निम्नलिखित जोड़कर उन्हें स्थिर रूप से शामिल करने की आवश्यकता होगी:

  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib

डिवाइस-साइड संग्राहकों में योगदान का भी स्वागत है।

सुइट्स के लिए विशेष विचार

सीटीएस जैसे सुइट्स के लिए जिनमें कुछ मॉड्यूल कॉन्फ़िगरेशन चलाने वाले शीर्ष-स्तरीय कॉन्फ़िगरेशन हैं, प्रत्येक मॉड्यूल कॉन्फ़िगरेशन ( 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. मेक फाइल्स में अपने टेस्ट एपीके में 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 स्वचालित रूप से इसे डिवाइस से साफ़ कर देता है।

मेट्रिक्स कहां खोजें?

यह आपके एक्सएमएल कॉन्फ़िगरेशन में निर्दिष्ट result_reporter पर निर्भर करता है।