10

मैन्युअल रूप से adb कमांड चलाने के बिना एक उपकरण परीक्षण से पहले एप्लिकेशन डेटा को साफ़ करने के लिए एंड्रॉइड स्टूडियो (AndroidJunitRunner) कैसे प्राप्त कर सकता हूं?एंड्रॉइड स्टूडियो - इंस्ट्रूमेंटेशन टेस्ट के लिए स्पष्ट एप्लिकेशन डेटा

मुझे पता चला कि धोखा की android.support.test.runner.AndroidJUnitRunner तरह - यह वास्तव में connectedCheck या connectedAndroidTest कभी नहीं invokes।

  1. कमांड लाइन से चलाते हैं $ gradle connectedCheck

    :MyMainApp:assembleDebug UP-TO-DATE 
    :MyMainApp:assembleDebugTest UP-TO-DATE 
    :MyMainApp:clearMainAppData 
    :MyMainApp:connectedCheck 
    
  2. जब उपकरण परीक्षण विन्यास (लाल/हरी तीर के साथ हरे रंग की Android रोबोट लोगो)

    **Executing tasks: [:MyMainAppApp:assembleDebug, :MyMainAppApp:assembleDebugTest]** 
    

    क्लिक करके आईडीई के भीतर से चलाने जैसा कि आप देख सकते हैं, अंतिम ग्रेडल लक्ष्य assembleDebugTest

मैंने उपकरण परीक्षण शुरू करने से पहले मुख्य ऐप के डेटा को साफ़ करने के लिए build.gradle में connectedCheck पर एक हुक जोड़ा था।

// Run 'adb' shell command to clear application data of main app for 'debug' variant 
task clearMainAppData(type: Exec) { 
    // we have to iterate to find the 'debug' variant to obtain a variant reference 
    android.applicationVariants.all { variant -> 
     if (variant.name.equals("debug")) { 
      def clearDataCommand = ['adb', 'shell', 'pm', 'clear', getPackageName(variant)] 
      println "Clearing application data of ${variant.name} variant: [${clearDataCommand}]" 
      commandLine clearDataCommand 
     } 
    } 
} 
// Clear Application Data (once) before running instrumentation test 
tasks.whenTaskAdded { task -> 
    // Both of these targets are equivalent today, although in future connectedCheck 
    // will also include connectedUiAutomatorTest (not implemented yet) 
    if(task.name.equals("connectedAndroidTest") || task.name.equals("connectedCheck")){ 
     task.dependsOn(clearMainAppData) 
    } 
} 

मुझे लगता है कि वैकल्पिक रूप से मैं एक मुख्य अनुप्रयोग में 'स्पष्ट डेटा' बटन को लागू कर सकता है और इंस्ट्रूमेंटेशन एप्लिकेशन यूआई के माध्यम से क्लिक किया है, लेकिन मुझे लगता है कि समाधान अवांछनीय पाते हैं।

मैंने AndroidJUnitRunner एपीआई देखा और Runlistener इंटरफ़ेस के माध्यम से हुक हैं लेकिन हुक परीक्षण ऐप के संदर्भ में हैं, यानी डिवाइस पर चल रहे हैं, और एंड्रॉइड एक ऐप को अन्य ऐप को संशोधित करने से रोकता है। http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html

सर्वश्रेष्ठ उत्तर आप को जाता है अगर आप मदद कर सकते हैं मुझे एंड्रॉयड स्टूडियो के भीतर से की निम्नलिखित स्वचालित रूप से एक को गति प्रदान:

  • एक कमांड लाइन adb shell pm clear my.main.app.package निष्पादित,
  • या अधिमानतः मेरी Gradle कार्य आह्वान clearMainAppData

यदि कोई बदलाव होता है तो मैं भी सभी कान हूं नाइट मार्ग। निश्चित रूप से डिवाइस परीक्षण स्वचालन के साथ आवेदन डेटा को साफ़ करने के लिए एक स्पष्ट तरीका होना चाहिए?

धन्यवाद!

+0

कोई प्रतिक्रिया नहीं है, इसलिए मुझे लगता है कि ज्यादातर लोग केवल प्रारंभिक प्रक्रिया के रूप में ऐप इंस्टॉल करने पर भरोसा करते हैं। –

+0

@ razzle-shazi ने आपके लिए nsimons समाधान काम किया था? –

उत्तर

19

मुझे पता है कि यह थोड़ी देर हो गया है, और उम्मीद है कि अब तक आपको यह समस्या हल हो जाएगी।

मैं आज भी उसी मुद्दे पर भाग गया, और बिना किसी समाधान के क्रैश हो गया।

लेकिन मैं इसे अपने कार्य को परीक्षण कॉन्फ़िगरेशन से कॉल करके काम करने में कामयाब रहा।

चरण 1: आप अपने द्वारा बनाई गई

Simply call your gradle task from here

वैसे Gradle कार्य, बस मेरे मामले में कार्य जोड़ने:

Your test configuration

चरण 2 अपने परीक्षण विन्यास पर जाएं ऐसा लगता है:

task clearData(type: Exec) { 
    def clearDataCommand = ['adb', 'shell', 'pm', 'clear', 'com.your.application'] 
    commandLine clearDataCommand 
} 

उम्मीद है कि यह किसी की मदद करेगा :)

+0

अगर किसी को कोई समस्या है: "एक से अधिक डिवाइस और एमुलेटर" और केवल एक वास्तव में चल रहे डिवाइस को फिर अपने एडीबी को पुनरारंभ करने का प्रयास करें। बस इसकी आवश्यकता है: "adb kill-server" और फिर "adb devices"। – ZelvaJan

+0

काम करता है लेकिन कार्य केवल एक बार शुरू होता है। क्या आप प्रत्येक परीक्षा से पहले शुरू करने के लिए कुछ रास्ता जानते हैं? – WindRider

+0

यदि आप पहले स्क्रीनशॉट को देखते हैं, तो आप देखेंगे कि लॉन्च से पहले "बहुत नीचे वाला बॉक्स" कहता है। सुनिश्चित करें कि आपके पास उस ग्रेडल कार्य को परिभाषित किया गया है (चरण 2 का पालन करके)। अब जब भी आप उस कॉन्फ़िगरेशन को लॉन्च करते हैं, तो धीरे-धीरे कार्य (यहां clearData) पहले निष्पादित किया जाएगा, और फिर आपका कॉन्फ़िगरेशन। ध्यान दें कि यह समाधान केवल तब काम करता है जब आपके पास केवल एक डिवाइस कनेक्ट होता है – NSimon

संबंधित मुद्दे

 संबंधित मुद्दे