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