diff options
| author | Albin <albin@mullvad.net> | 2022-03-07 10:43:01 +0100 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2022-04-20 17:09:16 +0200 |
| commit | 83059632cb2998ec71aff242897dea947ae05fb7 (patch) | |
| tree | 3b2b98d43c3e1aa5f8d116860ed020ec6d30c5cf /android/e2e/src/main/java | |
| parent | 24f8b8dd5fb827f71b0ae6bb087bc3c6e56ee120 (diff) | |
| download | mullvadvpn-83059632cb2998ec71aff242897dea947ae05fb7.tar.xz mullvadvpn-83059632cb2998ec71aff242897dea947ae05fb7.zip | |
Add Android e2e screenshot rule
This rule will capture screenshot of any failed test and download it to
the host executing the test.
Diffstat (limited to 'android/e2e/src/main/java')
3 files changed, 40 insertions, 0 deletions
diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/EndToEndTest.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/EndToEndTest.kt index 81a496c4f2..0ff6e0b1ae 100644 --- a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/EndToEndTest.kt +++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/EndToEndTest.kt @@ -5,12 +5,18 @@ import androidx.test.platform.app.InstrumentationRegistry import androidx.test.runner.AndroidJUnit4 import androidx.test.uiautomator.UiDevice import net.mullvad.mullvadvpn.e2e.interactor.AppInteractor +import net.mullvad.mullvadvpn.e2e.misc.CaptureScreenshotOnFailedTestRule import org.junit.Before +import org.junit.Rule import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) abstract class EndToEndTest { + @Rule + @JvmField + val rule = CaptureScreenshotOnFailedTestRule() + lateinit var device: UiDevice lateinit var targetContext: Context lateinit var app: AppInteractor diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/Constants.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/Constants.kt new file mode 100644 index 0000000000..44b8029799 --- /dev/null +++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/Constants.kt @@ -0,0 +1,3 @@ +package net.mullvad.mullvadvpn.e2e.constant + +const val LOG_TAG = "mullvad-e2e" diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/misc/CaptureScreenshotOnFailedTestRule.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/misc/CaptureScreenshotOnFailedTestRule.kt new file mode 100644 index 0000000000..82c43c958b --- /dev/null +++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/misc/CaptureScreenshotOnFailedTestRule.kt @@ -0,0 +1,31 @@ +package net.mullvad.mullvadvpn.e2e.misc + +import android.util.Log +import androidx.test.runner.screenshot.BasicScreenCaptureProcessor +import androidx.test.runner.screenshot.ScreenCaptureProcessor +import androidx.test.runner.screenshot.Screenshot +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter +import net.mullvad.mullvadvpn.e2e.constant.LOG_TAG +import org.junit.rules.TestWatcher +import org.junit.runner.Description + +class CaptureScreenshotOnFailedTestRule : TestWatcher() { + override fun failed(e: Throwable?, description: Description?) { + Log.d(LOG_TAG, "Capturing screenshot of failed test: " + description?.methodName) + val timestamp = DateTimeFormatter.ISO_DATE_TIME.format(LocalDateTime.now()).replace(":", "") + val screenshotName = "$timestamp-${description?.methodName}" + captureScreenshot(screenshotName) + } + + private fun captureScreenshot(screenShotName: String) { + try { + val screenCapture = Screenshot.capture().apply { name = screenShotName } + val processorSet: MutableSet<ScreenCaptureProcessor> = HashSet() + processorSet.add(BasicScreenCaptureProcessor()) + screenCapture.process(processorSet) + } catch (ex: Exception) { + Log.d(LOG_TAG, "Error capturing screenshot: " + ex.message) + } + } +} |
