Cucumber之二Gherkin语言学习
在本教程中,我们将向您介绍Gherkin - BDD语言(业务驱动开发)。我们将尽力详细回答这些问题
原文点击这里
免费英语视频教程可见微信公众号:【软测小生】里面,请关注公号更新相关文章和视频资源。
另外有一个中国团队在做类似的事情,详情可见:http://cuketest.com/zh-cn/
- Gherkin是什么?
- 使用Gherkin有什么用?
接下来,让我们从一些细节开始学习。
什么是Gherkin-BDD语言?
在深入研究Gherkin之前,有必要了解跨项目不同领域的公共语言的重要性和需求。我所说的不同领域是指客户、开发人员、测试人员、业务分析师和管理团队。让我们先讨论开发项目中的常见问题,然后再讨论解决方案,在此过程中,我们将遇到对公共语言的需求。
插播:
Gherkin(剧本语法)是用于编写Cucumber、Specflow或类似的BDD框架规范的语言。这是一种业务人员可读懂的,特定领域的语言,它可以让你描述软件的行为,而不用详细说明如何实现这个行为。有几个约定:
- 一个gherkin源文件包含单个功能的说明。
- 源文件具有扩展名* .feature。
- 每个gherkin场景都有一个基本的模式,其中包括:(假如),事件(当)和结果(那么)
假设您是技术团队(开发人员和测试人员)的一部分,并且您有一个与业务团队(业务所有者和业务分析师)协作的任务。您必须提出项目的需求,这些需求将是你的开发团队将要实现的,而测试团队将进行测试。此外,你必须在你的电子商务平台上做一个小的搜索功能,这个功能将允许用户在您的网站上搜索产品。
正如我们在经验中可能都遇到过的,业务团队给出的需求是非常粗糙和基本的。例如,在这个场景中,我们可能会得到以下要求:
3. 功能需求
3.1 搜索功能
3.1.1 用户应该能够搜索产品
3.1.2 只显示与搜索字符串相关的产品。
以上需求提出的问题
正如我们所看到的,这些需求很好,也很有用,但并不准确。它们描述了系统的广泛行为,但没有指定系统的具体行为。让我通过分析第一个需求来说明它,第一个需求说用户应该能够搜索产品,但是它没有指定以下内容:
-搜索字符串的最大可搜索长度是多少?
-如果用户搜索无效的产品,搜索结果应该是什么?
-什么是可以用来搜索的有效字符?
*以及应用程序的一些更详细的行为。
通常在一个项目中,我们最终会向业务团队提出上述问题,并得到答复,大多数答复会到达项目文档,但不幸的是,这些答复会在电子邮件和电话对话中丢失。并且这些答复也可以解释,例如:
问业务负责人:如果用户搜索无效的产品,搜索结果应该是什么?
来自业务负责人的回复:无效的产品搜索应该在搜索页面上显示以下文本:没有找到产品(No product found)。
这些问题的回答导致更多的怀疑和解释
我们可以从业务团队那里得到问题的答案,但也可以通过以下方式进行解释或提出疑问:
-无效产品的定义是模糊的,不同的团队成员会以不同的方式解释。一个人可能认为一个无效的产品不存在于库存中,而其他团队成员可能认为一个无效的产品是一个拼写错误。
-业务团队的回答是“没有找到产品(No product found)”的文本应该显示在页面上。它是否说应该为用户提供一个新的搜索选项? 或者应该为用户提供一个相关的 / 类似的搜索选项?
这些是系统中引入有误差的精确点。此外,如果我们分析第二个疑问,我们将看到用户业务团队希望向用户提供一个新的搜索选项和 相关或者类似的搜索选项。然而,当被问到这个问题时,他们却想不出这个情景。因此,在上面的例子中发生的是:
- 业务团队和技术团队在两个不同的层次上进行沟通,业务团队含糊其辞,而技术团队力求精确。
- 系统中引入了模糊性,这里通过对“无效产品(invalid product)”的定义。
- 没有给业务团队足够的洞察力,这样他们就可以提出新的场景。
- 项目的一些细节在电子邮件和电话交谈中丢失了。
如何改进需求?
现在,让我们改进业务团队给出的第一个需求,并尝试使其更加精确:
“当用户在没有拼写错误的情况下搜索库存中的产品名称时。所有名称相似的产品均应展示”
“当用户在没有拼写错误的情况下搜索库存中的产品名称时。搜索结果应先显示准确的匹配项,然后再显示相似的匹配项。”
在这里,我们可以看到需求变得多么清晰,有了这些清晰的需求,我们就可以对系统进行更多的思考。例如:在第二个需求的情况下,读完后我们可能会想到其他的场景,比如:
- 如果没有精确和相似的匹配会发生什么?
- 应该给用户一个错误消息吗?
- 或者向用户提供一条消息,说明产品预计什么时候进入库存。
我们在这方面取得了什么成就?
我们已经迫使客户考虑细节。有了这种改进的思想,业务团队就有了更精细的需求。这进而减少了项目中的模糊性,并将通过减少错误实现的数量使开发人员和测试人员的工作变得简单。此外,您还可以看到,现在每个需求都记录了应用程序的一个确切行为。这意味着它本身可以被看作是一个需求文档。
结论是什么?
好吧,通过上面的例子或练习,我们可以总结如下:
- 项目中的不同团队需要一种公共语言来表达需求。这种语言应该足够简单,能够被业务团队成员理解,并且应该足够明确,能够消除开发人员和测试人员的大部分歧义。
- 这种语言应该打开团队成员的思路,以提出更多的场景。当您表达更多的细节时,您会尝试更多地可视化系统,因此您最终会创建更多的用户场景。
- 这种语言应该足够好,可以用作项目文档。
为了解决这些问题,Gherkin(小黄瓜)应运而生。Gherkin是一种简单、轻量级和结构化的语言,它使用常规的口语来描述需求和场景。我们所说的常规口语指的是英语、法语和大约30多种语言。(包括中文)
Gherkin(小黄瓜)的例子
由于Gherkin是一种结构化语言,它遵循一些语法,让我们先来看一个用小黄瓜描述的简单场景。
Feature:为用户搜索功能 (中文:功能)
这个特性非常重要,因为它允许用户过滤产品
Scenario: 当用户搜索库存中的产品名称时,没有拼写错误。应显示所有名称相似的产品 (中文:场景)
Given 用户在www.myshopingsite.com的主页上 (中文:假如)
When 用户搜索笔记本电脑时 (中文:当)
Then 搜索页面应该更新笔记本电脑的列表 (中文:然后)
Gherkin包含一组关键字,这些关键字定义了场景的不同前提。正如我们在上面看到的彩色部分是关键字。我们稍后会详细讨论gherkin测试结构,但需要注意的重点是:
- -测试是用通俗易懂的英语编写的,对您的项目团队的所有领域都是通用的。
- -此测试的结构使其能够以自动方式读取。通过在描述场景的同时创建自动化测试。
后续会更新更多文章,上文种可能有些许错误,若有请指正,谢谢
Cucumber之二Gherkin语言学习相关推荐
- 语言学习游戏的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
报告页数: 150 图表数: 100 报告价格:¥16800 本文研究全球与中国市场语言学习游戏的发展现状及未来发展趋势,分别从生产和消费的角度分析语言学习游戏的主要生产地区.主要消费地区以及主要的生 ...
- C++语言学习(十二)——C++语言常见函数调用约定
C++语言学习(十二)--C++语言常见函数调用约定 一.C++语言函数调用约定简介 C /C++开发中,程序编译没有问题,但链接的时候报告函数不存在,或程序编译和链接都没有错误,但只要调用库中的函数 ...
- 黑马程序员——c语言学习心得——函数传递二维数组
黑马程序员--c语言学习心得--函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化. 变量 ...
- Python语言学习之pandas:DataFrame二维表的简介、常用函数、常用案例之详细攻略
Python语言学习之pandas:DataFrame二维表的简介.常用函数.常用案例之详细攻略 目录 DataFrame的简介 DataFrame的常用案例 1.写入和读取excel表格文件
- C语言学习之将一个二维数组的行和列互换,存到另一个二维数组中
C语言学习之将一个二维数组的行和列互换,存到另一个二维数组中 #include <stdio.h> int main(){int a[2][3]={{1,2,3},{4,5,6}}; // ...
- Ink脚本语言学习笔记(二)
目前想要基于Ink脚本语言和Unity新的UIToolkit做一套对话系统,本文对Ink脚本语言的使用方式做一下介绍和总结 Ink脚本语言学习笔记(一) 二.缝合(Weave) 目前没想好怎么翻译这个 ...
- Go语言学习之路(二)
Go语言学习之路(二) 面对对象编程思想 抽象 封装 继承 接口 文件 命令行参数 Json 序列化 反序列化(unmarshal) 单元测试 Redis Redis简介 Redis基本使用 Go连接 ...
- C语言学习(十二)C语言中的字符(宽字符与窄字符)、从字符谈谈C语言的编码、转义字符
C语言学习(十二)C语言中的字符(宽字符与窄字符).从字符谈谈C语言的编码.转义字符 目录 C语言学习(十二)C语言中的字符(宽字符与窄字符).从字符谈谈C语言的编码.转义字符 英文字符 字符的表示 ...
- R语言学习二——工具的使用
R语言学习(二) 本章学习R语言相关开发工具的使用: 软件下载 软件安装 RStudio的使用 R扩展包的安装与载入 容易遇到的问题 一.软件下载(RStudio) Rstudio下载地址 选择免费版 ...
最新文章
- Codeforces Round #367 (Div. 2)
- sqlalchemy.exc.DataError: (pymysql.err.DataError) (1366, “Incorrect string value: ‘\\xE6问题解决
- LeetCode集锦(十) - 第28题 Implement StrStr
- WinCE文件目录定制及内存调整
- Matlab 矩阵计算例子
- MAC IOS ssh 连接下修改环境变量
- Java 概述和编程基础
- carlife android 无线,carlife无线连接流程是什么
- 梯度下降法参数更新公式的推导
- JsonElement的简单说明
- python可视化迷宫求解_用python求解迷宫
- redhat 复制文件夹及子文件夹_Docker COPY 复制文件夹的诡异行为
- 快递鸟电子面单接口流程文档汇总
- 优惠券的工厂与策略模式实现方案
- android大作业计算器,2015大作业简易计算器实验报告.doc
- matlab 求信噪比
- Java实现图片转pdf、pdf合并
- 微信授权登录增加浏览器历史记录解决方法
- 【Web技术】1352- 如何防止他人恶意调试你的web程序
- 股票交易日志3 12.15
热门文章
- 在阿里云中搭建大数据实验环境
- Windows10 SVG转PDF
- php批量给文件添加头部版权,给代码添加版权信息
- I/O复用 —— select
- thinkpad重装系统不引导_联想电脑重装win7系统后引导不了的原因是什么?
- 关于跨境电商你了解多少!我们应该怎么做跨境电商?(中)
- 小波科普文章精粹:看森林,也看树木
- sql语句用法的一部分整理
- 小米5s+刷+android+8.0,小米MIUI10技术难点已突破,小米5S系列升级安卓8.0看来稳了...
- 华为机试真题 Python 实现【不含 101 的数】【2022.11 Q4新题】