Tradefed में सुइट का मतलब ऐसे सेटअप से है जहां कई टेस्ट, एक सामान्य टेस्ट रनर के तहत चल रहे होते हैं. यह टेस्ट रनर, पूरे एक्ज़ीक्यूशन को कंट्रोल करता है.
Tradefed में, सुइट ITestSuite
क्लास के ज़रिए मैनेज किए जाते हैं. इससे टेस्ट को चलाने के तरीके से अलग करके जोड़ा और हटाया जा सकता है.
परिभाषाएं
- सूट: टेस्ट मॉड्यूल का सेट, जिसे एक जैसे टॉप-लेवल सेटअप के तहत चलाने के लिए कॉन्फ़िगर किया जाता है, ताकि एक ही इनवोकेशन में उनके नतीजे रिपोर्ट किए जा सकें.
- टॉप-लेवल सेटअप: यह सेटअप, टेस्ट मॉड्यूल में से किसी को भी चलाने से पहले डिवाइसों पर लागू किया जाता है.
- मुख्य कॉन्फ़िगरेशन: यह सुइट-लेवल का Tradefed XML कॉन्फ़िगरेशन होता है. इससे यह पता चलता है कि कौनसे मॉड्यूल चलने चाहिए और कौनसा टॉप-लेवल सेटअप इस्तेमाल किया जाना चाहिए.
- मॉड्यूल-लेवल का सेटअप: यह सेटअप, मॉड्यूल चलाने से ठीक पहले डिवाइसों पर लागू होता है. इन्हें मॉड्यूल के हिसाब से सेटअप भी कहा जाता है.
- मॉड्यूल कॉन्फ़िगरेशन: इसका मतलब
AndroidTest.xml
Tradefed XML कॉन्फ़िगरेशन से है. इसमें मॉड्यूल के बारे में जानकारी होती है. साथ ही, यह भी बताया जाता है कि मॉड्यूल-लेवल का कौन-सा सेटअप किया जाना चाहिए. - मॉड्यूल: टेस्ट यूनिट में सेटअप करने का चरण (मॉड्यूल-लेवल सेटअप), टेस्ट एक्ज़ीक्यूशन का चरण, और टियर डाउन का चरण शामिल होता है.
- मॉड्यूल के अंदर फिर से कोशिश करना: मॉड्यूल के अंदर मौजूद हार्नेस, अपने-आप फिर से कोशिश करता है.
- सुइट को फिर से आज़माएं: सुइट में पहले फ़ेल हो चुके टेस्ट को फिर से चलाया जाता है.
ITestSuite स्ट्रक्चर
ITestSuite
, Tradefed में एक सामान्य बेस क्लास होता है, जो सुइट के एक्ज़ीक्यूशन को कंट्रोल करता है. इसे सभी मुख्य टेस्ट सुइट शेयर करते हैं. खास तौर पर, Android Compatibility Test Suite (CTS) और Android Vendor Test Suite (VTS). इससे यह पक्का किया जाता है कि सभी सुइट में एक जैसा एक्ज़ीक्यूशन हो.
हम कभी-कभी ITestSuite को सूट रनर कहते हैं.
सूट रनर, टेस्ट को एक्ज़ीक्यूट करते समय यह तरीका अपनाता है:
- मॉड्यूल के कॉन्फ़िगरेशन को लोड करता है और यह तय करता है कि कौनसे सेट को चलाना है.
हर मॉड्यूल चलाएं:
- मॉड्यूल-लेवल का सेटअप चलाएं.
- मॉड्यूल की जांच करें.
- मॉड्यूल-लेवल पर टीयर डाउन करें.
नतीजों की शिकायत करें.
टॉप-लेवल का सेटअप
Tradefed के हिसाब से, ITestSuite
सिर्फ़ एक और टेस्ट है. यह एक मुश्किल IRemoteTest
है, लेकिन यह भी अन्य IRemoteTest
की तरह सिर्फ़ एक टेस्ट है. इसलिए, Tradefed कॉन्फ़िगरेशन में सुइट रनर तय करते समय, Tradefed कॉन्फ़िगरेशन के सामान्य पैटर्न का पालन करता है: build_provider
, target_preparer
, टेस्ट (इस मामले में हमारा सुइट) और target_cleaner
को चलाना.
Tradefed कॉन्फ़िगरेशन में 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
.