在运行测试之前,android espresso登录一次

sou*_*rar 29 android ui-testing junit4 android-espresso

我一直试图通过测试来覆盖我的Android应用程序,并且最近开始使用espresso.到目前为止,它印象深刻.但是,我的应用程序的大多数功能都要求用户登录.由于所有测试都是独立的,因此需要为每个测试注册一个新用户.这很好,但是每次测试所需的时间因此而大大增加.

我试图找到一种方法在类(测试)中注册一次用户,然后使用相同的用户帐户执行该类中的所有测试.

我能够做到这一点的一种方法是实际上只有一个test(@Test)方法按我想要的顺序运行所有其他测试.然而,这是一种全有或全无的方法,因为gradle cAT任务仅在结束时输出结果一次,而不提供有关可能已通过/失败的中间测试的信息.

我也尝试了这种@BeforeClass方法,但是没有用(没有使用调试选项我使用过它的类的gradle输出,看起来它需要很长时间才能进入下一类测试).

是否有更好的方法在课程开始时注册用户一次,然后在测试结束时注销一次?

任何帮助赞赏.

fej*_*ejd 12

理想情况下,您将在一组仅测试不同登录/注销方案的测试中测试登录/注销功能,并让其他测试关注其他用例.但是,由于其他方案依赖于用户登录,因此解决此问题的一种方法是提供处理登录的应用程序组件的模拟版本.对于其他依赖于登录的测试,您将在开始时注入此模拟,它将返回应用程序其余部分可以使用的模拟用户凭据.

以下是Dagger,Mockito和Espresso用于实现此目的的示例:https://engineering.circle.com/instrumentation-testing-with-dagger-mockito-and-espresso/


小智 6

我测试了一个需要同样场景的应用.我最简单的方法就是将登录和分解分成他们自己的测试类.然后将所有测试类添加到套件中,分别以登录和注销套件开始和结束.您的测试套件最终看起来像这样.

@RunWith(Suite.class)
@Suite.SuiteClasses({
        LoginSetup.class,
        SmokeTests.class,
        LogoutTearDown.class
})
Run Code Online (Sandbox Code Playgroud)

编辑:以下是LoginSetup和LogoutTearDown测试的示例.该解决方案实际上应仅用于端到端测试,并且只包含一小部分测试工作.fejd为完整的测试堆栈提供了一个解决方案,也需要考虑.

@LargeTest
public class SmokeSetup extends LogInTestFixture {

    @Rule
    public ActivityTestRule<LoginActivity> mLoginActivity = new ActivityTestRule<>(LoginActivity.class);

    @Test
    public void testSetup() throws IOException {

        onView(withId(R.id.username_field)).perform(replaceText("username"));
        onView(withId(R.id.password_field)).perform(replaceText("password"));
        onView(withId(R.id.login_button)).perform(click());

    }

}

@LargeTest
public class LogoutTearDown extends LogInTestFixture {

    @Rule
    public ActivityTestRule<MainActivity> mMainActivity = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void testLogout() throws IOException {

        onView(withId(R.id.toolbar_menu)).perform(click());
        onView(withId(R.id.logout_button)).perform(click());

    }

}
Run Code Online (Sandbox Code Playgroud)


小智 2

我的应用程序还要求用户在整个测试运行过程中登录。但是,我能够第一次登录,并且应用程序在整个测试运行过程中都会记住我的用户名/密码。事实上,它会记住凭据,直到我强迫它忘记它们或卸载并再次安装该应用程序。

在测试运行期间,每次测试后,我的应用程序都会进入后台,并在下一次测试开始时再次恢复。我猜您的应用程序要求用户在每次从后台将其带到前台时输入其凭据(可能是银行应用程序?)。您的应用程序中是否有一个设置可以“记住您的凭据”?如果是,您可以在测试运行中首次登录后轻松启用它。

除此之外,我认为您应该与开发人员讨论为您提供一种记住您的凭据的方法。