एओएसपी में, ऐसे टेस्ट मॉड्यूल के लिए टेस्ट टेंप्लेट शामिल हैं जो होस्ट-साइड Python नहीं हैं VTS रनर के BaseTest की सब-क्लास.
डेवलपर इन टेंप्लेट का इस्तेमाल करके, कम मेहनत में काम कर सकते हैं इंटिग्रेट करने के तरीके उपलब्ध कराना. इस सेक्शन में, टेस्ट को कॉन्फ़िगर करने और उसका इस्तेमाल करने के बारे में बताया गया है टेंप्लेट (वीटीएस में मौजूद होता है) टेस्टकेस/टेंप्लेट डायरेक्ट्री) उपलब्ध कराता है और आम तौर पर इस्तेमाल होने वाले टेंप्लेट के लिए उदाहरण देता है.
बाइनरीटेस्ट टेंप्लेट
इसका इस्तेमाल करें बाइनरीटेस्ट टेंप्लेट का इस्तेमाल किया जा सकता है. टारगेट-साइड टेस्ट में ये शामिल हैं:
- C++ पर आधारित टेस्ट, कंपाइल करके डिवाइस में भेजे गए
- टारगेट-साइड Python टेस्ट को बाइनरी के तौर पर कंपाइल किया गया
- डिवाइस पर एक्ज़ीक्यूटेबल शेल स्क्रिप्ट
इन टेस्ट को बाइनरीटेस्ट के साथ या इसके बिना वीटीएस में इंटिग्रेट किया जा सकता है टेम्प्लेट.
टारगेट-साइड टेस्ट को बाइनरीटेस्ट टेंप्लेट
बाइनरीटेस्ट टेंप्लेट को इस तरह डिज़ाइन किया गया है कि डेवलपर आसानी से
टारगेट-साइड टेस्ट. ज़्यादातर मामलों में, आपके पास
AndroidTest.xml
में कॉन्फ़िगरेशन. कॉन्फ़िगरेशन का उदाहरण
VtsDeviceTreeEarlyMountTest:
<configuration description="Config for VTS VtsDeviceTreeEarlyMountTest."> ... <test class="com.android.tradefed.testtype.VtsMultiDeviceTest"> <option name="test-module-name" value="VtsDeviceTreeEarlyMountTest"/> <option name="binary-test-source" value="_32bit::DATA/nativetest/dt_early_mount_test/dt_early_mount_test" /> <option name="binary-test-source" value="_64bit::DATA/nativetest64/dt_early_mount_test/dt_early_mount_test" /> <option name="test-timeout" value="5m"/> </test> </configuration>
इस कॉन्फ़िगरेशन में:
binary-test-source
औरbinary-test-type
टेंप्लेट के हिसाब से तय किया जा सकता है.- टेस्ट बाइनरी सोर्स के रिलेटिव होस्ट पाथ की जानकारी देने से, टेंप्लेट चालू हो जाता है तैयारी, फ़ाइल पुश करना, टेस्ट एक्ज़ीक्यूशन, नतीजा पार्स करने, और क्लीनअप करें.
- इस टेंप्लेट में, सब-क्लास के लिए, टेस्ट केस बनाने से जुड़े तरीके शामिल हैं ओवरराइड करें.
- इस टेंप्लेट में, हर टेस्ट बाइनरी मॉड्यूल के लिए एक टेस्ट केस और बाइनरी का इस्तेमाल किया जाता है सोर्स फ़ाइल के नाम का इस्तेमाल डिफ़ॉल्ट रूप से, टेस्ट केस के नाम के तौर पर किया जाता है.
कॉन्फ़िगरेशन विकल्प
बाइनरीटेस्ट टेंप्लेट में ये कॉन्फ़िगरेशन काम करते हैं:
विकल्प का नाम | वैल्यू किस तरह की है | ब्यौरा |
---|---|---|
बाइनरी-टेस्ट-सोर्स | स्ट्रिंग | इस पर vts टेस्ट-केस डायरेक्ट्री से जुड़े बाइनरी टेस्ट सोर्स पाथ
होस्ट. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है उदाहरण: DATA/nativetest/test |
बाइनरी-टेस्ट-वर्किंग-डायरेक्ट्री | स्ट्रिंग | वर्किंग डायरेक्ट्री (डिवाइस साइड पाथ). अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है उदाहरण: /data/local/tmp/testing/ |
बाइनरी-टेस्ट-एनवीपी | स्ट्रिंग | बाइनरी के लिए एनवायरमेंट वैरिएबल. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है उदाहरण: PATH=/new:$PATH |
बाइनरी-टेस्ट-आर्ग्स | स्ट्रिंग | आर्ग्युमेंट या फ़्लैग की जांच करें. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है उदाहरण: --gtest_filter=test1 |
बाइनरी-टेस्ट-ld-library-path | स्ट्रिंग | LD_LIBRARY_PATH एनवायरमेंट वैरिएबल.अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है उदाहरण: /data/local/tmp/lib |
बाइनरी-टेस्ट-बंद-फ़्रेमवर्क | बूलियन | जांच करने से पहले, Android फ़्रेमवर्क को बंद करने के लिए adb stop चलाएं.
उदाहरण: true |
बाइनरी-टेस्ट-स्टॉप-नेटिव-सर्वर | बूलियन | जांच के दौरान, सही तरीके से कॉन्फ़िगर किए गए सभी नेटिव सर्वर को बंद करें. उदाहरणः
true अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है |
बाइनरी-टेस्ट-टाइप | स्ट्रिंग | टेंप्लेट का टाइप. इस टेंप्लेट से दूसरी तरह के टेंप्लेट भी इस्तेमाल किए जा सकते हैं, लेकिन
को इस टेंप्लेट के लिए यह विकल्प तय करने की ज़रूरत नहीं है, क्योंकि आप पहले से ही
binary-test-source बताया गया. |
strings
वैल्यू टाइप वाले विकल्पों के लिए, एक से ज़्यादा वैल्यू जोड़ी जा सकती हैं
इसके लिए, कॉन्फ़िगरेशन में दिए गए विकल्पों को दोहराएं. उदाहरण के लिए,
दो बार binary-test-source
(जैसा कि
VtsDeviceTreeEarlyMountTest
उदाहरण).
टैग की जांच करें
टेस्ट टैग जोड़े जा सकते हैं. इसके लिए, आपको strings
के साथ विकल्पों के पहले उन्हें इस्तेमाल करना होगा
वैल्यू डालें और ::
को डेलिमिटर के तौर पर इस्तेमाल करें. टेस्ट टैग खास तौर पर
तब उपयोगी होता है, जब उसी नाम वाले बाइनरी सोर्स शामिल किए जाते हैं, लेकिन
बिटनेस या पैरंट डायरेक्ट्री शामिल हैं. उदाहरण के लिए, पुश नोटिफ़िकेशन या नतीजे के नाम से बचने के लिए
एक जैसे नाम वाले सोर्स, लेकिन अलग-अलग सोर्स डायरेक्ट्री से एक जैसे सोर्स का इस्तेमाल करते हैं
तो आप इन सोर्स के लिए अलग-अलग टैग तय कर सकते हैं.
जैसा कि VtsDeviceTreeEarlyMountTest
उदाहरण में,
दो dt_early_mount_test
सोर्स हैं, तो टेस्ट टैग
_32bit::
और _64bit::
प्रीफ़िक्स चालू हैं
binary-test-source
. 32bit
या से खत्म होने वाले टैग
64bit
अपने-आप टेस्ट को 'उपलब्ध है' के तौर पर मार्क कर देगा.
इसका मतलब है कि टैग _32bit
वाले टेस्ट, 64-बिट एबीआई पर नहीं किए जाते. नहीं
टैग तय करना, खाली स्ट्रिंग वाले टैग का इस्तेमाल करने के बराबर है.
एक जैसे टैग वाले विकल्पों को ग्रुप में रखा जाता है और उन्हें दूसरे टैग से अलग कर दिया जाता है. इसके लिए
उदाहरण के लिए, _32bit
टैग वाला binary-test-args
सिर्फ़ binary-test-source
पर उसी टैग के साथ लागू किया गया और एक्ज़ीक्यूट किया गया
binary-test-working-directory
में उसी टैग से. कॉन्टेंट बनाने
बाइनरी टेस्ट के लिए, binary-test-working-directory
विकल्प चुनना ज़रूरी नहीं है,
की मदद से टैग के लिए एक ही डायरेक्ट्री सेट अप की जा सकती है. जब
binary-test-working-directory
विकल्प को डिफ़ॉल्ट के तौर पर सेट नहीं किया गया है
डायरेक्ट्री का इस्तेमाल हर टैग के लिए किया जाता है.
नतीजे की रिपोर्ट में, टेस्ट केस के नाम में टैग का नाम सीधे जोड़ दिया जाता है.
उदाहरण के लिए, _32bit
टैग वाले testcase1
टेस्ट केस
परिणाम रिपोर्ट में testcase1_32bit
के रूप में दिखाई देता है.
टारगेट साइड टेस्ट को बिना किसी रुकावट के इंटिग्रेट करना बाइनरीटेस्ट टेंप्लेट
वीटीएस में, टेस्ट का डिफ़ॉल्ट फ़ॉर्मैट होस्ट-साइड Python टेस्ट है VTS रनर में BaseTest. टारगेट-साइड टेस्ट को इंटिग्रेट करने के लिए, आपको सबसे पहले डिवाइस पर फ़ाइलों की जांच करें, शेल कमांड का इस्तेमाल करके टेस्ट करें, फिर नतीजे पाने के लिए, होस्ट-साइड Python स्क्रिप्ट इस्तेमाल करें.
पुश टेस्ट बाइनरी
हमारा सुझाव है कि आप VtsFilePusher
टारगेट तैयार करने वाले टूल का इस्तेमाल करके, फ़ाइलों को पुश करें.
उदाहरण:
<target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher"> <option name="push" value="DATA/test->/data/local/tmp/test"/> </target_preparer>
VtsFilePusher
ये काम करता है:
- डिवाइस की कनेक्टिविटी चेक करता है.
- इसकी मदद से, ऐब्सलूट सोर्स फ़ाइल का पाथ तय किया जाता है.
adb push
निर्देश का इस्तेमाल करके, फ़ाइलों को पुश करता है.- जांच पूरी होने के बाद फ़ाइलों को मिटाता है.
इसके अलावा, होस्ट-साइड Python टेस्ट का इस्तेमाल करके, फ़ाइलों को मैन्युअल तरीके से पुश किया जा सकता है स्क्रिप्ट जो मिलती-जुलती प्रक्रिया अपनाती है.
टेस्ट करना
फ़ाइलों को डिवाइस में पुश करने के बाद, होस्ट-साइड Python टेस्ट स्क्रिप्ट. उदाहरण:
device = self.android_devices[0] res = device.shell.Execute(["chmod a+x /data/local/tmp/test", "/data/local/tmp/test"]) asserts.AssertFalse(any(res[return_codes]))
GtestBinaryTest टेंप्लेट
कॉन्टेंट बनाने जीटेस्टबाइनरीटेस्ट टेंप्लेट, GTest टेस्ट बाइनरी को होस्ट करता है. हर बाइनरी में आम तौर पर यह शामिल होता है कई टेस्ट केस. यह टेंप्लेट ओवरराइड करके बाइनरीटेस्ट टेंप्लेट को बढ़ाता है सेटअप, टेस्ट केस बनाना, और नतीजे पार्स करने के तरीके, ताकि सभीbinaryTest कॉन्फ़िगरेशन इनहेरिट किए गए हैं.
GtestBinaryTest इसमें gtest-batch-mode
विकल्प जोड़ता है:
विकल्प का नाम | वैल्यू किस तरह की है | ब्यौरा |
---|---|---|
बाइनरी-टेस्ट-टाइप | स्ट्रिंग | टेंप्लेट का टाइप. gtest वैल्यू का इस्तेमाल किया जाता है. |
Gtest-बैच-मोड | बूलियन | बैच मोड में Gtest बाइनरी चलाएं. उदाहरण: true |
आम तौर पर, gtest-batch-mode
को true
पर सेट किया जा रहा है
इससे परफ़ॉर्मेंस बेहतर होती है और विश्वसनीयता कम हो जाती है. वीटीएस के अनुपालन में
कई मॉड्यूल, बैच मोड का इस्तेमाल करके परफ़ॉर्मेंस को बेहतर बनाते हैं. विश्वसनीयता के लिए
हालांकि, अगर मोड की जानकारी नहीं दी जाती है, तो वह डिफ़ॉल्ट रूप से नॉन-बैच मोड पर सेट हो जाती है.
नॉन-बैच मोड
नॉन-बैच मोड, हर टेस्ट केस के लिए, GTest बाइनरी को अलग-अलग कॉल करता है. इसके लिए उदाहरण के लिए, अगर GTest बाइनरी में 10 टेस्ट केस हैं (होस्ट के हिसाब से फ़िल्टर करने के बाद) साइड कॉन्फ़िगरेशन), डिवाइस के शेल पर हर बार बाइनरी को 10 बार कॉल किया जाता है का इस्तेमाल करें. हर टेस्ट केस के लिए, एक यूनीक GTest रिज़ल्ट आउटपुट मिलेगा एक्सएमएल को टेंप्लेट की मदद से जनरेट और पार्स किया जाता है.
नॉन-बैच मोड का इस्तेमाल करने के ये फ़ायदे हैं:
- टेस्ट केस आइसोलेशन. एक टेस्ट केस में क्रैश हो जाना या हैंग हो जाना अन्य टेस्ट केस पर असर नहीं पड़ता.
- जानकारी का लेवल. हर टेस्ट केस की प्रोफ़ाइल बनाना/कवरेज पाना ज़्यादा आसान मेज़रमेंट, सिस्टम ट्रेस, गड़बड़ी की रिपोर्ट, Logcat वगैरह की जांच के नतीजे और लॉग हर टेस्ट केस के खत्म होने के तुरंत बाद, मिल जाता है.
नॉन-बैच मोड का इस्तेमाल करने के कुछ नुकसान हैं:
- बार-बार लोड होने की सुविधा. हर बार GTest बाइनरी को कॉल किए जाने पर, यह संबंधित लाइब्रेरी को लोड करता है और क्लास के शुरुआती सेटअप करता है.
- कम्यूनिकेशन ओवरहेड. जांच पूरी होने के बाद, होस्ट और टारगेट डिवाइस, नतीजे को पार्स करने और अगले निर्देशों (आने वाले समय में) के लिए आपसे संपर्क करें ऑप्टिमाइज़ेशन संभव है).
बैच मोड
GTest के बैच मोड में, लंबे टेस्ट के साथ टेस्ट बाइनरी को सिर्फ़ एक बार कॉल किया जाता है ऐसी फ़िल्टर वैल्यू जिसमें होस्ट-साइड कॉन्फ़िगरेशन के हिसाब से फ़िल्टर किए गए सभी टेस्ट केस हैं (यह नॉन-बैच मोड में, लोड होने की ग़ैर-ज़रूरी समस्या से बचाता है). टेस्ट को पार्स किया जा सकता है आउटपुट.xml का इस्तेमाल करके या टर्मिनल आउटपुट का इस्तेमाल करके, GTest के लिए नतीजे.
आउटपुट.xml (डिफ़ॉल्ट) का इस्तेमाल करते समय:
नॉन-बैच मोड की तरह, जांच के नतीजे को GTest आउटपुट xml की मदद से पार्स किया जाता है फ़ाइल से लिए जाते हैं. हालांकि, सभी जांचों के बाद आउटपुट एक्सएमएल जनरेट होता है पूरा हो चुका है, अगर कोई टेस्ट केस बाइनरी या डिवाइस से क्रैश हो जाता है, तो कोई नतीजा नहीं मिलने वाली xml फ़ाइल होती है जनरेट किया गया.
टर्मिनल आउटपुट का इस्तेमाल करते समय:
जब GTest चल रहा होता है, तो यह टेस्ट लॉग को प्रिंट करता है और टर्मिनल पर आगे बढ़ता है ऐसे फ़ॉर्मैट में जिसे टेस्ट के स्टेटस, नतीजों, और लॉग.
बैच मोड का इस्तेमाल करने के फ़ायदों में ये शामिल हैं:
- टेस्ट केस आइसोलेशन. जांच का एक जैसा लेवल देता है अगर फ़्रेमवर्क बाइनरी/डिवाइस को रीस्टार्ट करता है, तो केस आइसोलेशन को नॉन-बैच मोड में बदला जाता है कम टेस्ट फ़िल्टर के साथ क्रैश होने के बाद. इसमें, क्रैश हो गया और पूरा हो चुका टेस्ट शामिल नहीं है मामले).
- जानकारी का लेवल. टेस्ट-केस का जानकारी का स्तर, इस जैसा ही देता है नॉन-बैच मोड.
बैच मोड का इस्तेमाल करने के कुछ नुकसान हैं:
- रखरखाव का शुल्क. अगर GTest लॉगिंग फ़ॉर्मैट बदलता है, सभी टेस्ट काम नहीं करेंगे.
- भ्रम. टेस्ट केस, GTest की तरह कुछ प्रिंट कर सकता है जिससे फ़ॉर्मैट के बारे में भ्रम पैदा हो सकता है.
इन कमियों के कारण, हमने कमांड लाइन आउटपुट. हम आने वाले समय में इस विकल्प पर फिर से विज़िट करेंगे, ताकि इस फ़ंक्शन की विश्वसनीयता.
HostBinaryTest टेंप्लेट
HostBinaryTest टेंप्लेट में होस्ट-साइड के ऐसे एक्ज़ीक्यूटेबल शामिल हैं जो मौजूद नहीं हैं और Python स्क्रिप्ट में एक्सपोर्ट करना होगा. इन टेस्ट में ये शामिल हैं:
- होस्ट पर एक्ज़ीक्यूटेबल टेस्ट बाइनरी
- शेल, Python या अन्य भाषाओं में एक्ज़ीक्यूटेबल स्क्रिप्ट
इसका एक उदाहरण है: वीटीएस सुरक्षा SELinux नीति होस्ट-साइड टेस्ट:
<configuration description="Config for VTS Security SELinux policy host-side test cases"> ... <test class="com.android.tradefed.testtype.VtsMultiDeviceTest"> <option name="test-module-name" value="VtsSecuritySelinuxPolicyHost"/> <option name="binary-test-source" value="out/host/linux-x86/bin/VtsSecuritySelinuxPolicyHostTest" /> <option name="binary-test-type" value="host_binary_test"/> </test> </configuration>
HostBinaryTest, बाइनरीटेस्ट टेंप्लेट को बड़ा नहीं करता है, लेकिन इसके जैसा ही इस्तेमाल करता है
टेस्ट कॉन्फ़िगरेशन. ऊपर दिए गए उदाहरण में, binary-test-source
विकल्प, एक्ज़ीक्यूटेबल टेस्ट के लिए होस्ट-साइड रिलेटिव पाथ के बारे में बताता है और
binary-test-type
host_binary_test
है. इसके समान
बाइनरी टेस्ट टेंप्लेट, बाइनरी फ़ाइल नाम का इस्तेमाल टेस्ट केस के नाम के तौर पर किया जाता है
डिफ़ॉल्ट.
मौजूदा टेंप्लेट को बड़ा करें
बिना Python टेस्ट को शामिल करने के लिए, सीधे टेस्ट कॉन्फ़िगरेशन में टेंप्लेट का इस्तेमाल किया जा सकता है या उन्हें टेस्ट की खास ज़रूरतों को पूरा करने के लिए किसी सब-क्लास में बढ़ाया जा सकता है. इसमें टेम्प्लेट VTS रेपो में ये एक्सटेंशन शामिल हैं:
डेवलपर को सलाह दी जाती है कि वे किसी भी टेंप्लेट का इस्तेमाल करने के लिए, टेस्ट के लिए ज़रूरी शर्तें. टेंप्लेट को बड़ा करने की सामान्य वजहें ये हैं:
- टेस्ट के लिए खास प्रोसेस सेट अप करना. जैसे, कोई खास डिवाइस तैयार करना निर्देश देखें.
- अलग-अलग टेस्ट केस और टेस्ट के नाम जनरेट किए जा रहे हैं.
- कमांड आउटपुट पढ़कर या अन्य शर्तों का इस्तेमाल करके, नतीजे पार्स करना.
मौजूदा टेंप्लेट का इस्तेमाल करना आसान बनाने के लिए, टेंप्लेट में तरीके शामिल होते हैं हर फ़ंक्शन के लिए खास तौर पर डिज़ाइन किया गया. अगर आपके पास मौजूदा तो हम आपको वीटीएस कोड बेस में योगदान करने के लिए प्रोत्साहित करते हैं.