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

2023-12-19

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%免费】 在这里插入图片描述
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 软件测试|web自动化测试神器playwright教程(三十八)

    简介 在我们使用selenium时 我们可以获取元素的属性 元素的文本值 以及输入框的内容等 作为比selenium更为强大的web自动化测试神器 playwright也可以实现对元素属性 文本值和输入框内容的抓取 并且实现比seleniu
  • 软件测试|Python数据可视化神器——pyecharts教程(九)

    使用pyecharts绘制K线图进阶版 简介 K线图 Kandlestick Chart 又称蜡烛图 是一种用于可视化金融市场价格走势和交易数据的图表类型 它是股票 外汇 期货等金融市场中最常用的技术分析工具之一 可以提供关于价格变动 趋势
  • 软件测试|使用matplotlib绘制多种柱状图

    简介 在数据可视化领域 Matplotlib是一款强大的Python库 它可以用于创建多种类型的图表 包括柱状图 本文将介绍如何使用Matplotlib创建多种不同类型的柱状图 并提供示例代码 创建基本柱状图 首先 让我们创建一个基本的柱状
  • 软件测试|教你使用Python下载图片

    前言 我一直觉得Windows系统默认的桌面背景不好看 但是自己又没有好的资源可以进行替换 突然我一个朋友提醒了我 网络上的图片这么多 你甚至可以每天换很多个好看的背景 但是如果让我手动去设置的话 我觉得太麻烦了 我不如使用技术手段将图片下
  • 软件测试|如何使用selenium处理iframe富文本输入框

    简介 在网页开发中 富文本框是常见的元素 用于输入富文本内容 如富文本编辑器或邮件编辑器 如果我们要使用Python和Selenium进行自动化测试或操作这种富文本框 可能会遇到一些挑战 本文将详细介绍如何使用Python和Selenium
  • Python自动化测试 | 如何使用Robot Framework进行自动化测试?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 测开和测试平台是否有存在的必要?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 如何写好一个错误报告

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Jmeter 性能-阶梯负载最终请求数

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • 月薪2W的软件测试工程师,到底是做什么的?

    在生活中 我们常常会遇到以下几种窘迫时刻 准备骑共享单车出行 却发现扫码开锁半天 车子都没有反应 手机导航打车 却发现地图定位偏差很大 司机总是跑错地方 买个水 却遭遇自动售货机吐币 或者不找零钱 好不容易休息打个游戏 却一直出现卡顿 闪退
  • 服务器VPS是什么意思?一文了解其含义与重要性

    在今天的数字时代 服务器扮演着至关重要的角色 它们是网站 应用程序和在线业务的基石 但是 你是否听说过VPS 本文将深入探讨什么是服务器VPS 以及为什么它在今天的互联网世界中如此重要 什么是服务器VPS 服务器的基本概念 在我们深入探讨V
  • 软件测试/测试开发/全日制/测试管理丨Android WebView 技术原理

    Android WebView是一个内置的组件 允许在Android应用中嵌套显示Web内容 Android WebView的技术原理涉及到使用WebKit引擎来渲染Web内容 并提供一系列API和回调函数 使得开发人员可以控制和定制Web
  • 一文让你了解UI自动化测试

    测试都起什么作用 是项目的保险 但不是项目的救命草 测试无实际产出 但作用远大于实际产出 测试是从项目维度保证质量 而不是测试阶段 UI自动化 下面简称自动化 基于UI进行自动功能测试 以Web端作为例子 一般的UI功能自动化都是基于HTM
  • 15:00面试,15:06就出来了,问的问题有点变态。。。

    从小厂出来 没想到在另一家公司又寄了 到这家公司开始上班 加班是每天必不可少的 看在钱给的比较多的份上 就不太计较了 没想到9月一纸通知 所有人不准加班 加班费不仅没有了 薪资还要降40 这下搞的饭都吃不起了 还在有个朋友内推我去了一家互联
  • Web自动化测试 —— capability参数配置

    一 capability概述 capability是webdriver支持的标准命令之外的扩展命令 配置信息 配置web驱动属性 如浏览器名称 浏览器平台 结合selenium gird完成分布式 兼容性测试 官网地址 https www
  • 一文让你快速写出高效的软件测试用例

    前言 编写测试用例的目的就是确保测试过程全面高效 有据可查 但要编写出高效的测试用例 需要搞清楚什么是测试用例 以及如何编写出高效的测试用例 接下来将从以下几个部分来进行展开 1 什么是测试用例 2 如何编写测试用例 3 软件测试学习资源分
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • Airtest自动化测试工具

    一开始知道Airtest大概是在年初的时候 当时 看了一下官方的文档 大概是类似Sikuli的一个工具 主要用来做游戏自动化的 通过截图的方式用来解决游戏自动化测试的难题 最近 移动端测试的同事尝试用它的poco库来做自动化 看样子还不错
  • 服务器中E5和I9的区别是什么,如何选择合适的配置

    随着科技的进步 服务器处理器的性能在不断攀升 其中 Intel的E5和I9系列处理器在业界具有广泛的影响力 而当我们在选择服务器的时候会有各种各样的配置让我们眼花缭乱不知道该怎么去选择 下面我跟大家分享一下E5跟I9有什么区别 方便我们在选

