微服务的流程自动化测试设计 | 叶婉婷

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 测试人员在流程微服务中如何简单高效完成开发测试任务?本期中,讲师将结合自身流程平台自动化测试实践的经验,梳理出在微服务架构的数字化企业云平台中,该如何完成流程微服务的自动化测试,并且提供高质量的上线保障。
3668e0f9d20a9122f0629ac2a3aafd53d2e84a37
大家好,我是来自普元的叶婉婷。今天由我来和中生代技术的朋友分享一下流程微服务的自动化测试。 f4d5df347258c5d869ec872fc6eb76806d4f006b首先,我给大家分享一下普元多年实践的自动化测试过程与方法; 2433a826c05a7f1441873229863720f41a5b8c5d阐述一下我们的测试理念:测试一切、测试驱动开发、测试自动化; 1)测试一切文档、配置、环境、发布包,一切皆代码,这个很好理解,我不再赘述; 2)测试驱动开发测试提前,敏捷协作,测试用例同步开发; 3)测试自动化多种测试技术能力、组件化开发、统一管理,不间断测试执行;为了实现测试驱动开发、测试自动化,我们认为需要以下四个要素: 1)敏捷协作的过程; 2)测试设计方法; 3)全栈测试团队; 4)自动化测试服务; 52179bb78f95ea7b01ad87f7752a3fd2623335bc
普元多年来在产品研发过程中,一直践行敏捷协作的RDT过程,在新一代云平台项目中,我们分为若干RDT小团队,每个团队负责一个或多个领域系统,以实现不同的用户场景;在每个RDT小团队中,采用需求、开发、测试协同并行工作模式;随着产品需要在公有云上部署运维,我们做了一些改进,运维组参与分析用户场景、需求设计测试评审、反馈运维遇到的问题,而且,运维组自身也作为RDT团队直接负责统一监控中心的需求定义和设计开发; 6b47f73c983ace2da1e437411e1e63837bdb30cd那么为什么在敏捷协作的过程中,就能将测试尽量提前呢?从上面过程中我们可以看到,在计划阶段,每个RDT团队对用户场景都有了统一认识,那么在接下来的每个迭代开发中,定义需求规格、设计概念模型/原型界面/API定义/数据模型的同时,测试可以并行进行测试对象分析、测试点分析、测试数据和测试组件设计,并且强调RDT的相互评审;基于这些成果,开发进行编码的同时,测试就可以并行进行测试用例的开发,并且测试用例开始不间断的执行,自动化测试相比传统开发过程大大提前,通过测试尽量提前达到测试驱动开发的目标; 090576ce1df3030c0df14d5c80363bbbedfbdf5a自动化测试毕竟不同于手工用例,我们从四个方面定义了自动化测试的设计原则与方法: 1)易管理性统一规划、统一版本控制的规范要求; 2)易实现性采用分层设计,测试基础服务层、测试能力支撑层、测试组件层、测试用例 层,支持多种技术的测试能力,测试组件复用,用例专注业务逻辑; 3)易维护性组件与用例分离、区分变化与不变、测试用例原则上不互相依赖、测试数据 容易维护; 4)易定位性测试用例独立、低复杂度、要求断言信息的准确性; 5e9ab8900d2bd76148ecd0fb49683b0b545eaa7f自动化测试分层设计对测试团队提出了更高的要求,也就是要求我们必须成为全栈测试团队,具备各层的能力:测试架构师负责总体设计、测试基础服务层,提供统一管理、统一调度的能力;领域技术专家负责测试能力支撑层,对各领域测试技术进行分析和选型,提供测试服务能力以及基础的技术组件;测试专家负责指导测试开发工程师进行测试方案设计、测试组件和用例的实现; b64389ce25b60e90784bb61728946b5395a6b951除了过程、方法、团队,自动化测试的落地最终还是需要依赖各种自动化测试服务的实现,我们也一直在做这方面的努力,并形成了产品化的自动化测试服务能力;除测试基础服务以外,我们没有选择从零开始,而是评估并引入好的开源技术和公司内部其他产品的可用技术,按照我们的自动化测试设计原则和方法进行相应的改造;比如WebUI测试服务,我们选用了Selenium,为了适应我们的用例开发规范和易用性,我们对其接口进行了重新封装,形成我们的WebUI基础组件库;比如CI工具Jenkins1.x,由于我们产品多、每个产品版本也多,使用时间久了之后其任务管理界面简直就是灾难,任务的调用关系也非常不直观、难以维护,所以我们扩展实现了持续集成项目管理、图形化的持续集成任务流管理,以适应我们的需要;另外,像用例开发/调试,除了支持Java以外,我们还复用了普元的逻辑流图形化开发能力、组件库可视化管理能力,用例开发效率更高、更易维护; a688a8bac537f2ee34689365adc71e273c8acacb在企业级应用中,流程服务的测试一直面临诸多的问题,诸如:— 系统内部任何一个微小的变化,要上线测试;— 外部关联系统变化,引起的业务验证测试;— 如果流程作为一个公共的服务,一旦服务升级,所有业务系统都会有影响,所有业务系统全部都要验证。这些都会给测试造成巨大的工作量,不仅消耗过多的时间,还无法很好的保证质量。当这些问题投射到云环境与分布式架构中,所面临的复杂度与解决难度的升级不言而喻。 179ad43680f61b005b8e5b89f9d18d4851d6ae87如图所示,在基于微服务架构的数字化企业云平台中,流程是一类重要的微服务。我们正在尝试将流程微服务的测试自动化,并由DevOps平台高效的验证微服务的改变是否影响原先的业务,从而提供高质量的上线保障,让测试人员告别那些让人生无可恋的重复性操作。 5a86a1ef61f49affa34213a37e6ae61c275e4b21基于微服务的自动化测试的本质是通过数据的录制记录既有的测试过程,并通过案例固化过程中的全部测试数据,最终通过对案例的调用回放完成流程微服务测试的自动化。 572bc49002cfc57e8474f4fcc998070bd5d164cf流程微服务的自动化测试并非完全脱离手工测试,这里的自动化是建立初次手工测试的基础上的。第一次手工测试会在数据库中记录下所有的测试信息,我们将收集这些信息录制形成测试数据文件,根据每条流程实例录制一个测试数据文件。每个文件中包含:该流程实例运行过程中的所有相应请求/相应报文,该流程实例运行过程中的上下文变化,该流程实例的流转路径(活动+连线),该流程实例包含的子流程实例。 567b140afbed13978b42502a4bc21fa343d1dbdc在流程微服务的自动化测试里,我们会根据实际的接口调用来设计多个组件,这些组件放置于一个测试组件微服务中提供给测试人员使用,每个简单的组件都对应一个接口的请求报文。这就犹如搭积木,每个积木是一个简单的接口报文,多个积木搭在一起形成一个房子,即多个接口报文固定调用形成一个复杂组件。多个房子、花坛、汽车形成一个小镇,即多个简单组件和复杂组件结合在一起生成的最终一个“流程实例的自动化测试”案例。有了之前收集的数据文件,就是根据每个数据文件,选择积木的问题了,再根据数据文件给每个组件添加必要的参数,这样就形成了测试案例。在案例生成的过程中测试人员不需要编写任何代码! df140c9304297df39009d2fc66db9a56a75e2b89我们将统一测试平台门户设计为一类领域系统,可以上传我们的测试案例部署,选择案例点击执行即可。每个案例的运行其实就是相应手工测试的一次回放。案例执行完成会形成详细的测试报告,包含了成功、错误、异常的详细信息,案例统计图,以及案例执行时间。清晰明了地达成便捷测试。 f6876ba7d719172168848a8e23e237d08ef345c2 3f19f34e9c11a280c5db1800a39ac6e88ef9017c
流程微服务有时也会和其他微服务之间通信,往往测试环境中无法与其他微服务直接交互,这时候我们为了模拟流程微服务引擎与其他微服务交互过程,提供了一个服务挡板功能,服务挡板也是设计中的数字化企业云平台的一类领域系统,由api mock提供挡板能力,即用服务挡板替代生产上的微服务。(未来我们会详细介绍api mock相对于传统mock的优势) cafeb59948ba9ef7e97edf644082e21d66dac417当自动化测试进行到其他微服务交互时,流程微服务引擎向挡板发起请求,挡板响应请求,并动态拼写回调报文,当所有的回调报文完成之后,挡板通知测试引擎,测试引擎向流程引擎发送回调报文。 b1175ea3251702c595247f9cf50bdfc7c37f8649
对于测试案例,不仅需要模拟流程流转的服务接口过程,还需要验证流转过程中的参数正确性,所以需要验证组件来完成参数的确认。 1e2358315a96bb7f69cfd7a25e7391c4a38dbd3c
  • - 对比服务接口返回报文信息是否一致;
  • - 一个活动完成后循环等待后继活动是否激活;
  • - 一个活动完成后对比当前后继活动与历史测试数据中后继活动是否一致;
  • - 一个活动激活后对比当前活动产生的连线是否与历史测试数据中连线信息一致;
  • - 每当一个可能引起上下文改变的服务接口完成后,对比当前流程实例与历史测试数据中的上下文是否一致。
