自动化UI测试 | 什么是测试驱动开发(TDD)和行为驱动开发(BDD)?有何区别?

TDD(测试驱动开发)和BDD(行为驱动开发)是两种独特的软件开发技术,它们在测试的内容和方式上有所不同。尽管名称相似,但服务于不同的目的。
什么是TDD?
TDD代表测试驱动开发。它是一个过程,即为特定功能部分编写测试,运行测试以确定故障,然后根据需要调整代码以修复这些故障。通过TDD测试,开发人员可以确保他们编写的代码是功能性的、可靠的。此外,如果其他开发人员需要使用代码组件,他们也可以通过运行测试来确认代码的功能性。
TDD流程
执行测试驱动开发需要执行以下几个步骤:
-
开发人员编写自动化测试用例来测试代码行。
-
然后执行这些测试,以确定程序中出现故障的位置。
-
随后进行更改(重构),以确保修复故障,并且将来不会再次发生。
-
最后,再次执行测试,直到无误通过。
TDD优势
使用TDD有诸多优势,例如:
-
减少返工时间:测试驱动开发不允许编写新代码,除非现有代码已成功通过无故障测试。在完全解决和消除故障之前,编写代码的过程会停止。因此,重新修复损坏代码的时间可以降到最低。
-
快速反馈:由于测试每一次只针对特定的代码部分,开发人员可以获得更即时的反馈,从而更快地实施更改。
-
提高开发效率:使用TDD时,重点是编写功能性代码,而不是设计测试用例。因此,生产力得以提高,开发工作得以顺利进行。
-
代码更灵活、更易维护:由于代码在进入软件开发过程的下一环节之前,每个部分都经过测试,因此代码可以保持功能性,并在未来具有适应性。
测试驱动开发示例
为了更好地理解测试驱动开发在开发中的作用,我们通过一个示例来了解。在该示例中,我们可以定义一个密码类,以满足它必须为5-10个字符的条件。
第一步是编写满足必要要求的代码。然后运行测试以确保代码有效。例如,创建一个类来测试密码长度,运行测试,然后根据设置的条件(密码长度是否为5-10个字符),检查输出的是true还是false。如果测试返回false,则可以根据需要调整代码。
什么是BDD?
BDD代表行为驱动开发,它是软件开发团队和其他人员共同合作的一种方法,通过以下方式缩小业务团队人员和技术团队人员之间的距离:
-
鼓励团队进行跨角色的合作,以增进对当前问题的理解
-
对已完成的工作进行快速、小规模的迭代,以推进反馈并优化价值流
-
生成系统文档,并根据系统行为进行自动检查
BDD通常涉及软件开发人员、测试工程师、项目经理以及其他利益相关者。这个团队一起开发用户故事中的具体验收标准示例。使用领域的特定语言,将这些示例进行描述并放入一个功能文件中。然后,这个功能文件被转换成可以执行的规范,从而允许开发人员编写也可以执行的实际测试。
BDD流程
行为驱动开发的步骤相当简单,必要时可以重复:
-
行为描述通常使用用户情景。这可以让团队讨论新功能的具体示例,以便每个人都能就行为的期望达成一致。
-
然后,将示例转换为文档来编写操作,使其可以自动化。
-
执行该测试,以协助开发人员,并指导他们开发代码。
-
然后创建代码,以使操作通过并使代码具有功能性。
BDD优势
使用BDD进行软件开发有几个好处,包括:
-
融入用户体验:BDD注重用户体验,因此可以让团队形成更广阔的视角,并注意到他们在理解方面的差距。
-
成本效益:由于BDD为用户、开发人员和投资者设定了优先级,因此可在程序开发过程中优化资源使用。
-
简单的跨浏览器测试:BDD侧重于行为,这意味着它为跨浏览器测试提供了一个理想框架。
行为驱动开发示例
行为驱动开发遵循“Given-When-Then”框架。例如,如果您的网站具有语言翻译功能,并能将整个网页翻译为意大利语、西班牙语和法语,您可能会遇到如下场景:
场景:以我设置的语言(意大利语)接收信息
Given我是用户 “fmallo”
When系统发送消息 “InvalidLogin(登录无效)” 时
Then 我就会看到错误信息 “Login non valido(登录无效)”
场景:更改我使用的语言
Given 我是用户 “dmessina”
When我将语言设置为 “Spanish(西班牙语)” 时
Then 我的语言应该等于 “Spanish(西班牙语)”
TDD和BDD的区别
TDD(测试驱动开发)与BDD(行为驱动开发)主要区别在于测试的内容和方式。BDD主要站在最终用户的立场上测试应用程序,而TDD则注重于测试小部分的功能。
此外,BDD涉及更多人员——项目经理、开发人员和测试工程师,他们共同开发行为示例。因此,在实施任何内容之前需要进行大量的沟通。另一方面,TDD可以由单个开发人员完成,无需项目经理或利益相关者的外部投入。
使用Ranorex进行BDD和TDD
使用Ranorex进行行为驱动开发
DesignWise为BDD框架而构建。使用DesignWise,您可以更快地创建测试,同时减少冗余、降低风险和减少编码量。然后,您可以将它们导入Ranorex Studio 中来运行BDD测试。
使用Ranorex进行测试驱动开发
如果测试驱动开发更适合您的项目,Ranorex同样可以满足您的需求。无论您是想为您的TDD进行功能测试、回归测试,还是任何开发人员主导的测试,Ranorex Studio都能为您提供自动化所有测试的理想平台。
使用Ranorex提高测试自动化水平
Ranorex Studio是一款多功能且功能强大的工具,适用于开发人员和新手,它具有一系列功能,让您无需复杂的编码或手动测试即可创建和运行测试。
Ranorex中国授权合作伙伴——创实信息
电话:021-61210910
邮箱:customer@shcsinfo.com
官网:www.shcsinfo.com
相关文章:
自动化UI测试 | 什么是测试驱动开发(TDD)和行为驱动开发(BDD)?有何区别?
TDD(测试驱动开发)和BDD(行为驱动开发)是两种独特的软件开发技术,它们在测试的内容和方式上有所不同。尽管名称相似,但服务于不同的目的。 什么是TDD? TDD代表测试驱动开发。它是一个过程&…...
DeepSeek 助力 Vue 开发:打造丝滑的进度条
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
一场始于 Selector Error 的拯救行动:企查查数据采集故障排查记
时间轴呈现事故进程 17:00:开发人员小李正在尝试利用 Python 爬虫从企查查(https://www.qcc.com)抓取公司工商信息。原本一切正常,但突然发现信息采集失败,程序抛出大量选择器错误。17:15:小李发现&#x…...
微信服务号推送消息
这里如果 没有 就需要点新的功能去申请一下 申请成功之后就可以设置模版消息 推送到用户接受的页面是 需要后端调用接口 传递token 发送给客户...
24电子信息类研究生复试面试问题汇总 电子信息类专业知识问题最全!电子信息复试全流程攻略 电子信息考研复试真题汇总
你是不是在为电子信息考研复试焦虑?害怕被老师问到刁钻问题、担心专业面答不上来?别慌!作为复试面试92分逆袭上岸的学姐,今天手把手教你拆解电子信息类复试通关密码!看完这篇,让你面试现场直接开大…...
嵌入式EasyRTC实时通话支持海思hi3516cv610,编译器arm-v01c02-linux-musleabi-gcc
EasyRTC已经完美支持海思hi3516cv610,编译器arm-v01c02-linux-musleabi-gcc,总体SDK大小控制在680K以内(预计还能压缩100K上下): EasyRTC在hi3516cv610芯片上能双向通话、发送文字以及二进制指令,总体运行…...
如何搭建Wi-Fi CVE漏洞测试环境:详细步骤与设备配置
引言 随着Wi-Fi技术的普及,Wi-Fi网络成为了现代通信的重要组成部分。然而,Wi-Fi网络的安全性始终是一个备受关注的话题。通过漏洞扫描和安全测试,网络管理员可以及早发现并修复Wi-Fi设备中存在的安全隐患。本篇文章将详细介绍如何搭建Wi-Fi …...
sqlalchemy 使用fetchmany 报错 KeyError 或 AttributeError
问题 我遇到的问题是 AttributeError: Could not locate column in row for column xxxx 解决 首先看你定义的模型类是否缺失了相关的字段 Column XXX not found._clould not locate column in row for column-CSDN博客 其次 rows result.fetchmany(1000) for (row,) i…...
计算机视觉中图像的基础认知
一、图像/视频的基本属性 在计算机视觉中,图像和视频的本质是多维数值矩阵。图像或视频数据的一些基本属性。 宽度(W) 和 高度(H) 定义了图像的像素分辨率,单位通常是像素。例如,一张 1920x10…...
Docker Desktop WebAPI《1》
方法1 》》生成 的文档不要动, 》》执行 Container(Dockerfile) 会生成镜像文件和容器 》》生成的镜像和容器 在 Docker Desktop 中可以查看 用VS 的 Container Dockerfile 调试 但把这个调试工工具 停止,WebAPi就不能访问了 …...
ELK安装部署同步mysql数据
ELK 安装部署指南 ELK 是 Elasticsearch、Logstash 和 Kibana 的简称,用于日志收集、存储、分析和可视化。 1. 安装 Elasticsearch Elasticsearch 是一个分布式搜索和分析引擎。 1.1 下载并安装 访问 Elasticsearch 官网 下载最新版本。 解压并安装: tar…...
《OpenCV》——特征提取与匹配方法
特征提取 特征提取是从原始数据中提取出能够代表数据本质特征和关键信息的过程,在很多领域都有广泛应用。原始数据往往包含大量的冗余信息,特征提取的目的是去除这些冗余,提取出最具代表性、最能区分不同类别或模式的特征,从而降…...
Oracle DBA 诊断及统计工具-2
Oracle 数据表空间和索引表空间的资源分配比例总结 在 Oracle 数据库中,数据表空间和索引表空间并没有固定的资源分配比例,其分配需要综合考虑多种因素,以下是详细分析不同场景下的分配建议以及具体的分配思路。 影响分配比例的因素 数据读…...
如何使用DHTMLX Scheduler的拖放功能,在 JS 日程安排日历中创建一组相同的事件
DHTMLX Scheduler 是一个全面的调度解决方案,涵盖了与规划事件相关的广泛需求。假设您在我们的 Scheduler 文档中找不到任何功能,并且希望在我们的 Scheduler 文档中看到您的项目。在这种情况下,很可能可以使用自定义解决方案来实现此类功能。…...
矩阵元素的“鞍点”
题意: 一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。 本题要求编写程序,求一个给定的n阶方阵的鞍点。 输入格式: 输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数…...
Qt的isVisible ()函数介绍和判断窗口是否在当前界面显示
1、现象:当Qt的窗口最小化时,isVisible值一定是true,这是正常的。 解释:在Qt中,当你点击窗口的最小化按钮时,Qt内部不会自动调用 hide() 方或 setVisible(false) 来隐藏窗口。相反,它会改变窗口…...
Unity-Mirror网络框架-从入门到精通之LagCompensation示例
文章目录 前言什么是滞后补偿Lag Compensation示例延迟补偿原理ServerCubeClientCubeCapture2DSnapshot3D补充LagCompensation.cs 独立算法滞后补偿器组件注意:算法最小示例前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mir…...
Jenkins 通过 Execute Shell 执行 shell 脚本 七
Jenkins 通过 Execute Shell 执行 shell 脚本 七 一、创建 .sh 文件 项目目录下新建 .sh 文件 jenkins-script\shell\ci_android_master.sh添加 Execute Shell 模块 在 Command 中添加 # 获取 .sh 路径 CI_ANDROID_MASTER_PATH"${WORKSPACE}/jenkins-script/shell/…...
PyCharm 批量替换
选择替换的内容 1. 打开全局替换窗口 有两种方式可以打开全局替换窗口: 快捷键方式: 在 Windows 或 Linux 系统下,按下 Ctrl Shift R。在 Mac 系统下,按下 Command Shift R。菜单操作方式:点击菜单栏中的 Edit&…...
Linux-文件基本操作
1.基本概念 文件: 一组相关数据的集合 文件名: 01.sh //文件名 2.linux下的文件类型 b block 块设备文件 eg: 硬盘 c character 字符设备文件 eg: 鼠标,键盘 d directory 目录文件 eg: 文件夹 - regular 常规文件…...
HTTP 请求头、响应头常见字段分析
目录 请求头AcceptAccept-EncodingUser-AgentConnectionCache-ControlHost 响应头Content-EncodingETagContent-TypeVaryx-business-use-case-usageAccess-Control-Allow-Originfacebook-api-versionStrict-Transport-SecurityPragmaCache-ControlExpiresx-fb-request-id 和 x-…...
postman登录cookie设置
1.设置环境变量, 定义变量存放共享的登录信息 如Cookie 2.登录接口编码test脚本获取cookie信息 let jsessionidCookie pm.cookies.get("JSESSIONID");if (jsessionidCookie) {let cookie "JSESSIONID" jsessionidCookie "; Admin-Tok…...
Oracle临时表空间(基础操作)
临时表空间 临时表空间:用来存放用户的临时数据,临时数据在需要时被覆盖,关闭数据库后自动删除,其中不能存放永久性数据。 用户进程和服务器进程是一对一的叫做专用连接。 任何一个用户连到oracle数据库,oracle都会…...
数据结构-基础
1、概念: 程序 数据结构 算法 2、程序的好坏 可读性,稳定性,扩展性,时间复杂度,空间复杂度。 3、数据结构 是指存储、组织数据的方式,以便高效地进行访问和修改。通过选择适当的数据结构, 能…...
2024年博客之星年度评选—主题文章创作评审文章得分公布
博客之星活动地址:https://www.csdn.net/blogstar2024 创作影响力评审入围名单:https://blogdev.blog.csdn.net/article/details/145189549 目录 主题文章创作评审得分排名 主题文章创作说明 主题文章评选说明 创作影响力评审主题文章创作评审目前排名 博…...
【科技时讯】2025年2月13日科技新闻速递
文章目录 2025年2月13日科技新闻速递1. OpenAI宣布GPT系列重大升级计划2. 华为云推出DeepSeek V3/R1满血版模型3. 全球科技行业动态4. 国内科技企业动态5. 数字经济与统计制度革新6. 资本市场与科技股表现7. 科技新闻逻辑关系图 2025年2月13日科技新闻速递 1. OpenAI宣布GPT系…...
AGI的基石:什么是机器学习
什么是机器学习:机器学习是人工智能的子集,深度学习是其重要的组成部分,包括不限于:deep neural networks 、deep belief networks和recurrent neural networks。在深度学习中,有三种基本的神经网络架构:FF…...
SQL布尔盲注+时间盲注
1.布尔盲注 双重for循环 import requestsurl http://127.0.0.1/sqli-labs-master/Less-8/index.phpdef database_name():datebasename for i in range(1, 9): # 假设数据库名称最多8个字符for j in range(32, 128): # ascii 可见字符范围从32到127payload f"?id1 A…...
2024-2025年主流的开源向量数据库推荐
以下是2024-2025年主流的开源向量数据库推荐,涵盖其核心功能和应用场景: 1. Milvus 特点:专为大规模向量搜索设计,支持万亿级向量数据集的毫秒级搜索,适用于图像搜索、聊天机器人、化学结构搜索等场景。采用无状态架…...
Mysql中使用sql语句生成雪花算法Id
🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…...
