什么测试左移,又右移?你到底说什么?

1,955 阅读5分钟

测试左移(Test Shift Left)和测试右移(Test Shift Right)是软件开发中的策略,它们重新定义了传统软件测试的时机,强调更早或更晚地介入测试活动,以提高软件质量和开发效率。

测试左移(Shift Left Testing)

何时进行: 测试左移强调将测试活动提前到软件开发生命周期的早期阶段,通常是在编码阶段甚至是设计阶段就开始进行。这意味着在开发人员编写代码的同时或之后不久就执行单元测试、静态代码分析、代码审查、持续集成测试等,以便更快地发现并修复问题。

目的:

  • 通过及早发现缺陷,减少后期修复的成本和时间消耗。
  • 加速反馈循环,帮助开发者更快了解代码质量。
  • 促进开发和测试团队的紧密合作,建立质量共担的文化。

测试右移(Shift Right Testing)

何时进行: 测试右移则是将测试活动延伸到发布后,包括在生产环境中的监控、用户体验测试、A/B测试、运行时的性能和安全测试等。这通常涉及使用真实用户数据和实际运行环境来验证应用的性能和行为。

目的:

  • 确保软件在真实的用户环境中的表现符合预期。
  • 收集用户反馈,评估功能的实际效果和用户体验。
  • 检测并修复发布后可能出现的生产环境特有的问题,如性能瓶颈、兼容性问题或安全性漏洞。

测试左移是为了更早发现问题而提前测试,通常在编码和开发过程中;而测试右移是为了验证在真实环境下的应用表现,并持续迭代改进,这发生在部署之后。两者结合使用,可以构建更加健壮和用户友好的软件产品。

要实践测试左移策略,我们可以通过在软件开发生命周期早期阶段就集成自动化测试和持续集成(CI)流程。下面的示例展示了如何利用Python语言和unittest库来进行单元测试,以及配合Jenkins(一个知名的CI/CD工具)设置自动化测试流程。

单元测试示例(Python unitttest)

首先,假设我们有一个简单的计算模块calculator.py,我们需要为它创建单元测试。

calculator.py:

def add(x, y): return x + y def subtract(x, y): return x - y

对应的单元测试文件test_calculator.py:

图片.png

Jenkins中设置持续集成

为了实现测试左移并自动化测试流程,你需要在Jenkins中配置一个新Job:

  1. 安装必要插件:在Jenkins服务器上,安装“Pipeline”、“Git plugin”和其他可能需要的插件。

  2. 新建Pipeline Job:在Jenkins界面,选择“新建项目” > 选择“Pipeline”。

  3. 配置Pipeline

    • 在配置页面,“Pipeline”部分选择“Pipeline script from SCM”,在SCM部分配置你的Git仓库URL。
    • 示例的Jenkinsfile可能如下:

图片.png 这个Jenkinsfile定义了一个流水线,它将运行上面创建的测试脚本test_calculator.py

  1. 保存并运行Job:保存配置后,手动触发这个Job或者设置触发规则(如GitHub Webhook)来实现代码提交后的自动化测试。

通过以上步骤,每次代码变更后,Jenkins都将自动检测到更新,执行单元测试,并且即时给出反馈。这种方式有效地实现了测试左移,使问题在更早的阶段就被发现并解决,降低了集成难题,并提高了开发效率。

测试右移是一种确保软件在生产环境中表现良好的实践,它要求在部署之后继续进行系统级测试、监控和验证,以捕获那些仅在生产环境或真实用户交互中才会出现的问题。这种策略通常涉及使用监控工具、性能测试、A/B 测试、及用户反馈收集等方式。以下是一个基于这一理念的实例过程:

使用实例:生产环境性能和功能验证

环境准备:部署到生产环境前,确保有以下基础设施和工具到位:

  • 日志管理系统:如 ELK Stack(Elasticsearch, Logstash, Kibana),用于收集和分析日志。
  • APM(Application Performance Management)工具:如 New Relic 或 Prometheus+Grafana,用来监控应用性能。 - 错误跟踪系统:例如 Sentry,帮助快速识别生产环境中的异常。
  • Chaos Engineering工具:如 Gremlin 或 Chaos Monkey,故意引入故障以评估系统韧性。 实施步骤
  1. 部署并启用金丝雀发布: 使用蓝绿部署或金丝雀发布策略,先将新版本推送到一小部分用户中,这一步是测试右移的第一环,直接在真实的生产环境下收集初期反馈。
  • 工具推荐:Kubernetes的Rolling Updates或AWS CodeDeploy等。
  1. 功能验证和用户体验收集: 在金丝雀部署后,利用用户行为分析工具(如 Google Analytics)、A/B 测试平台(如 Optimizely)以及用户访谈收集关于新功能的反馈。
  • 实施方法:设计实验对照组,对比新老功能的表现,记录用户体验变化。
  1. 性能和稳定性监控: 开启APM工具和日志记录系统密切观察新部署版本的CPU、内存占用率、延迟、故障率等关键性能指标(KPIs)。
  • 操作步骤:预设报警阈值,一但性能指标偏离正常范围即通知DevOps团队,快速定位和处理。
  1. 容错和弹性测试: 在金丝雀环境下故意引发一些系统故障(Chaos Engineering),如模拟服务器停机、网络延迟等,观察系统恢复情况。
  • 执行指令:通过Chaos Engineering工具执行具体剧本或攻击模拟,例如“关闭一半数据库副本”。
  1. 反馈环与迭代: 基于监控指标、用户体验反馈和异常报告进行复盘,决定是否将金丝雀版本全面推广,或回滚至之前的稳定版本并修复发现的问题。