功能测试框架 espresso

发布于 2024-08-14 01:23:10 字数 4599 浏览 16 评论 0

正如 Ali Derbane 和我写的第一篇关于 Android 的功能测试的文章中提到的,有许多的框架供你使用,在这个旅程的第二部分,我将讲解 Espresso 这个功能测试框架。

简介

Espresso 是在 2013 年的 GTAC 上首次提出,目的是让开发人员能够快速地写出简洁,美观,可靠的 Android UI 测试。

Espresso 有以下几个通用组件:

  • Espresso 类提供的 onView 和 onData 方法,仅可用于特定接口上测试最优数。
  • ViewMatchers 包含一个实现了 Matcher <? super View> 接口的对象集合,使用该类你可以收集或是检查 View 元素,例如,通过文本 “7” ​ 获取一个 View 元素 (Button)。
  • ViewActions 包含了一组 viewAction 对象,储存了将要在 View 上执行的动作。这些动作被传递给 ViewInteraction.perform 方法,也许包含更多的动作。For 例如,点击一下 View 元素 (Button)。
  • ViewAssertions 包含 ViewAssertion 集合,用于对 Views 进行检查。

举个例子说明一下,这些测试组件看起来就像下面这样:

Espresso.onView(ViewMatchers.withText("7")).perform(ViewActions.click());
Espresso.onView(withId(R.id.result)).check(ViewAssertions.matches(ViewMatchers.withText("42")));

好消息,去年谷歌推出了集成 Espresso 的 Testing Support Library .因此,让我们通过实现 Espresso 开始吧。

为了方便解释, 我们要编写一些测试用例来测试 Android calculator application 这个 App,先来实现一个测试 “6”x“7” ​等于 “42” ​是否正确的普通测试场景。

定义 test runner

使用 Espresso 我们首先需要定义这些测试用例。Espresso 使用新的名为 AndroidJUnitRunner 的测试用例。该测试用例基于 InstrumentationTestRunner 和 GoogleInstrumentationTestRunner ,运行 JUnit3 和 JUnit4 来测试你的 Android 应用程序。

首先将依赖项添加到你的 build.gradle 文件中, 这里假设你已经安装好了 Testing Support Library .

dependencies {
 androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
}

然后添加测试用例到你的 build.gradleandroid.defaultConfig 配置中

defaultConfig {
  ...
  testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

编写测试

你可能已经想到了,测试类必须在 src\androidTest\com.example.package.tests 中.包 com.example.package 是在 AndroidManifest 文件中指定的属性。

每一个测试类还必须继承抽象类 ActivityInstrumentationTestCase2 并且使用默认测试的 Activity 作为泛型。

它还需要通过 super() 方法传递给父类,要使被测试的 Activity 被测试框架调用,只需要在 setup 方法中同步调用 getActivity() 方法。

public class FunctionalInstrumentationTest extends ActivityInstrumentationTestCase2<ActivityToTest> {

    public FunctionalInstrumentationTest() {
        super(ActivityToTest.class);
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        getActivity();
    }
}

正如前面提到的,我们想要检查“6”x“7”是否等于“42”.

public void testAnswer_to_the_Ultimate_Question_of_Life_the_Universe_and_Everything() {
        onView(withText("7")).perform(click());
        onView(withText("×")).perform(click());
        onView(withText("6")).perform(click());
        onView(withText("=")).perform(click());

        onView(withId(R.id.resText)).check(matches(withText("42")));
    }

你可能已经注意到,这个示例是使用静态导入,这样做完全是为了使代码更易于阅读。

其他你可能会用到的操作:

  • pressBack() ; to simulate the use of the “back” button,
  • isDisplayed() ; to check if an element is being shown and
  • scrollTo() ; to scroll to an element.
  • pressBack() ; 模拟后退按钮
  • isDisplayed() ; jian 检查某个元素是否显示
  • scrollTo() ; 滚动到另外一个元素

运行测试

现在我们做做有趣的,运行测试.这可以通过 gradle clean assembleDebug connectedAndroidTest 从命令行运行,或者使用 Android Studio:

  1. 打开 Run 菜单 | Edit Configurations
  2. 添加一个新的 Android Tests configuration
  3. 选择你需要测试的 Module
  4. 定义我们的测试用例: android.support.test.runner.AndroidJUnitRunner

现在你对于 Espresso 有一些了解了。如果需要深入,可以浏览以下链接:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

七堇年

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

linfzu01

文章 0 评论 0

可遇━不可求

文章 0 评论 0

枕梦

文章 0 评论 0

qq_3LFa8Q

文章 0 评论 0

JP

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文