| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> 9个从零开始的B端产品自动化测试实践 -> 正文阅读 |
|
[开发测试]9个从零开始的B端产品自动化测试实践 |
经过多年发展,自动化测试已成为敏捷测试中持续测试的重要手段。作为一款提供企业数字化协同服务的产品,知微产品研发团队在接口自动化测试上摸爬滚打多年,总结出了一套适合B端企业级软件小型团队的自动化测试实践,包括如下9点: 本文将全面复盘知微团队这些年做自动化测试的历程,从初次建设自动化开始,分析我们遇到的问题,改进思路和实践总结。 1 从专岗到测试全员自动化 时间回到刚开始建设自动化时,我们做自动化测试的初衷,是由于版本节奏快、系统功能多、人力资源有限,需要在有限人力前提下,尽可能的保障系统质量——只有做自动化测试才能达到目标。因此,我们决定抽出测试人员来专门做自动化建设。 建设初期,我们发现了几个问题:
上述可以总结为自动化测试专岗的问题。为了改善这一问题,我们动员了测试全员进行自动化建设。这并不是说全部测试都变成只做自动化测试,而是全部测试都参与到研发过程,参与功能测试、自动化测试。 这里需要先介绍我们使用的自动化框架:Gauge。这是一个开源的BDD自动化框架,简单灵活,基于MarkDown格式,跨平台、跨语言、插件化的框架。我们底层使用Python语言进行关键字的开发,用关键字组合成一个个场景案例:
Python语言对于无编程基础的人员来说入门相对简单,Guage这种关键字形式的自动化框架,是一种前期积累后期收益框架,只要编写好关键字,各类场景只需要通过关键字组合就能达成目标,是一种高效的自动化形式。通过对其他测试成员的培训,测试全员都参与到了自动化建设中。 功能测试人员怎么看自动化测试 业务知识的挑战 写自动化测试案例的时候,先从不需要依赖其他模块的简单的功能开始写起,或者可以从目前已有依赖的案例写起;在比较熟悉了之后,就可以结合当前正在进行功能测试的用户故事编写自动化测试案例了。 关于Python语言 Python是一个入门门槛较低的代码语言,加之之前有过代码基础,以及对于测试人员来说,Python的使用程度不需要太深,就可以先直接开始写关键字方法。快速上手,可以先照猫画虎,复刻他人的框架后,再根据实际情况进行修改。 Gauge框架和Markdown写法 刚开始接受培训时,确实是云里雾里的,但是当接触Markdown之后,发现这是一个极其容易上手的东西,只要关键字写好后,写自动化案例也变成了一件很简单的事情。 2 自动化后,案例稳定性却变差了? 随着测试全员自动化、案例数量增加,每天执行测试耗时显著增加,检查测试结果时,我们发现测试案例稳定性变差了,每次都要花费大量精力排查问题。主要表现为以下几点: 我们对这些问题逐个进行了分析。 针对问题1和2,起初,统一的策略就是在不稳定环节增加等待关键字,例如新建完卡片后,等待X秒再验证卡片是否创建成功。但多次实践后,我们发现这样依然无法保证稳定性。因此,我们引入了案例重试机制:
针对问题3-5,我们引入了造数概念,对案例的数据准备进行了改造:
案例主体只关注测试主要目标 由于知微是一个高度配置化的产品,测试一个场景前,需要先把整个测试场景配置出来,所以才出现测试准备过长的现象,但这些测试准备过程,并不是案例本身关注的主体,案例主体只关注要测试的主要目标。 例如,在一张看板上新建卡片,验证卡片数据是否正常。这个场景只关心在看板上的新建卡操作,并不关心看板是怎么来的。因此,我们将测试案例中测试准备过程剥离出案例,简化成一个编写业务数据文件(JSON文件)的过程,业务数据文件里,只需要编写知微上的用户界面输入内容。然后,我们编写了一套将JSON文件转化为系统数据的造数代码,这样简化了测试数据的准备。这一过程我们称之为造数阶段,至此,我们将测试分为造数执行阶段、测试执行阶段2个过程。 此外,我们还按照功能模块划分了案例文件,整合测试数据到数据文件内,提高数据的可重用性,减少同类案例里的测试数据准备阶段,以减少测试案例的步骤、减少执行时长,提高案例执行的稳定性。 通过以上方式,我们解决了测试执行耗时过长、稳定性差的问题,让自动化测试提供了一个可信任的测试结果,使之能够持续的发挥其应有的责任。 3 让开发也能无压力编写自动化案例 经历了前两个阶段的积累,自动化测试逐渐覆盖了测试人员的大部分回归场景,将测试人员从繁重的手工回归测试中释放出来。 但随着团队规模变大、开发人员增多,测试人员在自动化投入上又开始变得不足,赶不上版本节奏,自动化负债开始上升。在测试人员不增加的情况下,我们引入开发人员来编写自动化,在这个过程中主要发现了两个问题:
为此我们展开了自动化代码的又一轮重构,关键字重构。 关键字的设计尤为重要,其设计是否合理会影响案例的可读性、关键字是否易懂、易使用。什么是良好的关键字设计——
关键字重构后,测试案例更易懂了。我们还整理了相关使用手册、说明文档,对开发人员进行了一系列相关的培训,包括:
经过了一段时间的开发、测试协作,开发人员也都具备了编写自动化测试案例的能力。随后,我们将功能开发完成进行了重新定义:开发人员完成功能开发、且编写了HappyPath的自动化测试案例后,才算完成开发,并以此作为测试准入的标准,在桌面检查的时候进行核实。 开发人员如何看待自己写测试案例 Gauge框架是否友好,容易使用? 使用起来很简单,之前没有BDD相关经验也可以快速上手。 写接口自动化案例是否对代码质量有帮助? 对于技术债务,有自动化接口测试的情况下,可以放手重构。 开发写接口自动化作为测试准入,是否对质量有帮助? 明显的作用是,减少了进入测试阶段后,低级错误的发生,也减少了之前正常的功能出现缺陷的情况。 同时,我们也开始收集后端各服务自动化覆盖率信息,以覆盖率趋势评估各微服务的测试情况,并和开发定期评审服务的覆盖率信息,整理哪些场景未覆盖,以进一步提高代码覆盖率和业务覆盖场景。 图 / 知微各服务的自动化覆盖情况 4 优化流水线执行耗时,快速反馈 从有自动化案例开始,我们就将自动化案例集成到持续集成流水线上,由原来的30分钟,执行耗时一直随案例数的增加而增加,所以,我们一直都是每天只在晚上执行1次。为了能让自动化提供更快速的反馈,我们希望每次持续集成都能全量执行测试,以提供全面的质量反馈。 但是,如果持续集成流水线执行耗时太长,会导致流水线执行频率低、无法提早反馈问题。而且,执行频率低,每次执行所包含的代码提交会比较多,也不利于在出现问题时定位相关代码。 只有做到尽可能的小批量提交编译、测试、反馈,才能更好的保障代码质量。为此,我们重点优化了流水线各节点的耗时,也从整体流程上优化了整体流水线的执行耗时。 单点优化:我们重点优化了编译、执行测试的执行时长
流水线整体优化: 调整前(1条流水线-耗时90分钟) 每次集成流水线:
调整后(分2条流水线) 每日凌晨定时造数流水线:
每次集成流水线(耗时30分钟):
找到合适的流水线执行耗时 通过以上优化调整,持续集成流水线的耗时有了巨大的改善,执行单次耗时从原先90分钟变为30分钟,加快了持续集成的质量反馈速度。 但执行耗时却并非越短越好。在经过一段时间实践后,我们发现30分钟的间隔,开发人员修复上一次失败都还未验证提交完成,就又有下一次的失败。因此,我们逐渐调整为1小时执行一次持续集成流水线。 由于每次持续集成流水线都执行了全量自动化案例,我们也将案例分配相关开发负责人,这样每次报告中的失败案例由对应案例负责人查看,并作为日常优先任务。避免了之前由统一人员查看带来的时间浪费。 自动化实践是一个积累的过程,只有当自动化案例积累到一定程度,才慢慢体现其守护质量的作用,在过去的一年里,不管是增强原有功能还是重构旧代码,自动化测试守护都起着至关重要的作用,在项目代码的不断迭代过程中,自动检测出这过程中引入的缺陷,解决了开发人员重构代码的后顾之忧,减少了测试人员的工作量,大大提升知微产品的稳定性。 新的一年里,我们希望能够继续完善自动化体系,以代码覆盖率为指导,完善测试分层体系,补充各服务的单元测试。同时持续监控测试案例的MTTR,保证自动化案例的及时修复,避免破窗效应。坚持使用自动化来守护知微,为知微产品保驾护航。 为了让大家更好的理解自动化测试的相关实践,本周四(2月24日)晚8点,我们还将组织一场自动化测试实践主题的直播,感兴趣的同学,可以点击以下视频号直播预约,会在开播前自动提醒。 本文作者周小宁,Agilean知微产品团队测试负责人 推荐阅读 01 02 03 04 |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/18 2:24:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |