From f2b5071a5a485f07ebb30dcecaa4108c81545dc2 Mon Sep 17 00:00:00 2001 From: Nikita Evdokimov Date: Thu, 11 Jan 2024 16:42:55 +0300 Subject: [PATCH] TECH: Allow allure support test without videos --- .../AllureSupportKaspressoBuilder.kt | 18 +++++++++++++----- .../alluresupport/results/AllureResultsHack.kt | 9 +++++---- .../alluresupport/sample/AllureSupportTest.kt | 3 ++- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/allure-support/src/main/kotlin/com/kaspersky/components/alluresupport/AllureSupportKaspressoBuilder.kt b/allure-support/src/main/kotlin/com/kaspersky/components/alluresupport/AllureSupportKaspressoBuilder.kt index cbddf0e00..6ee0272cb 100644 --- a/allure-support/src/main/kotlin/com/kaspersky/components/alluresupport/AllureSupportKaspressoBuilder.kt +++ b/allure-support/src/main/kotlin/com/kaspersky/components/alluresupport/AllureSupportKaspressoBuilder.kt @@ -28,6 +28,7 @@ import com.kaspersky.kaspresso.runner.listener.getUniqueListener * If a test is executing on the JVM (with Robolectric) environment then mentioned above interceptors are not including to prevent crashes. * Allure reports don't have any sense in non Instrumental environment. */ +@Deprecated("This builder doesn't support storage system restrictions", ReplaceWith("Kaspresso.Builder.withForcedAllureSupport()")) fun Kaspresso.Builder.Companion.withAllureSupport( customize: Kaspresso.Builder.() -> Unit = {} ): Kaspresso.Builder = simple(customize).addAllureSupport() @@ -62,6 +63,7 @@ fun Kaspresso.Builder.addAllureSupport(): Kaspresso.Builder = apply { * Forces file providers needed for fixed allure support */ fun Kaspresso.Builder.Companion.withForcedAllureSupport( + shouldRecordVideo: Boolean = true, customize: Kaspresso.Builder.() -> Unit = {} ): Kaspresso.Builder = simple { if (!isAndroidRuntime) { @@ -71,7 +73,9 @@ fun Kaspresso.Builder.Companion.withForcedAllureSupport( val instrumentalDependencyProvider = instrumentalDependencyProviderFactory.getComponentProvider(instrumentation) forceAllureSupportFileProviders(instrumentalDependencyProvider) addRunListenersIfNeeded(instrumentalDependencyProvider) -}.apply(::postInitAllure) +}.apply { + postInitAllure(shouldRecordVideo, builder = this) +} private fun Kaspresso.Builder.forceAllureSupportFileProviders(provider: InstrumentalDependencyProvider) { resourcesDirNameProvider = DefaultResourcesDirNameProvider() @@ -107,12 +111,10 @@ private fun Kaspresso.Builder.addRunListenersIfNeeded(provider: InstrumentalDepe } } -private fun postInitAllure(builder: Kaspresso.Builder): Unit = with(builder) { +private fun postInitAllure(shouldRecordVideo: Boolean, builder: Kaspresso.Builder): Unit = with(builder) { if (!isAndroidRuntime) { return@with } - val provider = instrumentalDependencyProviderFactory.getComponentProvider(instrumentation) - val allureResourcesFilesProvider = resourceFilesProvider as AllureResourceFilesProvider stepWatcherInterceptors.addAll( listOf( ScreenshotStepInterceptor(screenshots), @@ -124,7 +126,13 @@ private fun postInitAllure(builder: Kaspresso.Builder): Unit = with(builder) { DumpLogcatTestInterceptor(logcatDumper), ScreenshotTestInterceptor(screenshots), DumpViewsTestInterceptor(viewHierarchyDumper), - HackyVideoRecordingTestInterceptor(videos, allureResourcesFilesProvider, provider.runNotifier.getUniqueListener()) ) ) + if (shouldRecordVideo) { + val provider = instrumentalDependencyProviderFactory.getComponentProvider(instrumentation) + val allureResourcesFilesProvider = resourceFilesProvider as AllureResourceFilesProvider + testRunWatcherInterceptors.add( + HackyVideoRecordingTestInterceptor(videos, allureResourcesFilesProvider, provider.runNotifier.getUniqueListener()) + ) + } } diff --git a/allure-support/src/main/kotlin/com/kaspersky/components/alluresupport/results/AllureResultsHack.kt b/allure-support/src/main/kotlin/com/kaspersky/components/alluresupport/results/AllureResultsHack.kt index 1f355da49..216f5f0ec 100644 --- a/allure-support/src/main/kotlin/com/kaspersky/components/alluresupport/results/AllureResultsHack.kt +++ b/allure-support/src/main/kotlin/com/kaspersky/components/alluresupport/results/AllureResultsHack.kt @@ -35,16 +35,17 @@ class AllureResultsHack( } override fun testRunFinished(result: Result) { - if (videosToInject.isEmpty()) { - return - } val allureResultsInjector = AllureResultInjector( parser = AllureResultJsonParser(), uiDevice = uiDevice, resultsDir = allureResultsTargetDir ) + allureResultsSourceDir.copyRecursively(allureResultsTargetDir) - allureResultsInjector.injectVideos(allureResultsTargetDir, videosToInject) + if (videosToInject.isNotEmpty()) { + allureResultsInjector.injectVideos(allureResultsTargetDir, videosToInject) + } + allureResultsSourceDir.deleteRecursively() stubVideosDir.deleteRecursively() } diff --git a/samples/kaspresso-allure-support-sample/src/androidTest/kotlin/com/kaspersky/kaspresso/alluresupport/sample/AllureSupportTest.kt b/samples/kaspresso-allure-support-sample/src/androidTest/kotlin/com/kaspersky/kaspresso/alluresupport/sample/AllureSupportTest.kt index 98b67da50..f76740b2c 100644 --- a/samples/kaspresso-allure-support-sample/src/androidTest/kotlin/com/kaspersky/kaspresso/alluresupport/sample/AllureSupportTest.kt +++ b/samples/kaspresso-allure-support-sample/src/androidTest/kotlin/com/kaspersky/kaspresso/alluresupport/sample/AllureSupportTest.kt @@ -2,6 +2,7 @@ package com.kaspersky.kaspresso.alluresupport.sample import androidx.test.ext.junit.rules.activityScenarioRule import com.kaspersky.components.alluresupport.withAllureSupport +import com.kaspersky.components.alluresupport.withForcedAllureSupport import com.kaspersky.kaspresso.alluresupport.sample.screen.MainScreen import com.kaspersky.kaspresso.kaspresso.Kaspresso import com.kaspersky.kaspresso.testcases.api.testcase.TestCase @@ -12,7 +13,7 @@ import org.junit.Test * Use [withAllureSupport] function to add the all available allure interceptors. */ class AllureSupportTest : TestCase( - kaspressoBuilder = Kaspresso.Builder.withAllureSupport() + kaspressoBuilder = Kaspresso.Builder.withForcedAllureSupport() ) { @get:Rule