Google एस्प्रेसो या रोबोटियम [बंद]


115

मुझे स्वचालित UI परीक्षण उपकरण का उपयोग करना होगा और मैं रोबोटियम बनाम Google एस्प्रेसो का उपयोग करने के बीच भ्रमित हूं।

दोनों के बीच प्रमुख अंतर क्या हैं? क्या ऐसी विशेषताएं हैं जो एक में मौजूद हैं लेकिन दूसरे में नहीं?


19
मैं ईमानदारी से नफरत करता हूं जब लोग बिना किसी टिप्पणी के लिखते हैं। मैं सराहना करूँगा यदि वह व्यक्ति कुछ टिप्पणी लिख रहा है जैसे कि वह क्यों / वह कर रहा है
Androidme

8
मुझे लगता है कि प्रश्न बहुत मददगार है। बहुत सारे डेवलपर खुद से यह पूछ रहे हैं। क्या अंतर हैं? मुझे लगता है कि समस्या वह तरीका है जो आप पूछ रहे हैं। आपको इसे अधिक विस्तार से पूछना चाहिए और न ही यह पूछना चाहिए कि किसका उपयोग करना है।
तस्मानी

8
यह वही सटीक प्रश्न है जिसका मैंने उत्तर दिया था। पोस्ट करने के लिए धन्यवाद
रिचर्ड फंग

8
मैं इस तथ्य को नापसंद करता हूं कि यह स्टैकऑवरफ्लो के अनुसार ऑफ-टॉपिक है। मुझे पता है कि अगर हमें हर एक पुस्तकालय और उपकरण की तुलना करनी थी, तो बहुत सारे राय आधारित उत्तर हो सकते हैं, लेकिन इस तरह का एक सवाल जो दो संसाधनों के बीच अंतर पूछता है, बहुत मददगार है।
डेविड अरगेल थाकर

जवाबों:


175

पूर्ण प्रकटीकरण: मैं एस्प्रेसो के लेखकों में से एक हूं।

एस्प्रेसो और रोबोटियम दोनों इंस्ट्रूमेंटेशन-आधारित फ्रेमवर्क हैं, जिसका अर्थ है कि वे परीक्षण के तहत गतिविधियों के साथ निरीक्षण और बातचीत करने के लिए एंड्रॉइड इंस्ट्रूमेंटेशन का उपयोग करते हैं ।

Google में, हमने रोबोटियम का उपयोग करके शुरुआत की क्योंकि यह स्टॉक इंस्ट्रूमेंटेशन (इसे बनाने के लिए रोबोटियम डेवलपर्स से हैट्स) की तुलना में अधिक सुविधाजनक था। हालांकि, इसने एक ऐसे ढांचे की हमारी आवश्यकता को पूरा नहीं किया, जिसने डेवलपर्स के लिए विश्वसनीय परीक्षण को आसान बना दिया ।

रोबोटियम पर एस्प्रेसो में प्रमुख प्रगति:

  1. तादात्म्य। डिफ़ॉल्ट रूप से, इंस्ट्रूमेंटेशन टेस्ट तर्क यूआई संचालन (यूआई थ्रेड पर संसाधित) की तुलना में एक अलग (इंस्ट्रूमेंटेशन) धागे पर चलता है। यूआई अपडेट के साथ परीक्षण संचालन के सिंक्रनाइज़ेशन के बिना, परीक्षण चंचलता के लिए प्रवण होंगे - अर्थात समय के मुद्दों के कारण यादृच्छिक रूप से विफल हो जाएंगे। अधिकांश परीक्षण लेखक इस तथ्य को अनदेखा करते हैं, कुछ नींद / पुन: प्रयास तंत्र जोड़ते हैं और यहां तक ​​कि कम परिष्कृत थ्रेड सुरक्षा कोड को लागू करते हैं। इनमें से कोई भी आदर्श नहीं है। एस्प्रेसो टेस्ट के तहत यूआई के साथ परीक्षण कार्यों और अभिकथनों को मूल रूप से सिंक्रनाइज़ करके थ्रेड सुरक्षा का ख्याल रखता है। रोबोटियम नींद / पुन: प्रयास तंत्र के साथ इसे संबोधित करने का प्रयास करता है, जो न केवल अविश्वसनीय हैं, बल्कि आवश्यक से धीमी गति से चलाने के लिए परीक्षण का कारण बनते हैं।

  2. एपीआई। एस्प्रेसो में एक छोटा, अच्छी तरह से परिभाषित और पूर्वानुमानित एपीआई है, जो अनुकूलन के लिए खुला है। आप मानक हैमरेस्ट मैचर्स का उपयोग करके एक यूआई तत्व का पता लगाने के तरीके के बारे में बताते हैं और फिर उसे निर्देश देते हैं कि या तो एक क्रिया करें या लक्ष्य तत्व पर एक जाँच करें। आप रोबोटियम के एपीआई के साथ इसके विपरीत हो सकते हैं, जहां परीक्षण लेखक को 30+ क्लिक विधियों से चुनने की उम्मीद है। इसके अलावा, रोबोटियम खतरनाक तरीकों जैसे एक्सपर्टस एक्टीविटी (वर्तमान में वर्तमान में क्या होता है?) और गेटव्यू को उजागर करता है, जो आपको मुख्य धागे के बाहर की वस्तुओं पर काम करने की अनुमति देता है (ऊपर बिंदु देखें)।

  3. विफलता की स्पष्ट जानकारी। एस्प्रेसो विफलता होने पर समृद्ध डिबगिंग जानकारी प्रदान करने का प्रयास करता है। इसके अलावा, आप अपनी खुद की विफलता हैंडलर के साथ एस्प्रेसो द्वारा जिस तरह से विफलताओं को नियंत्रित कर सकते हैं उसे अनुकूलित कर सकते हैं। मैंने इसे कुछ समय में आज़माया नहीं है, लेकिन रोबोटियम के पूर्व संस्करणों में असंगत विफलता से सामना करना पड़ा (उदाहरण के लिए क्लिकऑन व्यू पद्धति SecurityException को निगल जाएगी)।

