EspressoSample深度解析:在CircleCI上高效运行Android UI测试

项目背景与简介

EspressoSample项目位于GitHub上的circleci/EspressoSample仓库,该项目旨在展示如何在CircleCI平台上配置和使用Espresso进行Android应用的UI测试。

项目结构与环境准备

项目结构

EspressoSample项目遵循典型的Android项目结构,包含app模块用于存放应用代码,以及可能的测试模块。在app模块中,会找到src/main目录下的应用代码,以及src/testsrc/androidTest目录下的测试代码。

环境准备

在开始之前,确保已经安装了以下工具:

  • Android Studio:用于开发Android应用。
  • Git:用于版本控制和克隆项目仓库。
  • CircleCI CLI:用于在本地验证CircleCI配置文件。
  • JDK:Java开发工具包,用于编译Java代码。
  • Android SDK:Android软件开发工具包,包含构建和测试Android应用所需的工具和库。

CircleCI配置

创建CircleCI项目

首先,登录CircleCI平台,并创建一个新项目,关联到EspressoSample GitHub仓库。CircleCI会自动检测仓库中的.circleci/config.yml文件,该文件定义了项目的构建和测试流程。

配置.circleci/config.yml

.circleci/config.yml文件:

version: 2.1
jobs:
  build:
    docker:
      - image: circleci/android:api-30
    environment:
      JVM_OPTS: "-Xmx3200m"
    steps:
      - checkout
      - restore_cache:
          key: jars-{
    
    {
    
     checksum "build.gradle" }}-{
    
    {
    
     checksum  "app/build.gradle" }}
      - run:
          name: Download Dependencies
          command: ./gradlew androidDependencies
      - save_cache:
          paths:
            - ~/.gradle/caches/
          key: jars-{
    
    {
    
     checksum "build.gradle" }}-{
    
    {
    
     checksum  "app/build.gradle" }}
      - run:
          name: Assemble Debug APK
          command: ./gradlew assembleDebug
      - run:
          name: Run Espresso Tests
          command: ./gradlew connectedAndroidTest
          environment:
            TERM: dumb
    post-steps:
      - store_artifacts:
          path: app/build/reports/androidTests/connected/
workflows:
  version: 2
  build_and_test:
    jobs:
      - build

在这个配置文件中,定义了一个名为build的工作流,包含以下步骤:

  1. Checkout:检出代码仓库。
  2. Restore Cache:恢复之前构建的依赖缓存,以加快构建速度。
  3. Download Dependencies:下载项目依赖。
  4. Save Cache:保存当前构建的依赖缓存,供后续构建使用。
  5. Assemble Debug APK:构建Debug版本的APK。
  6. Run Espresso Tests:运行Espresso测试,并通过设置TERM环境变量为dumb来改善Gradle命令行输出。
  7. Store Artifacts:存储测试报告,以便在CircleCI平台上查看。

Espresso测试代码示例

添加Espresso依赖

app/build.gradle文件中,添加Espresso测试库的依赖:

androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test:rules:1.4.0'

编写Espresso测试

app/src/androidTest/java/com/example/espressosample目录下,创建一个测试类,如MainActivityTest.java,并编写测试代码:

import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.rule.ActivityTestRule;
import androidx.test.espresso.Espresso;
import androidx.test.espresso.action.ViewActions;
import androidx.test.espresso.assertion.ViewAssertions;
import androidx.test.espresso.matcher.ViewMatchers;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
    
    

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

    @Test
    public void testLaunchActivity() {
    
    
        // 检查Activity是否已启动并显示特定文本
        Espresso.onView(ViewMatchers.withId(R.id.hello_world))
                .check(ViewAssertions.matches(ViewMatchers.isDisplayed()));

        // 模拟点击按钮并验证结果
        Espresso.onView(ViewMatchers.withId(R.id.button))
                .perform(ViewActions.click());

        Espresso.onView(ViewMatchers.withText("Button Clicked!"))
                .check(ViewAssertions.matches(ViewMatchers.isDisplayed()));
    }
}

在这个测试类中,使用了Espresso提供的API来定位UI元素、执行用户操作(如点击)以及验证UI状态。ActivityTestRule用于启动并管理被测Activity的生命周期。

运行与查看结果

在本地运行测试

在Android Studio中,您可以通过右键点击测试类或测试方法并选择“Run”来在本地运行Espresso测试。测试结果将显示在Android Studio的测试运行窗口中。

在CircleCI上运行测试

推送您的代码更改到GitHub仓库后,CircleCI将自动触发构建和测试流程。您可以在CircleCI平台上查看构建日志和测试结果。如果测试失败,CircleCI将提供详细的错误信息,帮助您定位并修复问题。

猜你喜欢

转载自blog.csdn.net/zhangkexin_z/article/details/146210616
今日推荐