项目背景与简介
EspressoSample项目位于GitHub上的circleci/EspressoSample仓库,该项目旨在展示如何在CircleCI平台上配置和使用Espresso进行Android应用的UI测试。
项目结构与环境准备
项目结构
EspressoSample项目遵循典型的Android项目结构,包含app
模块用于存放应用代码,以及可能的测试模块。在app
模块中,会找到src/main
目录下的应用代码,以及src/test
或src/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
的工作流,包含以下步骤:
- Checkout:检出代码仓库。
- Restore Cache:恢复之前构建的依赖缓存,以加快构建速度。
- Download Dependencies:下载项目依赖。
- Save Cache:保存当前构建的依赖缓存,供后续构建使用。
- Assemble Debug APK:构建Debug版本的APK。
- Run Espresso Tests:运行Espresso测试,并通过设置
TERM
环境变量为dumb
来改善Gradle命令行输出。 - 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将提供详细的错误信息,帮助您定位并修复问题。