88a7eeb4a6875a3f3d63ad36f50629f201a56725
最后总结回顾一下,我们的测试理念:测试一切、测试驱动开发、测试自动化,以及为了实现这三点所需的四个要素:敏捷协作的过程、测试设计方法、全栈测试团队、自动化测试服务。有了适合自己的过程、方法、团队、工具的保障,自动化测试的实践自然能够水到渠成。以上就是本次分享的全部内容,感谢大家。

Q&A

Q1:自动化测试在非微服务架构和微服务架构的本质区别是?

A1 微服务自动化测试重要的一点就是服务间的交互。我们提供mock组件来模拟服务间调用,而传统的整体架构没有这种问题


Q2:有没有数据支撑,做自动化的数据度量?

A2 数据支撑指的是什么?我们在项目中跑4000的用例是没有问题的


Q3:哪些场景下不应该做自动化呢?

A3 做不做自动化测试主要看你的用例数量,重复执行率,以及自动化测试难度。当你觉得测试用例少,或者难度过大的时候不建议用


Q4:数据录制是采用什么方式存储和标识的呢?如何做到后续的复用和扩展?

A4 数据录制是用数据库记录初次手工测试产生的数据,以流程实例id为标识。我们开发的工具会根据流程实例id取出这些数据形成文件,即使数据库被清,根据文件可以再次生成用例。扩展了新的服务接口我们只要开发新的组件即可。


