聊聊Compose框架在UI测试自动化中的优点及示例

2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)-CSDN博客文章浏览阅读1.9k次,点赞85次,收藏11次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、app自动化测试、接口测试、性能测试、自动化测试、安全测试及一些常问到的人力资源题目。最主要的是他还收集了像阿里、华为这样的大厂面试真题,还有互动交流板块……https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5501概述与目的

测试是开发过程的重要组成部分,Android测试自动化多年来一直在发展。为了跟上最新趋势,Mercari(日本最大的网购平台之一)工程部门始终寻找改进的机会。在本文中,我将讨论用于自动化UI测试的Compose框架及其优点以及我们如何在Mercari使用它的一些示例。(https://developer.android.com/jetpack/compose)
之前,我们的UI测试是使用 Espresso 框架编写的。虽然 Espresso 是测试 Android UI 的强大工具,但它可能非常冗长且难以阅读。另一方面,Compose 使用更直观、更易于阅读的声明性语法。这意味着你可以使用更少的代码更快地编写测试。
  • Compose 提供了一种更直观的 UI 测试编写方式
    Compose 的声明式语法比 Espresso 的命令式语法更直观、更容易阅读。Compose 允许将 UI 组件创建为接受输入参数并返回 UI 树的函数。这样可以轻松地单独测试各个 UI 组件,而无需浏览整个应用程序。使用 Compose,可以使用更少的代码更快地编写测试,从而加快开发速度并提高测试效率。

  • Compose 允许单独测试 UI 组件
    测试 Android UI 的挑战之一是很难隔离各个 UI 组件进行测试。使用 Compose,可以将 UI 组件创建为接受输入参数并返回 UI 树的函数。这样可以轻松地单独测试各个 UI 组件,而无需浏览整个应用程序。通过单独测试 UI 组件,可以在开发过程的早期发现问题,并节省调试时间和精力。

  • Compose 提供了一种更可靠的方法来测试 UI 更改
    UI 测试的常见问题之一是很难可靠地测试 UI 更改。通过 Compose,可以使用assert() 函数来检查UI 组件是否按预期呈现。能够更可靠地测试 UI 更改并在开发过程的早期发现问题。通过尽早发现 UI 问题,可以降低引入错误的风险并提高应用的整体质量。

  • Compose 的执行速度比传统 UI 测试更快
    使用 Compose 进行 Android 测试自动化的另一个优点是它比传统的 UI 测试执行速度更快。这是因为 Compose UI 组件被编译成树结构,可以在多个测试中缓存和重用。这意味着测试将运行得更快并且开销更少。通过使用 Compose,可以节省测试时间和精力,并提高开发过程的整体效率。

  • Compose 为可测试性提供更好的支持
    最后,Compose 比传统 Android UI 框架提供了更好的可测试性支持。这是因为 Compose 组件被设计得更加模块化和可测试。可以使用 MockK 等工具为 Compose 组件创建模拟对象,这使得单独测试它们变得更加容易。UI 组件更加模块化和可测试,可以提高应用的整体质量并降低引入错误的风险。

在本文中,我将展示我们在 Mercari 使用的一些最佳实践,以展示易用性和简单性。

实施例1

fun goToMyPage() = MyPage.apply {
    composeTestRule.onNodeWithText(R.string.bottom_nav_title_my_page)
        .performClick()
}

R.string.bottom_nav_title_my_page 是 strings.xml 中定义的用于本地化的字符串资源

<string name="bottom_nav_title_my_page">My Page</string>

此操作点击底部菜单选项卡上的“我的页面”并返回 MyPage 对象。

如果屏幕上有可用文本,我们可以使用该文本来点击或断言字符串。

大多数时候你可以这样写:

 

实施例2

fun tapBack() = TopPage.apply{
    composeTestRule.onAllNodersWithTag("go back")[0]
        .onChildren()[0]
        .onChildAt(0)
        .performClick()
}

这是点击左侧的箭头从项目详细信息页面返回。

由于没有文字,我必须以其他方式按下箭头按钮。

在 Compose 中,我们可以使用语义来标记用于测试的值。

语义=“的含义”;在本例中,它为一段 UI 赋予了意义。

我已将箭头标记如下:

项目详细信息屏幕.kt

topBar = {
    TopNavigation(
        title = stringResource(id = R.string.title_itemDetailFragment),
        navigationIcon = DsIcons.arrowback,
        onNavigationClick = onUpPress,
        modifier = Modifier.testTag("go back")
    )
},

到目前为止,我使用两种方法来标记值。

  1. Use Modifier
    modifier = Modifier.testTag("go back") 是我添加的内容,这样我就可以点击箭头了。

  2. 使用内容描述

Thumbnail(
data = item.thumbnails.firstOrNull(),
contentDescription = THUBNAIL_CONTENT_DESCRIPTION,
fadeIn = fadeIn,
)

SearchResultScreen.kt

如果填写了 contentDescription,也可以使用它。

要在所有节点中指定目标节点,请定义一个条件来过滤并查找树中的特定节点。

图片

此外,我们可以使用onChildren().onFirst,它也可以获取第一个节点。

要查看树节点,请使用 composeTestRule.onRoot().printToLog("TAG") 打印节点结构。

在这里可以看到返回标签和结构,它显示如下:

图片

这非常易读,允许我们查看树中的元素。

我们可以知道具有 Button 和 OnClick Action 的节点是后退箭头。

只需找到如何定位相对于其他节点的位置即可。

图片

还可以通过设置断点并在评估窗口中键入 printLog 语句来查看测试执行期间的层次结构。

图片

实施例3​​​​​​​

composeTestRule.onNode(
    hasText(R.string.email_login_button) and
        hasClickAction(),
).performClick()

你还可以使用此样式来查找特定节点。上面的代码告诉我们单击一个节点,该节点具有由 email_login_button 标识的字符串,并且它还具有 ClickAction。

图片

结论

在我们团队(Mercari QA)中,我们发现这个框架很流畅,因为它是 Android 开发的原生框架。正如你从上面的示例中看到的,我们的代码非常可读且易于维护。我们的开发人员可以阅读我们的测试代码,因为它采用与他们使用的相同语言和技术堆栈。目前,我们在发布健全性检查中使用 Compose,并每周运行一次以查找应用程序中的任何回归,希望这篇文章对你有有用!

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 786229024,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】在这里插入图片描述
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值