Запуск контрольно-измерительных тестов из определенного пакета с помощью плагина ложка-градле

Я использую spoon-gradle-plugin от Романа Мазура. Я могу запускать все тесты одновременно, но у меня возникают проблемы с указанием «группы» тестов, которые я хотел бы запустить. В настоящее время моя установка ложки выглядит так:

spoon {
    debug = true

    baseOutputDir = file("$buildDir/spoon-log")
    if (project.hasProperty('spoonClassName')) {
        className = project.spoonClassName

        if (project.hasProperty('spoonMethodName')) {
            methodName = project.spoonMethodName
        }
    }

    adbTimeout = 60 * 60;
}

Мои тесты находятся в пакетах:

введите здесь описание изображения

И моя цель — создать отдельные задачи gradle, зависящие от ложки, для запуска тестов из каждого пакета отдельно. Роман дал нам параметр instrumentationArgs, который должен иметь возможность редактировать некоторые свойства в ложке.

Как я вижу, на основном гите ложки написано, что можно указать пакет, где ложка-раннер следует искать ваши тесты, и пример выглядит так:

--e package=com.mypackage.unit_tests

Итак, моя идея состояла в том, чтобы поместить это свойство в toolsationArgs. Следовательно, я создал свои задачи с ложкой следующим образом:

task spoonAuthFlowTests(type: GradleBuild, dependsOn: ['spoon']) {
    spoon {
        instrumentationArgs = ["package=com.myapp.instrumentation.flowtests.AuthFlowTests"]
        noAnimations = true;
    }
}

task spoonFlowTests(type: GradleBuild, dependsOn: ['spoon']) {
    spoon {
        instrumentationArgs = ["package=com.myapp.instrumentation.flowtests"]
        noAnimations = true;
    }
}

Что я могу сказать, так это то, что параметр noAnimations прекрасно расширяет конфигурацию ложки по умолчанию, предотвращая создание GIF-файлов. Таким образом, toolsationArgs наверняка берет мой строковый массив, но не применяет изменения, потому что в моем терминале:

2016-01-08 15:13:10 [SDR.run] About to actually run tests for [04ffe19ad317d2e7]
03:13:10 I/RemoteAndroidTest: Running am instrument -w -r   -e package com.myapp.instrumentation.flowtests -e class com.myapp.instrumentation.flowtests.AuthFlowTests.LoginUserFlowTests com.myapp.debug1.test/com.myapp.instrumentation.helper.runner.MyAppTestRunner on lge-nexus_4-04ffe19ad317d2e7

Независимо от того, что я делаю со свойством «пакет», я всегда получаю результат:

-e package com.myapp.instrumentation.flowtests

И я хочу изменить его, но не знаю, как. Кроме того, я могу сказать, что я пытался найти в своем проекте строку «com.myapp.instrumentation.flowtests», и единственными местами, где она используется, являются: тесты в пакете + задачи gradle, представленные выше. Так что это нигде не жестко запрограммировано. То же место выбирается, если я запускаю тесты:

./gradlew spoon

И после того, как я использую:

./gradlew spoonAuthFlowTests

Он также запускает весь набор тестов.


person F1sher    schedule 08.01.2016    source источник


Ответы (1)


Ваша проблема в том, что вы неправильно интерпретируете, как работает блок spoon в вашей конфигурации Gradle. Когда вы пишете что-то вроде

spoon {
  debug = true
}

Вы в основном изменяете одноэлементный объект, связанный с вашим проектом Gradle. Этот проект содержит конфигурацию, общую для всех задач, созданных плагином ложки. Плагин Spoon создает отдельные задачи для разных вкусов, определенных в вашем проекте (чтобы вы могли запускать тесты для каждого вкуса отдельно). Также есть такие задачи, как spoonSmall, spoonMedium для запуска тестов, аннотированных только @Small или @Medium. Все эти задачи используют один и тот же объект конфигурации, который вы изменяете с помощью spoon {}.

Следовательно, когда вы вызываете spoon {} внутри своих определений задач, вы просто переопределяете существующие значения. И применяются последние значения.

Если вы хотите создать пользовательскую задачу по бегунку ложек, вы должны написать что-то вроде

import com.stanfy.spoon.gradle.SpoonRunTask
task spoonAuthFlowTests(type: SpoonRunTask) {
  instrumentationArgs = ['package=com.myapp.instrumentation.flowtests.AuthFlowTests']
  // But you will have to set many other options on the tasks,
  // like instrumentationApk and applicationApk files.
}

Вы можете увидеть все свойства задач в Исходники SpoonRunTask. Большинство из них устанавливаются из этого единственного объекта конфигурации плагином при создании задач.

Если это звучит слишком сложно, вы можете выбрать другой способ. Настройте свои аргументы, используя свойства проекта, которые можно определить в командной строке.

spoon {
  instrumentationArgs = ["package=${project.getProperty('spoonPackage')}"]
  noAnimations = true;
}

Теперь вы можете бежать

./gradlew spoon -PspoonPackage=com.myapp.instrumentation.flowtests

Таким образом, вместо указания разных задач в командной строке вы будете указывать разные свойства проекта.

Минус в том, что вы не сможете запустить тесты для 2-х пакетов одним вызовом gradle. Вам придется вызывать его дважды с разными значениями.

person Roman Mazur    schedule 21.01.2016
comment
Как вы передаете список нескольких устройств через свойство командной строки? - person reutsey; 23.04.2020