脑性瘫痪疾病

首页 » 常识 » 预防 » 软件质量保障全流程实践分享
TUhjnbcbe - 2021/3/7 4:09:00

作者:Will,曾担任大型全球分布式存储产品测试交付负责人,现任一家容器平台解决方案公司担任DevOps产品测试负责人。

一.软件质量保障流程1.1微服务产品的特点

微服务架构下,一个大型复杂软件系统不再是一个单体,而是一系列相互独立的微服务,特点鲜明:

每个服务独立,开发技术栈独立

每个服务可以独立开发、部署、发布

服务之间通过轻量级通信机制沟通,常用的是RESTfulAPI

MircroServices

1.2微服务产品测试的痛点

由于每个服务都有对外暴露的接口,而且服务之间还可能互相依赖,直接导致:

接口数量翻倍增长

测试场景翻倍增长

这使得在敏捷交付的模式下,测试工作挑战巨大。如何能在「周」「天」甚至「小时」的发布周期下,进行高效的测试,是微服务架构产品的测试中常常思考的问题。

1.3软件质量保障全流程1.3.1角色

在产品的发布周期中,所有角色的联系相当紧密。每个角色有自己不同的职责,但最终都是为产品质量负责。

产品经理——管理需求和项目计划

研发——项目任务开发工作

研发负责人——研发团队管理及代码质量管控

测试——软件质量保障

运维——应用部署和运行管理

除了按照「需求-编码-测试→发布」常规的顺序交流外,不同角色之间也随时交流信息。

DevOpsTeam

1.3.2DevOps

无论是外部需求,还是内部反馈,都会被一一记录,供下一轮迭代评审。每一次迭代之中包含着无数局部迭代,由大家一起评审需求变更和承诺交付。

DevOpsLoop

1.3.3落地全流程

整个产品质量保障全流程从需求开始,一直到交付上线,全流程如下:

需求评审→编码→单元测试→代码扫描→构建镜像→部署测试环境→接口自动化测试→端到端自动化测试→提测→手动测试→发布→上线

利用Jenkins对接JIRA、Git、SonarQube、Registry等各种工具实现CI/CD,让工程师不再把时间和精力花费在构建、测试环境搭建和自动化测试执行这些重复性操作上。

Process

通过提交代码自动触发流水线,进行单元测试,然后通过Sonar-Scan进行静态代码扫描,达到要求后会构建容器镜像,构建完成会自动部署测试环境,并触发自动化测试,测试通过后即可打上标签进行正式提测,在此之前的阶段都是通过自动触发,工程师只要把主要精力均放在结果上,待测试验证符合要求后,镜像才会最终发布并上线。

二.集成测试2.1接口

接口测试通常分三步走:

准备测试数据→对被测接口发起请求→验证返回结果

测试数据是一个非常重要的输入,在接口不变的情况下,利用大量的数据驱动测试,从而实现较高的覆盖率。

通常我们使用命令行工具cURL或者图形化界面工具Postman对接口发起请求,无论哪个工具,都需要对返回结果进行断言以判断是否符合预期。

验证返回结果不仅仅是验证返回的状态码,还要验证返回值,返回值的准确性则需要通过查询数据库等方法进行验证。

另外,我们通过Swagger来管理接口文档,以力求不同的开发人员发布统一标准的接口文档,供大家使用。

2.2接口自动化

通常,接口是提前定义的,且不轻易变化,比较稳定,因此测试工程师可以根据定义好的接口文档,在开发编码的同时,实现接口自动化测试脚本,提高未来的测试效率,并且可以实现测试前置。

我们基于Pytest框架以及Swagger3.0标准封装改造出一款轻量级接口自动化测试框架,自动解析接口文档并且生成能被Pytest驱动的测试用例结构,工程师只花精力编写测试数据。

MiniAPITestFramework

接口自动化的实现本不难,主要难在测试数据的准备和返回值的验证。

每次都使用相同的测试数据一定是不合适的,因此,测试数据需要有一定的自动生成能力。

而返回值有很多是测试过程中才能生成得知的,如UUID,这类数据的验证需要实时去数据库获取。

2.3端到端

模拟用户场景,进行基于消费者契约的业务主流程端到端测试,覆盖用户触发频率最高的操作。比如以电商举例:

登录→搜索产品→选择→加入购物车→提交订单→确认支付→收货确认→添加评论→搜索订单

这种测试通常可以在时间有限的情况作为最基础的验证,以确保没有阻塞性问题,保证用户体验。

但一个产品的业务主流程通常不会发生太大变化,是一项不断重复的工作,因此,我们优化了测试操作流程,从而实施自动化。

2.4UI自动化

无论是PC端WebUI还是移动端应用UI,现在都有比较成熟的自动化测试解决方案。对于WebUI,我们期望其能够在容器中执行,所以选择了基于Python的Selenium调用HeadlessChrome「无头浏览器」,采用以关键字驱动的RobotFramework框架实现自动化测试。

WebUI的操作主要是在页面输入和点击,因此我们采用PageObject设计模式封装页面元素,以此达到灵活使用关键字的拼装实现产品业务页面操作。

RobotFramework伪代码

当页面出现错误,或非预期结果时,除了打印详尽的日志,还会自动截图插入到HTML的测试报告中。

三.测试环境管理3.1构建镜像

我们所有的微服务均由流水线通过Docker构建出容器镜像,推送到独立的镜像仓库中。

Harbor

3.2测试环境搭建

为了减少测试过程中脏数据的干扰,有些服务器是需要全新安装的。

除此之外,通常产品都是支持多种平台的,因此也需要在多平台上进行安装测试,并且需要按照交付文档中的安装方法进行验证。

3.3测试环境自动化运维

考虑到迭代周期短,应用场景复杂,准备全套测试环境还是需要花费不少精力,所以我们采用自动化的方式来管理和部署测试环境,并且VM和Docker容器并存。

对于相对稳定的测试用第三方服务器,直接使用VM搭建,不需要特别的维护;一些用于产品的中间件或需要常常清理的测试用服务器,除了使用ESXiServer的VM快照回滚,还会结合容器化部署,测完即删。

这些操作都通过自动化脚本执行,并且由流水线根据需求自动触发。

四.持续集成4.1单元测试

单元测试是产品质量检验的第一道关卡,其重要性和高效性不言而喻。单元测试做得好,会大大降低返工成本。单元测试除了

1
查看完整版本: 软件质量保障全流程实践分享