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

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

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

डिवाइसटेस्टकेस - JUnit3 शैली

यदि आपका परीक्षण डिवाइसटेस्टकेस को JUnit3-शैली के परीक्षण में विस्तारित करता है, तो आप मीट्रिक की रिपोर्ट करने के लिए किसी भी परीक्षण मामले के अंदर से 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 टेस्टकेस क्लास से ट्रेडफेड के अंदर मेट्रिक्स की रिपोर्ट करना चाहते हैं, तो इसे MetricTestCase में परिवर्तित करने की आवश्यकता होगी जो एक अतिरिक्त विधि के साथ बिल्कुल वही क्लास है: addTestMetric(String key, String value)

डिवाइसJUnit4ClassRunner - JUnit4 शैली

यदि आपका JUnit4 स्टाइल टेस्ट डिवाइसJUnit4ClassRunner के साथ चल रहा है, तो आप ट्रेडफेड द्वारा रिपोर्ट किए जाने वाले टेस्ट केस (@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>

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

डिवाइस की तरफ

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

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

यदि आप ट्रेडफेड से ' 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 स्वचालित रूप से इसे डिवाइस से साफ़ कर देता है।

मुझे मेट्रिक्स कहां मिलेंगे?

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