पिछले उत्तर के विपरीत, एस्प्रेसो को सभी एपीआई संस्करणों पर उपयोगकर्ताओं की महत्वपूर्ण संख्या के साथ समर्थित किया गया है (देखें: http://developer.android.com/about/dashboards/index.html )। यह कुछ पुराने संस्करणों पर काम करता है, लेकिन उन पर परीक्षण करना संसाधनों की बर्बादी होगी। परीक्षण के बारे में बोलते हुए ... एस्प्रेसो को एक व्यापक परीक्षण सूट (95% से अधिक कवरेज) के साथ-साथ Google द्वारा विकसित किए गए अधिकांश एंड्रॉइड अनुप्रयोगों द्वारा परीक्षण किया जाता है।


नमस्ते ! आपके उत्तर के लिए धन्यवाद, क्या एस्प्रेसो एक ही परीक्षण मामले में कई अनुप्रयोगों का परीक्षण करने की संभावना प्रदान करता है? मुझे अपने एप्लिकेशन का परीक्षण करना होगा जो किसी अन्य एप्लिकेशन (मेरा अन्य ऐप जो एक ही साझा किए गएUserId को साझा करता है) से एक गतिविधि को कॉल करता है और फिर परिणाम प्राप्त करता है। मैं रोबोटियम के साथ ऐसा नहीं कर सकता, लेकिन शायद एस्प्रेसो के साथ? :-)
nbe_42

1
नहीं - आप एस्प्रेसो के साथ अपनी प्रक्रिया के बाहर यूआई के साथ बातचीत नहीं कर सकते। यह इंस्ट्रूमेंटेशन फ्रेमवर्क की एक सीमा है।
वलेरजाखारोव

1
@ValeraZakharov :: हाईई ... !! जैसा कि आपने कहा, एस्प्रेसो यूआई थ्रेड सिंक्रोनाइज़ेशन का ध्यान रखेगा और स्लीप्स लगाने की आवश्यकता नहीं होगी। लेकिन मेरे मामले में, मैंने कुछ टेस्टकेस लिखे हैं और सभी टेस्टकेस मेरे स्थानीय मशीन में काम कर रहे हैं (शुरुआत के रूप में टेस्टसुइट प्रति एक नींद के साथ)। लेकिन स्थानीय / सर्वर जेनकिंस के साथ चलने पर लगभग 99% टेस्टकेस विफल हो रहे हैं। मैंने jenkins एमुलेटर में सभी एनिमेशन को निष्क्रिय कर दिया है। ज्यादातर समय मुझे AppNotIdleException मिल रही है। मूल कारण का पता लगाने में असमर्थ। क्या तुम कृप्या मेरी मदद कर सकते हो।
नरेश गुंडा

@Radu ने किया है। आपकी टिप्पणी अशक्त है और उचित स्पष्टीकरण के बिना ध्यान आकर्षित करने के लिए एक मूर्खतापूर्ण प्रयास की तरह लगता है।
रकीब

9

एस्प्रेसो रोबोटियम की तुलना में बहुत तेज है, लेकिन केवल कुछ एसडीके संस्करणों पर काम करता है।

इसलिए यदि आप एक परीक्षण चाहते हैं जो सभी उपकरणों पर काम करता है, तो रोबोइटम पर जाएं। यदि नहीं, तो एस्प्रेसो के लिए जाओ, और मत भूलो कि आप अभी भी कुछ समय के लिए एक बीटा परीक्षक होंगे।



2
लिंक ऊपर बदला हुआ है, यह नया है: google.github.io/android-testing-support-library/docs/espresso/…
Evin1_
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.