在@Before中清除应用数据后测试用例失败

时间:2017-02-02 08:29:19

标签: android ui-automation android-espresso

我正在尝试自动化应用的入职流程,并且需要在每个之前清除应用数据 @Test

我已经实施了

public class Onboarding {
@Rule
public ActivityTestRule<AppStartActivity> mActivityTestRule = new ActivityTestRule<>(AppStartActivity.class);
@Before
public void clearPreferences() {
    try {
        // clearing app data
        Runtime runtime = Runtime.getRuntime();
        runtime.exec("pm clear packageName");

    } catch (Exception e) {
        e.printStackTrace();
    }
}
@Test
public void Mobile10DigitWithInvalidOtp () {
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    OnboardingFragment onboardingFragment = new OnboardingFragment();
    onboardingFragment.LoginAsExistingUserIndia("1325546852", "12345");
    onboardingFragment.invalidOtpMessage.check(matches(isDisplayed()));
}
}

但是一旦这个测试崩​​溃了。

测试无法运行完成。原因:&#39;仪表运行因“进程崩溃”而失败。&#39;&#39;。检查设备logcat以获取详细信息 测试运行失败:由于“进程崩溃”导致仪表运行失败。&#39;

如果我在没有@Before 的情况下运行@Test,它运行正常。

我应该如何实现这一点,以便在每次测试运行之前清除应用数据后继续运行我的测试用例?

2 个答案:

答案 0 :(得分:1)

当您运行检测测试时 - 它们与同一线程中的测试下的应用程序一起运行。清除包或换句话说,在测试线程下杀死应用程序也会导致检测测试。

可能的解决方案:

  • 在使用例如adb命令启动检测测试之前清除包: adb shell pm clear com.bla.bla
  • 在被测应用程序中实现方法,该方法清除所需的数据(数据库,prefs等)并从@Before测试方法中调用它。

答案 1 :(得分:0)

您可以使用 Android Test Orchestrator。

https://developer.android.com/training/testing/junit-runner#using-android-test-orchestrator

要使用 Gradle 命令行工具启用 Android Test Orchestrator,请将以下语句添加到项目的 build.gradle 文件中:

android {
  defaultConfig {
   ...
   testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

   // The following argument makes the Android Test Orchestrator run its
   // "pm clear" command after each test invocation. This command ensures
   // that the app's state is completely cleared between tests.
   testInstrumentationRunnerArguments clearPackageData: 'true'
 }

  testOptions {
    execution 'ANDROIDX_TEST_ORCHESTRATOR'
  }
}

dependencies {
  androidTestImplementation 'androidx.test:runner:1.1.0'
  androidTestUtil 'androidx.test:orchestrator:1.1.0'
}