इस पेज पर बताया गया है कि टेक्स्ट लिखते समय, टेस्ट के नतीजों के साथ-साथ मेट्रिक की रिपोर्ट कैसे करें ट्रेडफेड में टेस्ट होना चाहिए.
ट्रेडेड पाइपलाइन से लॉग इन करने का फ़ायदा यह है कि आपको अपनी मेट्रिक के बारे में जानकारी मिल सकती है के बारे में आपको बेहतर जानकारी मिल सकती है. टेस्ट में मेट्रिक को आसानी से लॉग किया जा सकता है. इससे टेस्ट लिखने वाले लोगों के लिए, ज़्यादा इंस्ट्रूमेंटेशन जोड़ना आसान हो जाता है.
DeviceTestCase - 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);
}
}
}
TestCase - सामान्य JUnit3 टेस्ट
अगर आपको Tradefed में, सामान्य JUnit3 TestCase क्लास से मेट्रिक की रिपोर्ट करनी है, तो उसे 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 - सिर्फ़ Tradefed टेस्ट
अगर आपको अपनी ट्रेडफ़ेड टेस्ट क्लास या रनर लिखना है, तो उसे भी उपयोगकर्ता के तौर पर शामिल करना होगा
Iरिमोटटेस्ट
और run()
तरीके से ITestInvocationListener
पाएं. यह लिसनर
का इस्तेमाल करके मेट्रिक को इस तरह से लॉग किया जा सकता है:
listener.testLog(String dataName, LogDataType type of data, InputStreamSource data);
ट्रेडेड मेट्रिक कलेक्टर
Trefed ऐप्लिकेशन, खास तौर पर metrics_collector
ऑब्जेक्ट देता है. इससे आपको इन मेट्रिक में मेट्रिक इकट्ठा करने में मदद मिलती है
साथ ही साथ.
होस्ट की ओर
BaseDeviceMetricCollector होस्ट-साइड से किसी भी मेट्रिक को इकट्ठा करने और उनकी जानकारी देने के लिए, उन्हें लागू किया जा सकता है का इस्तेमाल भी किया जा सकता है. इस्तेमाल के अलग-अलग उदाहरणों के लिए, कई सामान्य कलेक्टर पहले से ही उपलब्ध हैं. हालांकि, हम नए योगदानों का हमेशा स्वागत करते हैं.
Tradefed को कॉल करने के लिए इस्तेमाल किए जाने वाले कलेक्टर की जानकारी देने के लिए, आपको अपने Tradefed एक्सएमएल कॉन्फ़िगरेशन में ऑब्जेक्ट जोड़ना होगा:
उदाहरण:
<metrics_collector class="com.android.tradefed.device.metric.AtraceCollector">
<option name="categories" value="freq"/>
</metrics_collector>
फ़िलहाल मौजूद कुछ कलेक्टर: * TemperatureCollector, जो टेस्ट रन के दौरान समय-समय पर तापमान इकट्ठा करता है. * AtraceCollector, जो हर टेस्ट केस के लिए 'atrace' का इस्तेमाल करके डेटा इकट्ठा करता है.
डिवाइस की तरफ़
डिवाइस-साइड टेस्ट (इंस्ट्रुमेंटेशन, UIAutomator टेस्ट वगैरह) चलाते समय, अगर कलेक्टर का होस्ट-साइड पर एसिंक्रोनस तरीके से डेटा इकट्ठा करना हो, तो यह आदर्श. उदाहरण के लिए, असिंक्रोनस तरीके से लिया गया स्क्रीनशॉट, ज़रूरी स्क्रीन को कैप्चर नहीं कर पाएगा और काम का नहीं होगा.
इस्तेमाल के इन उदाहरणों को पूरा करने के लिए, हमारे कलेक्टर का डिवाइस-साइड वर्शन मौजूद है और इसे किसी भी 'AndroidJUnitRunner' में इस्तेमाल किया जा सकता है इंस्ट्रुमेंटेशन चुनें. BaseMetricListener इकट्ठा की जाने वाली मेट्रिक की अपने-आप रिपोर्ट करने के लिए, उसे लागू किया जा सकता है यह ट्रेडेडेड रिपोर्टिंग पाइपलाइन के साथ पूरी तरह से काम करने के लिए है.
अगर Tradefed से 'AndroidJUnitTest' रनर का इस्तेमाल किया जा रहा है, तो अपने टेस्ट के साथ कलेक्टर को चलाने के लिए, कमांड-लाइन का यह विकल्प चुना जा सकता है:
--device-listeners android.device.collectors.ScreenshotListener
चेतावनी: कलेक्टर क्लास को रनटाइम पर रिज़ॉल्व करने के लिए, आपके इंस्ट्रूमेंटेशन APK को उन्हें स्टैटिक तौर पर शामिल करना होगा. इसके लिए, अपनी मेकफ़ाइल में ये चीज़ें जोड़ें:
LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
डिवाइस-साइड कलेक्टर के लिए भी योगदान दिए जा सकते हैं.
सुइट के लिए खास तौर पर ध्यान देने वाली बातें
सीटीएस जैसे सुइट के लिए जिनमें कुछ मॉड्यूल वाले टॉप-लेवल कॉन्फ़िगरेशन होते हैं
कॉन्फ़िगरेशन के लिए, हर मॉड्यूल में metrics_collector
बताने की ज़रूरत नहीं है
कॉन्फ़िगरेशन (AndroidTest.xml
). असल में इसकी मनाही है.
यह पक्का करने के लिए कि मेट्रिक कलेक्शन हर मॉड्यूल पर बराबर लागू हो, ऊपर बताए गए तरीके के मुताबिक, सिर्फ़ टॉप-लेवल कॉन्फ़िगरेशन (उदाहरण के लिए, 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>
इन पैटर्न और कुंजी को तय करने पर, कलेक्टर को कुंजी दिखने पर, उससे जुड़ी फ़ाइल को खींचकर लॉग करने की कोशिश करेगा.
इन कुंजियों को जनरेट करने के लिए, डिवाइस-साइड टेस्ट (इंस्ट्रूमेंटेशन) को उस फ़ाइल के बारे में बताना चाहिए जिसे लॉग करना है. यह उसी तरह से किया जाता है जैसे होस्ट-साइड (ऊपर बताया गया है) पर किया जाता है.
- बनाने वाली फ़ाइलों में
collector-device-lib
को अपने परीक्षण APK में जोड़ें:
LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
- फ़ाइलों को लॉग करने के लिए, हमारे @नियमों का इस्तेमाल करें:
@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
पर निर्भर करता है.