sou*_*rar 29 android ui-testing junit4 android-espresso
我一直试图通过测试来覆盖我的Android应用程序,并且最近开始使用espresso.到目前为止,它印象深刻.但是,我的应用程序的大多数功能都要求用户登录.由于所有测试都是独立的,因此需要为每个测试注册一个新用户.这很好,但是每次测试所需的时间因此而大大增加.
我试图找到一种方法在类(测试)中注册一次用户,然后使用相同的用户帐户执行该类中的所有测试.
我能够做到这一点的一种方法是实际上只有一个test(@Test)方法按我想要的顺序运行所有其他测试.然而,这是一种全有或全无的方法,因为gradle cAT任务仅在结束时输出结果一次,而不提供有关可能已通过/失败的中间测试的信息.
我也尝试了这种@BeforeClass方法,但是没有用(没有使用调试选项我使用过它的类的gradle输出,看起来它需要很长时间才能进入下一类测试).
是否有更好的方法在课程开始时注册用户一次,然后在测试结束时注销一次?
任何帮助赞赏.
小智 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
我的应用程序还要求用户在整个测试运行过程中登录。但是,我能够第一次登录,并且应用程序在整个测试运行过程中都会记住我的用户名/密码。事实上,它会记住凭据,直到我强迫它忘记它们或卸载并再次安装该应用程序。
在测试运行期间,每次测试后,我的应用程序都会进入后台,并在下一次测试开始时再次恢复。我猜您的应用程序要求用户在每次从后台将其带到前台时输入其凭据(可能是银行应用程序?)。您的应用程序中是否有一个设置可以“记住您的凭据”?如果是,您可以在测试运行中首次登录后轻松启用它。
除此之外,我认为您应该与开发人员讨论为您提供一种记住您的凭据的方法。
| 归档时间: |
|
| 查看次数: |
8488 次 |
| 最近记录: |