Android 插桩测试入门

1.简介

插桩测试在 Android 设备上运行,无论是物理测试还是模拟测试。因此,它们可以利用 Android 框架 API。因此,插桩测试可提供比本地测试更高的保真度,但其运行速度要慢得多。建议仅在必须对真实设备的行为进行测试的情况下使用插桩测试。

2.环境配置

在 Android Studio 项目中,将插桩测试的源文件存储在 module-name/src/androidTest/java/ 中。创建新项目时,此目录已存在,并且包含插桩测试示例。
在开始之前,需要添加 AndroidX Test API,以便为应用快速构建和运行插桩测试代码。AndroidX Test 包含 JUnit 4 测试运行程序 AndroidJUnitRunner,以及用于功能界面测试(如 EspressoUI AutomatorCompose 测试)的 API。
您还需要为项目配置 Android 测试依赖项,以使用 AndroidX Test 提供的测试运行程序和规则 API。

配置示例:

dependencies {
    ...
    androidTestImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
}

如需使用 JUnit 4 测试类并访问测试过滤等功能,请务必将 AndroidJUnitRunner 指定为项目中的默认插桩测试运行程序,方法是在模块级 build.gradle 文件中添加以下设置:

defaultConfig {
        ...
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

3.创建插桩测试类

代码示例

import androidx.test.core.app.ActivityScenario
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Assert
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import java.util.concurrent.CountDownLatch


/**
 * 描述:描述
 * @author Stone
 */
@RunWith(AndroidJUnit4::class)
class MainActivityTest {
    var TAG: String = "MainActivityTest"

    @Before
    fun setUp() {
        LogUtil.i(TAG, "setup")
        RemoteManager.await()
    }

    /**
     * 打开首页
     * */
    @Test
    fun startMain() {
        LogUtil.i(TAG, "startMain")
        val sce = ActivityScenario.launch(MainActivity::class.java)
        val countDownLatch = CountDownLatch(1)
        var tbaList = arrayOf<String>()
        sce.onActivity {
            LogUtil.i(TAG, "onActivity")
            tbaList = it.resources.getStringArray(R.array.tab_title)
            countDownLatch.countDown()
        }
        countDownLatch.await()
        tbaList.mapIndexed { index, s ->
            Thread.sleep(500)

            val res = withText(tbaList[index]).matches(tbaList[index])
            LogUtil.i(TAG, "onActivity,res:$res")
            onView(withText(tbaList[index])).perform(click())
        }
        Thread.sleep(500)
        Assert.assertEquals(true, true)
        sce.close()
    }
}

4.运行插桩测试

插桩测试可以在真实设备或模拟器上运行。

1)AndroidStudio 图形界面运行
运行单一Test文件
选择目录运行全部Test
运行全部Test
2)命令行运行

Gradle 支持任务名称缩写。例如,输入以下命令,便可启动 connectedAndroidTest 任务:

./gradlew cAT

还可以选择运行 Gradle 任务 check 和 connectedCheck。这些任务分别运行您的本地测试或插桩测试,但包含其他 Gradle 插件添加的其他检查。

在模块上运行测试

test 和 connectedAndroidTest 任务会在项目中的每个模块上运行测试。您可以在 test 或 connectedAndroidTest 任务前加上模块名称和英文冒号 (:),以针对特定模块运行测试。例如,以下命令仅针对 app 模块运行插桩测试:

./gradlew app:connectedAndroidTest
运行特定的测试方法或类

运行本地单元测试时,Gradle 允许您使用 --tests 标记指定特定的测试。例如,以下命令仅针对指定的 build 变体运行 sampleTestMethod 测试。详细了解如何使用 --tests 标记,请参阅关于测试过滤的 Gradle 文档。

./gradlew testVariantNameUnitTest --tests '*.sampleTestMethod'
插桩测试的报告

测试报告位置


测试报告位置
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容