软件质量保障全流程(上)

发表于:2020-12-29 10:15

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:朱志勇    来源:博客园

  一. 软件质量保障流程
  1.1 微服务产品的特点
  微服务架构下,一个大型复杂软件系统不再是一个单体,而是一系列相互独立的微服务,特点鲜明:
  ·每个服务独立,开发技术栈独立
  ·每个服务可以独立开发、部署、发布
  ·服务之间通过轻量级通信机制沟通,常用的是 RESTful API
  Micro Services
  1.2 微服务产品测试的痛点
  由于每个服务都有对外暴露的接口,而且服务之间还可能互相依赖,直接导致:
  ·接口数量翻倍增长
  ·测试场景翻倍增长
  这使得在敏捷交付的模式下,测试工作挑战巨大。如何能在「周」「天」甚至「小时」的发布周期下,进行高效的测试,是微服务架构产品的测试中常常思考的问题。
  1.3 软件质量保障全流程
  1.3.1 角色
  在产品的发布周期中,所有角色的联系相当紧密。每个角色有自己不同的职责,但最终都是为产品质量负责。
  产品经理 —— 管理需求和项目计划
  研发 —— 项目任务开发工作
  研发负责人 —— 研发团队管理及代码质量管控
  测试 —— 软件质量保障
  运维 —— 应用部署和运行管理
  除了按照「需求->编码->测试→发布」常规的顺序交流外,不同角色之间也随时交流信息。
  DevOps Team
  1.3.2 DevOps
  无论是外部需求,还是内部反馈,都会被一一记录,供下一轮迭代评审。每一次迭代之中包含着无数局部迭代,由大家一起评审需求变更和承诺交付。
  DevOps Loop
  1.3.3 落地全流程
  整个产品质量保障全流程从需求开始,一直到交付上线,全流程如下:
  需求评审 → 编码 → 单元测试 → 代码扫描 → 构建镜像 → 部署测试环境 → 接口自动化测试 → 端到端自动化测试 → 提测 → 手动测试 → 发布 → 上线
  利用 Jenkins 对接 JIRA、Git、SonarQube、Registry 等各种工具实现 CI/CD,让工程师不再把时间和精力花费在构建、测试环境搭建和自动化测试执行这些重复性操作上。
  Process
  通过提交代码自动触发流水线,进行单元测试,然后通过 Sonar-Scan 进行静态代码扫描,达到要求后会构建容器镜像,构建完成会自动部署测试环境,并触发自动化测试,测试通过后即可打上标签进行正式提测,在此之前的阶段都是通过自动触发,工程师只要把主要精力均放在结果上,待测试验证符合要求后,镜像才会最终发布并上线。
  二. 集成测试
  2.1 接口
  接口测试通常分三步走:
  准备测试数据 → 对被测接口发起请求 → 验证返回结果
  测试数据是一个非常重要的输入,在接口不变的情况下,利用大量的数据驱动测试,从而实现较高的覆盖率。
  通常我们使用命令行工具 cURL 或者图形化界面工具 Postman 对接口发起请求,无论哪个工具,都需要对返回结果进行断言以判断是否符合预期。
  验证返回结果不仅仅是验证返回的状态码,还要验证返回值,返回值的准确性则需要通过查询数据库等方法进行验证。
  另外,我们通过 Swagger 来管理接口文档,以力求不同的开发人员发布统一标准的接口文档,供大家使用。
  2.2 接口自动化
  通常,接口是提前定义的,且不轻易变化,比较稳定,因此测试工程师可以根据定义好的接口文档,在开发编码的同时,实现接口自动化测试脚本,提高未来的测试效率,并且可以实现测试前置。
  我们基于 Pytest 框架以及 Swagger 3.0 标准封装改造出一款轻量级接口自动化测试框架,自动解析接口文档并且生成能被 Pytest 驱动的测试用例结构,工程师只花精力编写测试数据。
  Mini API Test Framework
  接口自动化的实现本不难,主要难在测试数据的准备和返回值的验证。
  每次都使用相同的测试数据一定是不合适的,因此,测试数据需要有一定的自动生成能力。
  而返回值有很多是测试过程中才能生成得知的,如 UUID ,这类数据的验证需要实时去数据库获取。
  2.3 端到端
  模拟用户场景,进行基于消费者契约的业务主流程端到端测试,覆盖用户触发频率最高的操作。比如以电商举例:
  登录 → 搜索产品 → 选择 → 加入购物车 → 提交订单 → 确认支付 → 收货确认 → 添加评论 → 搜索订单
  这种测试通常可以在时间有限的情况作为最基础的验证,以确保没有阻塞性问题,保证用户体验。
  但一个产品的业务主流程通常不会发生太大变化,是一项不断重复的工作,因此,我们优化了测试操作流程,从而实施自动化。
  2.4 UI 自动化
  无论是 PC 端 Web UI 还是移动端应用 UI,现在都有比较成熟的自动化测试解决方案。对于 Web UI,我们期望其能够在容器中执行,所以选择了基于 Python 的 Selenium 调用 Headless Chrome「无头浏览器」,采用以关键字驱动的 Robot Framework 框架实现自动化测试。
  WebUI 的操作主要是在页面输入和点击,因此我们采用 PageObject 设计模式封装页面元素,以此达到灵活使用关键字的拼装实现产品业务页面操作。
  RobotFramework 伪代码
  当页面出现错误,或非预期结果时,除了打印详尽的日志,还会自动截图插入到 HTML 的测试报告中。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号