2013-06-07 5 views
11

Sto lavorando con Android Studio su Windows 7, 64 bit. Sono un noobie su Android Studio (o qualsiasi IDE Intelij).Domande sul supporto calabash-android in Android Studio: Ruby, Modifica di funzionalità e passaggi, Avvio di test

ho scaricato e installato rubino 1.9.3, Ruby DevKit e calabash-Android e posso eseguire con successo i test di cetriolo sul mio app Android utilizzando la riga di comando (run calabash-Android)

Sono anche riuscito a installare il plugin Cucumber per Android Studio, in modo che i miei file di funzionalità possano beneficiare del completamento automatico e così via.

Ho le seguenti domande:

  • Posso installare un plugin Rubino (RubyMine?) In modo che posso scrivere le definizioni di passo per i miei test? Se è così, ho sentito che le persone possono eseguire il debug dei test Cucumber: è possibile farlo anche su Android Studio per le app Android?

  • Posso avviare un test della zucca per un'applicazione Android da Android Studio? Se è così, come potrei farlo?

  • Posso integrare test (automatici) utilizzando calabash in build Gradle di un'app Android? Se è così, come potrei farlo?

Grazie!

Aggiornamento:

ho attaccato un Gradle personalizzato Plugin<Project> (vedi codice scanalatura sottostante che ho scritto per avere un supporto di base per l'esecuzione di prove di calabash-android

Questi passaggi manuali sono ancora necessarie:.
- installare Ruby 1.9.x e la sua DEVKIT, installare la gemma calabash-androide, ecc
- Costruire l'appropriato (sapore di una) APK utilizzando Android plug Gradle (manuale o automatico)

Nell'app build.gradle, l'aggiunta di apply plugin: 'calabash' ora funziona e consente alla build di eseguire un file di funzionalità come test della zucca.
Esamina i sapori del prodotto disponibili (build-flavours) e aggiunge i compiti relativi alla zucca (ad esempio calabashDebug o calabashFlavor1Release, ecc.).

Di seguito si riporta il file Groovy che implementa il mio plugin 'Calabash' (Windows solo per ora):

package com.mediaarc.gradle.plugins 

    import org.gradle.api.* 
    import org.gradle.api.plugins.* 
    import org.gradle.api.tasks.* 

    class CalabashPlugin implements Plugin<Project> { 
     void apply(Project project) { 
      project.extensions.create("calabash", CalabashPluginExtension) 

      if (!project.android) { 
       throw new IllegalStateException("Android plugin is not configured.") 
      } 

      project.android.applicationVariants.each { variant -> 
       final def buildName = variant.name 
       final def buildVar = variant.baseName 
       final def packageApp = variant.packageApplication; 

       project.task("doPrepare${buildName}") << { 
        project.calabash.init(project, buildVar) 
        def apkFile = packageApp.outputFile 
        project.calabash.writeCommandFile(apkFile) 
       } 

       project.task("doClean${buildName}") << { 
        project.calabash.init(project, buildVar) 

        project.calabash.clean() 
       } 

       project.task("calabash${buildName}", type: Exec, dependsOn: [ project["assemble${buildName}"], project["doPrepare${buildName}"] ]) { 
        println project["assemble${buildName}"] 
        project.calabash.init(project, buildVar) 
        configureTask(project[name], buildName) 

        project.calabash.execute(project[name]) 
       } 

       project.task("cleanCalabash${buildName}", dependsOn: project["doClean${buildName}"]) { 
        project.calabash.init(project, buildVar) 
        configureClean(project[name], buildName) 
       } 
      } 
     } 

     private def configureTask(def task, def buildVariant) { 
      task.group = JavaBasePlugin.VERIFICATION_GROUP 
      task.description = "Runs calabash tests for Build '${buildVariant}'" 
     } 

     private def configureClean(def task, def buildVariant) { 
      task.group = BasePlugin.BUILD_GROUP 
      task.description = "Deletes the calabash tests results for Build '${buildVariant}'" 
     } 
    } 

    class CalabashPluginExtension { 
     def root = 'src/calabash' 
     def resultFile = "calabash-results.html" 

     //protected def hash = new Object() 
     protected File outputFile 
     protected File workingDir 
     protected File tmpFile 

     protected init(Project project, def buildVariant) { 
      if (!buildVariant) { 
       buildVariant = "debug" 
      } 

      File rootFile = project.file(root) 
      outputFile = new File(project.file("build/reports/calabash/${buildVariant}"), resultFile) 
      workingDir = rootFile 
     } 

     protected writeCommandFile(def apkFile) { 
      if (!workingDir.exists()) { 
       throw new IllegalStateException("The root directory for the calabash-tests could not be found: '${workingDir}'") 
      } 

      if (!(new File(workingDir, "features").exists())) { 
       throw new IllegalStateException("The required 'features' directory could not be found in '${workingDir}'") 
      } 

      outputFile.parentFile.mkdirs() 

      def calabashCmd = "cd ${workingDir.canonicalPath}\r\necho calabash-android run \"${apkFile.canonicalPath}\" --format html --out \"${outputFile.canonicalPath}\"\r\n" 
      getCommandFile().write calabashCmd 
     } 

     protected execute(Exec exec) { 
      exec.commandLine 'cmd', '/c', getCommandFile().canonicalPath 
     } 

     protected clean() { 
      outputFile.delete() 
     } 

     private File getCommandFile() { 
      if (!tmpFile) { 
       tmpFile = File.createTempFile("run-calabash", ".bat") 
       tmpFile.deleteOnExit() 
      } 
      return tmpFile 
     } 
    } 

risposta

3

Molto buona domanda. Xamarin aveva un webinar on using Calabash tests nel proprio prodotto Test Cloud. Verso la fine del discorso c'è un po 'di pratica con la creazione dell'ecosistema di test e l'esecuzione di test Calabash per Android. Ci sono molte cose che non si applicano al tuo ambiente, ma alcuni ottimi consigli e approfondimenti di Karl Krukow - uno dei principali contributori di calabash-android.

Problemi correlati