随机推荐

  • Python编程:从入门到实践(基础知识)

    第一章 起步 计算机执行源程序的两种方式 编译 一次性执行源代码 生成目标代码 解释 随时需要执行源代码 源代码 采用某种编程语言编写的计算机程序 目标代码 计算机可执行 101010 编程语言分为两类 静态语言 使用编译执行的编程语言 C
  • DEVOPS 持续部署的例子:IMVU

    持续部署的例子 IMVU IMVU是一家社交娱乐公司 它的产品允许用户以一种3D阿凡达式的体验互相连接起来 本节内容改编自一位IMVU工程师所写的博客 IMVU采用了持续集成 开发人员尽早提交并经常提交 每次提交都触发测试套件的执行 IMV
  • 面向对象编程---基于java控制台的高校教材管理系统课设

    功能要求 1 实现出版社 教材类型的管理 2 实现教材的订购管理 3 实现教材的入库管理 4 创建规则 实现教材的书号必须满足以ISBN开头 后跟10个数字 比如ISBN7302120363 5 创建触发器 实现教材入库和出库时自动修改库存
  • 为什么云监控、云产品流量监控中的流量数据和DDoS防护的流量监控数据有差异?

    一般情况下 DDoS防护的流量监控数据大于您在云监控或具体云产品数据页面看到的流量数据 示例 假设您的ECS实例遭受了DDoS攻击 触发流量清洗 您收到DDoS原生防护基础版的清洗通知 触发清洗时的流量为2 5 Gbps 但是 您在云监控中
  • 总结 BurpSuite 插件 HaE 与 Authz 用法!!!

    HaE与Authz均为BurpSuite插件生态的一员 两者搭配可以避免 越权 未授权 两类漏洞的重复测试行为 适用于业务繁杂 系统模块功能多的场景 两个插件都可以在store里安装 安装完后 点击Filter Settings勾选Show
  • 【工作流Activiti】了解工作流

    1 什么是工作流 工作流 Workflow 就是通过计算机对业务流程自动化执行管理 它主要解决的是 使在多个参与者之间按照某种预定义的规则自动进行传递文档 信息或任务的过程 从而实现某个预期的业务目标 或者促使此目标的实现 通俗来讲 就是业
  • 【工作流Activiti】Activiti的使用

    1 数据库支持 Activiti 运行必须要有数据库的支持 支持的数据库有 mysql oracle postgres mssql db2 h2 2 Activiti环境 我们直接在当前项目 guigu oa parent做Activiti
  • python 基础

    Python 基础 部分信息参考 菜鸟教程 文章目录 Python 基础 介绍背景 环境搭建 下载 win下 Linux下
  • 超星学习通《大学生创新基础》 答案

    1 1 1 多选题 具有高创造性个体的人格特征是 ACBD A 独立性 B 自信 C 对复杂问题感兴趣 D 冒险精神 2 多选题 创新型人才的特点是 ABD A 具有创新精神和创新能力 B 个性灵活 开放 C 力求稳妥 拒绝冒险 D 精力充
  • 绝对干货!自动化测试PO设计模式的进阶实现(附源码),适合想提升编码能力的测试同学

    本文阅读的前提 同学们知道如何进行Selenium自动化测试并了解什么是PO设计模式 对于代码基础较弱的测试同学希望多读几次文章并上手操作 这篇文章看懂后 大家的编码能力就会进步了 代码哪里不懂欢迎留言 PO模式的设计问题 在前面的文章 无
  • [MM32硬件]搭建灵动微MM32G0001A6T的简易开发环境

    作为学习单片机的经典 自然是通过GPIO点亮LED 或者是响应按钮的外部中断例程 这我们看看SOP8封装的芯片MM32G0001A6T得引脚 除了VDD和GND固定外 我们可以使用PA14 PA1 PA13 PA15 PA2 PA3这六个G
  • SQL语句整理二--Mysql

    文章目录 知识点梳理 1 mysql 中 in 和 exists 区别 2 varchar 与 char 的区别
  • 有没有免费好用的进销存管理系统?

    有没有免费好用的进销存管理系统 要 好用 还要 免费 这样的进销存系统选型策略 到最后是 一箭双雕 还是 鱼与熊掌不可兼得 呢 让我们从好用和免费开始 慢慢分析 免费和好用能共存吗 怎么才算是好用的进销存系统 推荐一款好用的 订阅制付费的系
  • 第六章--- 实现微服务:匹配系统(下)

    0 写在前面 这一章终于完了 但是收尾工作真的好难呀QAQ 可能是我初学的缘故 有些JAVA方面的特性不是很清楚 只能依葫芦画瓢地模仿着用 特别是JAVA的注解 感觉好多但又不是很懂其中的原理 只知道要在某个时候用某个注解 我真是有够菜的
  • React中渲染html结构---dangerouslySetInnerHTML

    dangerouslySetInnerHTML 胡子 语法绑定的内容全部作为普通文本渲染 渲染html结构基于 dangerouslySetInnerHTML dangerouslySetInnerHTML 是 React 标签的一个属性
  • 漏洞复现-某友CRM系统某接口存在任意文件读取(附漏洞检测脚本)

    免责声明 文章中涉及的漏洞均已修复 敏感信息 均已做打码处理 文章仅做 经验分享 用途 切勿当真 未授权的攻击属于非法行为 文章中 敏感信息 均已做多层打马处理 传播 利用本文章所提供的信息而造成的任何直接或者间接的后果及损失 均由使用者本
  • 为啥都说信息安全缺人,但招聘时招安全的却不多?

    为什么会形成这样一个扭曲的状况 因为我们现在说 信息安全缺人 一般是指 缺口 很大 而不是指 需求 很大 比如某小型 云服务 供应商 一共也就大概几百台物理机器 每隔四五个月才喊人来手动升级一下系统 打打补丁 要是补丁打得不及时导致用户被黑
  • Python 如何在测试中使用 Mock

    Mock概念 mock 的意思是模拟 也就是模拟接口返回的信息 用已有的信息替换它需要返回的信息 从实现对所依赖的模块的测试 一般有两种场景 前端对后端接口的 mock 后端服务之间的测试中涉及的mock 常常发生在单元测试的时候 前端mo
  • 漏侧是能力问题?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读1 9k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 聊聊Compose框架在UI测试自动化中的优点及示例

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读1 9k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自