ट्रेडफेड में सुइट का मतलब ऐसे सेटअप से है जिसमें एक सामान्य टेस्ट रनर के तहत कई टेस्ट चल रहे होते हैं. इससे पूरा एक्ज़ीक्यूशन चल जाता है.
Tradefed में, सुइट ITestSuite
क्लास के ज़रिए चलाए जाते हैं. इसकी मदद से, टेस्ट को अलग-अलग जोड़ा और हटाया जा सकता है, भले ही उन्हें कैसे चलाया जा रहा हो.
परिभाषाएं
- सुइट: एक ही टॉप-लेवल सेटअप के तहत चलने के लिए कॉन्फ़िगर किए गए टेस्ट मॉड्यूल का सेट, ताकि एक ही बार में उनके नतीजे रिपोर्ट किए जा सकें.
- टॉप-लेवल सेटअप: किसी भी टेस्ट मॉड्यूल को चलाने से पहले, डिवाइसों पर लागू किया जाने वाला सेटअप.
- मुख्य कॉन्फ़िगरेशन: यह सुइट-लेवल का Tradefed एक्सएमएल कॉन्फ़िगरेशन है. इसमें यह बताया जाता है कि कौनसे मॉड्यूल चलने चाहिए और किस टॉप-लेवल सेटअप का इस्तेमाल किया जाना चाहिए.
- मॉड्यूल-लेवल सेटअप: मॉड्यूल को चलाने से ठीक पहले, डिवाइसों पर लागू किया गया सेटअप. इन्हें मॉड्यूल के हिसाब से सेटअप भी कहा जाता है.
- मॉड्यूल कॉन्फ़िगरेशन:
AndroidTest.xml
Tradefed एक्सएमएल कॉन्फ़िगरेशन का रेफ़रंस देता है. इसमें मॉड्यूल के बारे में जानकारी होती है. साथ ही, यह भी बताया जाता है कि मॉड्यूल-लेवल का कौनसा सेटअप किया जाना चाहिए. - मॉड्यूल: टेस्ट यूनिट, सेटअप चरण (मॉड्यूल-लेवल सेटअप), टेस्ट को लागू करने के चरण, और टियर डाउन चरण से बनी होती है.
- मॉड्यूल के अंदर फिर से कोशिश करना: मॉड्यूल के अंदर मौजूद हार्नेस की मदद से, अपने-आप फिर से कोशिश की जाती है.
- सुइट को फिर से चलाना: सुइट के उन टेस्ट को फिर से चलाना जो पहले फ़ेल हुए थे.
ITestSuite का स्ट्रक्चर
ITestSuite
Tradefed में, सुइट को चलाने वाली सामान्य बेस क्लास का रेफ़रंस दिया गया है. इसे सभी बड़े टेस्ट सुइट
शेयर करते हैं. खास तौर पर, Android कंपैटबिलिटी टेस्ट सुइट (सीटीएस) और Android वेंडर टेस्ट सुइट
(वीटीएस). इससे यह पक्का किया जाता है कि सभी सुइट में एक्ज़ीक्यूशन का एक जैसा अनुभव मिले.
हम कभी-कभी ITestSuite को सुइट रनर कहते हैं.
सुइट रनर, इन चरणों का पालन करता है:
- मॉड्यूल के कॉन्फ़िगरेशन को लोड करें और तय करें कि कौनसा सेट चलना चाहिए.
हर मॉड्यूल चलाएं:
- मॉड्यूल-लेवल सेटअप चलाएं.
- मॉड्यूल की जांच करना.
- मॉड्यूल-लेवल पर टियर डाउन करें.
नतीजों की शिकायत करें.
टॉप-लेवल सेटअप
ट्रेडेड के नज़रिए से, ITestSuite
सिर्फ़ एक और टेस्ट है. यह एक मुश्किल IRemoteTest
है, लेकिन यह किसी भी दूसरे IRemoteTest
की तरह ही सिर्फ़ एक टेस्ट है. इसलिए, Tradefed कॉन्फ़िगरेशन में सुइट रनर तय करते समय, Tradefed कॉन्फ़िगरेशन के सामान्य पैटर्न का पालन करता है: build_provider
, target_preparer
, टेस्ट (इस मामले में हमारा सुइट) और target_cleaner
चलाना.
ट्रेडेड कॉन्फ़िगरेशन में ITestSuite
वाला यह क्रम, टॉप-लेवल का सेटअप है.
उदाहरण:
<configuration description="Common config for Compatibility suites">
<build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" />
<!-- Setup applied before the suite: so everything running in the suite will
have this setup beforehand -->
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="run-command" value="settings put global package_verifier_enable 0" />
<option name="teardown-command" value="settings put global package_verifier_enable 1"/>
</target_preparer>
<!-- Our ITestSuite implementation -->
<test class="com.android.compatibility.common.tradefed.testtype.suite.CompatibilityTestSuite" />
<result_reporter class="com.android.compatibility.common.tradefed.result.ConsoleReporter" />
</configuration>
मॉड्यूल का मेटाडेटा
हम टेस्ट मॉड्यूल में बताई गई अतिरिक्त जानकारी को मॉड्यूल मेटाडेटा कहते हैंAndroidTest.xml
. इस मेटाडेटा की मदद से, मॉड्यूल के बारे में ज़्यादा जानकारी दी जा सकती है. साथ ही, मेटाडेटा का इस्तेमाल करके मॉड्यूल फ़िल्टर किए जा सकते हैं.
मेटाडेटा का उदाहरण:
<option name="config-descriptor:metadata" key="component" value="framework" />
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />
मेटाडेटा पर फ़िल्टर करने का उदाहरण:
--module-metadata-include-filter component=framework
ऊपर दिए गए उदाहरण में, सभी मॉड्यूल कॉम्पोनेंट मेटाडेटा के तौर पर फ़्रेमवर्क के साथ चलेंगे.
AndroidTest.xml
का पूरा उदाहरण:
<configuration description="Config for CTS Gesture test cases">
<option name="test-suite-tag" value="cts" />
<!-- Metadata -->
<option name="config-descriptor:metadata" key="component" value="framework" />
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />
<!-- End: metadata -->
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="cleanup-apks" value="true" />
<option name="test-file-name" value="CtsGestureTestCases.apk" />
</target_preparer>
<test class="com.android.tradefed.testtype.AndroidJUnitTest" >
<option name="package" value="android.gesture.cts" />
<option name="runtime-hint" value="10m50s" />
</test>
</configuration>
पैरामीटर वाला मॉड्यूल
parameter
एक खास तरह का मेटाडेटा है.
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />
इस मेटाडेटा से पता चलता है कि मॉड्यूल को किसी दूसरे मोड में चलाया जाना चाहिए. उदाहरण के लिए, स्टैंडर्ड ऐप्लिकेशन मोड के बजाय, इंस्टैंट ऐप्लिकेशन के तौर पर.
सभी संभावित मोड या पैरामीटर के बारे में जानकारी,
ModuleParameters
में दी गई है. साथ ही, इनके लिए एक हैंडलर,
ModuleParametersHelper
में मौजूद है. इससे, किसी खास मोड में लागू करने के लिए, मॉड्यूल सेटअप को बदला जा सकता है.
उदाहरण के लिए, झटपट ऐप्लिकेशन मोड, APK को झटपट ऐप्लिकेशन मोड के तौर पर इंस्टॉल करने के लिए मजबूर करता है.
पैरामीटराइज़ेशन की प्रोसेस शुरू करने के लिए, कमांड लाइन को इनके साथ चालू करना होगा:
--enable-parameterized-modules
किसी एक मोड को इनके साथ भी चलाया जा सकता है:
--enable-parameterized-modules --module-parameter <Mode>
--enable-parameterized-modules --module-parameter INSTANT_APP
जब किसी मॉड्यूल का पैरामीटर वाला वर्शन चलता है, तो वह पैरामीटर वाले मॉड्यूल के नाम के तहत अपने नतीजे दिखाता है. उदाहरण के लिए, CtsGestureTestCases[instant]
बनाम
बेस CtsGestureTestCases
.