敏捷中的端到端测试
当今敏捷流行时代,大多数应用程序架构都是采用面向服务的体系结构设计的。因而,应用程序与可以在应用程序环境之外的许多子系统或者服务互连。如果任何子系统出现故障,都可能导致整个应用程序陷入瘫痪。
为了确保一切正常,我们需要从头到尾(端到端)测试应用程序的整个流程。
端到端测试主要用于两个目的:
- 测试整个应用程序的主要业务组件,例如与其他服务、接口、数据库、网络和第三方应用程序进行数据交换。
- 要创建一个尽可能接近线上的场景并测试满意的流程,以便测试人员可以模拟真实用户和环境并避免任何应用程序异常。
为什么需要端到端测试
在每个冲刺中,开发团队和测试团队都专注于应用程序中使用的所有集成服务中的单个服务。大量微服务和子系统的功能和较短的测试时间会让他们有可能错过了子系统或服务中存在的隐患。
因此,质量检查小组必须确保单个服务中的特定更改不会影响整个工作流程。
端到端测试与传统测试
传统测试包括单元测试、集成测试、系统测试、验收测试。但是端到端测试是在系统测试之后开始的。有时系统/单元/集成测试与端到端测试之间区别不大,有时候很难界定,但是这些完全不同。
这是一个简单的例子,设我们有一个包含三个子系统的应用程序:「搜索」、「订购」、「支付」。
在当前的冲刺中,支付子系统中的需求规范更改如下:添加新的支付选项。因此,根据要求,系统测试将仅处理与新添加的付款选项相关的功能。
但是端到端测试将具有从搜索到付款(带有新添加的付款选项)以及订单确认的场景。端到端测试的范围,复杂性和维护性高于单元和集成测试。
因此,在准备测试用例和自动化测试脚本,测试人员最好先了解与完整的应用架构,这样它会很容易界定的覆盖范围。
谁进行端到端测试
端到端测试应由对应用程序有深入了解并了解产品架构的测试人员执行。除了测试人员外,业务人员、营销人员、内测用户甚至技术经理都是进行端到端测试的理想人选。
端到端测试方法
水平端到端测试
它贯穿业务工作流程的每个阶段,并确保功能需求文档与开发的应用程序相对应。
水平的端到端测试从头到尾通过各个应用程序验证每个工作流,以确保每个相互关联的过程正常工作。通常这种类型的测试会在发布周期结束时并在稳定的环境中进行。通过这种方法,测试可以在功能部分获得更多的覆盖,但是只有在所有版本更改都完全实现后才能执行。
垂直端到端测试
此方法是指分层测试,测试按分层的顺序进行。垂直测试用于分别彻底地测试每个组件,它是测试生命周期的一部分。执行此操作的最常见方法是「BDD」、「TDD」、「CI/CD」。
实现此目标的最佳方法是对每个组件执行单元测试,然后对API集成和UI层执行测试。通过这些工作,我们可以对核心代码进行大量测试。由于可以分阶段实施,因此很容易找到每个阶段的「BUG」。
端到端测试步骤
这些是端到端测试必不可少的步骤:
- 需求分析:全面分析需求,并涵盖端到端工作流程中的主要业务组件。
- 环境设置:设置测试环境时要牢记生产环境的详细信息。就软件和硬件要求而言,请尝试使其与产品相似。
- 子系统:确保所有子系统都是端到端工作流的一部分。
- 测试用例:设计具有最大覆盖范围的测试用例,并添加测试数据以测试常见的用户场景。专注于高优先级的功能,并设计更复杂的测试用例进行验证。
- 执行:执行整个端到端测试套件,然后分析结果。永远不要忘记按正确的顺序运行套件。如果需要,请在多个设备和系统中中执行端到端场景。
- 维护:由于端到端测试包含整个应用程序,因此测试用例比功能测试用例更为复杂。系统的每个组件都必须进行测试,这会增加故障百分比。执行的结构和顺序在端到端测试中至关重要。首先进行单元测试和集成测试以解决最初的错误。一旦开始端到端测试,就可以在高风险的用户场景下同时运行冒烟和健全性测试。
提高端到端测试效率
- 尝试以最大的覆盖范围自动化端到端测试用例。
- 将端到端自动化套件与冒烟测试、健全性测试和验收测试分开。
- 在任何冲刺版本发布之前执行端到端套件,以确保应用程序的正常运行按预期进行,并且新的更改不会对产品的子系统产生任何影响。
- 使用诸如
Jenkins
之类的任何工具将测试套件与「CI/CD」管道集成在一起。 - 由于测试套件需要花费一些时间来执行,因此创建
Jenkins
任务并将其安排在晚上,以便可以在工作时间内分析所有失败的测试用例。 - 端到端测试经常也确实包含一些跨浏览器和并行测试,因此在这种情况下,请尝试在
Docker
中使用Selenium Grid
。 - 在运行自动化套件时,需要创建一个接近生产环境,并且需要避免任何环境级别的问题。
结论
端到端的目标是验证系统与功能流程的集成。因此在测试任何应用程序时,必须注意用户界面或表示层不是唯一要关注的领域,但应用程序行为背后的基础数据、流程和逻辑也需要进行验证。连接的系统和集成在前端、后端、功能和集成方面均同等重要。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java基于POI实现excel任意多级联动下拉列表——支持从数据库查询出多级数据后直接生成【附源码】
- Elasticsearch 通过Scroll遍历索引,构造pandas dataframe 【Python多进程实现】
- 【Java】 NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException、ArrayIndexOutOfBoundsE
- Meow攻击删除不安全(开放的)的Elasticsearch(及MongoDB) 索引,建一堆以Meow结尾的奇奇怪怪的索引(如:m3egspncll-meow)
- MySQL LOAD DATA INFILE—从文件(csv、txt)批量导入数据
- MySQL 快速删除大量数据(千万级别)的几种实践方案——附源码
- 什么样的代码是好代码?
- Elastic search集群新增节点(同一集群,同一物理机)
- Tesseract-OCR 4.1.0 安装和使用— windows及CentOS
- Java 大小端转换(基于ByteBuffer)
- Tika结合Tesseract-OCR 实现光学汉字识别(简体、宋体的识别率百分之百)—附Java源码、测试数据和训练集下载地址
- 阿里《JAVA实习生入职测试题—2019最新》之答案详解(连载一)
- 阿里《JAVA实习生入职测试题—2019最新》之答案详解(连载二)
- 动态生成RDLC报表
- Angular 页面元素的DOM级别的删除过程