Q5:自动化测试有压力测试的模拟吗?

A5 暂时我们没有提供压力测试的自动化测试


Q6:请问提到的中间mock组件和美团技术博客分享的mock组件类似的功能吗,可以推荐下相关的mock开源组件吗?

A6:我们这里的mock组件就是用mock server模拟数据来进行服务间调用。这个组件是我们测试组件的概念。就是自己将mock调用方法封装成的一个组件。


分享者简介:叶婉婷, 普元信息 SOA 产品部高级软件工程师,现为普元微服务应用平台项目开发团队一员。在过去的两年参与了流程平台项目,主要负责 Eclipse 插件开发及自动化测试平台开发。爱好:旅游、电影、美食、游泳。


目录
相关文章
|
26天前
|
运维 监控 测试技术
自动化运维实践:CI/CD流程详解
【6月更文挑战第30天】CI/CD实践推动软件开发自动化,通过持续集成确保代码质量,自动部署提升交付速度。核心流程包括:代码管理(Git等)、自动化构建与测试、代码审查、部署。关键点涉及选择工具、测试覆盖率、监控及团队协作。采用CI/CD能减少错误,但需应对挑战,如工具选型、全面测试和团队沟通。
|
29天前
|
Java 测试技术 持续交付
自动化测试实践:从单元测试到集成测试
【6月更文挑战第28天】-单元测试:聚焦代码最小单元,确保每个函数或模块按预期工作。使用测试框架(如JUnit, unittest),编写覆盖所有功能和边界的测试用例,持续集成确保每次变更后自动测试。 - 集成测试:关注模块间交互,检查协同工作。选择集成策略,编写集成测试用例,模拟真实环境执行测试,整合到CI/CD流程以持续验证软件稳定性。 自动化测试提升软件质量,降低成本,加速开发周期,是现代软件开发不可或缺的部分。
|
11天前
|
测试技术 调度 微服务
微服务架构下的两类测试
【7月更文挑战第16天】微服务架构下的两类测试:流量录制回放测试和仿真环境测试
|
12天前
|
Kubernetes Cloud Native 持续交付
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
|
13天前
|
弹性计算 运维 Kubernetes
自动化运维的新篇章:容器编排与微服务架构
【7月更文挑战第14天】在数字化转型的浪潮中,企业对运维效率和系统可靠性的需求日益增长。本文深入探讨了自动化运维的最新趋势——容器编排和微服务架构,并阐述了如何通过这些技术提升运维效率、降低系统复杂性以及提高服务的可用性和可扩展性。文章不仅介绍了相关技术和工具的选择,还提供了实际案例分析,旨在为读者提供一套完整的解决方案框架,以适应快速变化的市场需求。
|
14天前
|
机器学习/深度学习 人工智能 自然语言处理
探索自动化测试的前沿:AI与软件测试的融合
在数字化浪潮中,软件测试作为确保产品质量的关键步骤,正迎来一场革命。本文将深入探讨人工智能(AI)如何革新传统软件测试流程,通过具体案例分析,揭示AI技术在提高测试效率、减少人为错误以及预测潜在缺陷方面的潜力。我们将一窥AI在自动化测试中的应用现状,并展望其对未来软件质量保障的影响。
|
16天前
|
前端开发 数据管理 测试技术
前端自动化测试
前端自动化测试
|
19天前
|
JavaScript 前端开发 测试技术
自动化测试在API测试中的深度应用与实践
【7月更文挑战第8天】自动化测试在API测试中的应用极大地提高了测试效率和质量,为软件的快速迭代和持续交付提供了有力保障。通过合理选择测试工具、制定清晰的测试计划并遵循最佳实践,我们可以充分发挥自动化测试的优势,为软件产品的稳定性和可靠性保驾护航。
|
21天前
|
网络协议 Shell Linux
软件开发常见流程之使用VNC登陆之后,无法使用指令下载自动化助手,客户大大还是很给力的
软件开发常见流程之使用VNC登陆之后,无法使用指令下载自动化助手,客户大大还是很给力的
|
25天前
|
测试技术 API 持续交付
【Python自动化测试】文章探讨了Python在测试领域的关键作用,分为三部分
【7月更文挑战第2天】【Python自动化测试】文章探讨了Python在测试领域的关键作用,分为三部分:1) 自动化测试的重要性与Python的易用性、库支持、跨平台和社区优势;2) Unittest作为标准测试框架的基础用法,及Pytest的灵活性与强大功能;3) 实践中包括Selenium的Web UI测试、Requests的API测试,强调测试隔离、持续集成等最佳实践。Python助力高效稳定的软件测试。
27 2

热门文章

最新文章