Testing 为什么Cumber不被视为测试工具?

Testing 为什么Cumber不被视为测试工具?,testing,cucumber,bdd,qa,Testing,Cucumber,Bdd,Qa,我是Cucumber的新手,我正在努力理解这个工具。阅读时,我发现它很快就被定义为支持BDD的工具: Cucumber是一种支持行为驱动开发BDD的工具 它也被描述为一种验证工具: Cucumber读取以纯文本编写的可执行规范,并验证软件是否按照这些规范所述执行 另一方面,我注意到考试这个词在网上被过度使用 好了,这个工具是敏捷测试,因为它在e2e测试中大量使用=小黄瓜特性规范+步骤定义。但是,他说了一些不同的话: 最后,记住cumber不是一个测试工具。它是一个工具,用于获取关于系统应如何工作

我是Cucumber的新手,我正在努力理解这个工具。阅读时,我发现它很快就被定义为支持BDD的工具:

Cucumber是一种支持行为驱动开发BDD的工具

它也被描述为一种验证工具:

Cucumber读取以纯文本编写的可执行规范,并验证软件是否按照这些规范所述执行

另一方面,我注意到考试这个词在网上被过度使用

好了,这个工具是敏捷测试,因为它在e2e测试中大量使用=小黄瓜特性规范+步骤定义。但是,他说了一些不同的话:

最后,记住cumber不是一个测试工具。它是一个工具,用于获取关于系统应如何工作的共识。一种工具,允许您(但不需要您)自动验证系统的行为(如果您觉得有用)

如果这个工具不是真正的测试工具,那么还有什么其他可能的用途呢?

TL;博士 Cucumber是一个BDD框架。其主要组成部分是:

:一种普遍使用的语言,用作比 任何东西,都可以作为合作的跳板。信息技术 帮助管理企业的期望,如果每个人都可以 如果以可消化的格式查看您正在进行的更改,它们将 希望开发团队少受挫折,但是 如果有必要,您可以使用它来加快团队的反应时间 是bug,通过编写cucumber用思维定势包装的测试 有人会回来在某个时候调试它 指向 或CLI:基于 小黄瓜。它是由志愿者开发的,他们都捐赠了一部分 他们的业余时间。每个实现都特定于一个编程 支持可供测试的生产代码的语言。它是 被视为具体工具/实用工具。 长版本 Gherkin作为通信工具的预期用途,从多个角度或参与者描述与系统的交互,碰巧您可以将其与测试框架集成,这有助于确保系统正确处理这些交互

通常,这是从用户的角度进行的:

Given John has logged in
When he receives a message from Brenda
Then he should be able to click through to his message thread with Brenda via the notification
但也可以从组件/页面的角度:

Given the customer history table is displayed
And there have been changes to the customer table for that user since the page was first loaded
When it receives a click to refresh the data
Then the new changes should be displayed
这一切都是关于描述行为,允许业务和开发人员自由协作,同时打破通常会困扰沟通的语言障碍,通常会使双方因缺乏对某个问题的相互理解而彼此感到沮丧

这就是乐趣的开始-阿纳金,Ep III 您可以使用这些文件在整个开发团队中创建一个生动的文档环境,如果成功,更广泛的业务以及理论上正确的措辞和显示,这将对客户服务人员是一个难以置信的福音,他们将更容易跟上变化,如果没有任何额外的努力,我会非常好地描述帮助文档,但这不是我在野外见过的东西。我在工作中编写了一个脚本,通过将功能转换为标记,并与其他各种标记工具mermaid for graphs、生成API文档的tsdoc插件标记以及我选择的HTML转换器的各种扩展一起实现这一点,docsify我已经成功地创造了一些不难导航的东西,并打开了团队之间的沟通,这些团队以前发现很难将他们的问题传达给开发团队,现在大多数人都知道有点降价,即使它必须被描述为你在reddit线程和youtube评论中键入的字符,以使文本加粗和斜体等,人们才能理解它是什么,但这意味着每个人都可以为此做出贡献

当涉及到调试测试时,它是一个非常有用的工具,尤其是当与剧本模式一起使用时,标准页面对象模型更是如此,因为pom没有提供额外的上下文,但它仍然很有用,因为每件事的描述方式都会导致在问题失败时从用户或组件的角度复制问题

我将它与流程图配对,在流程图中,我绘制出用户交互,将功能固定在它上,并能够以更直观的方式看到用户将能够做一些我们可能没有计划的事情,或者甚至可以找出一些我们不知何故错过的花哨场景

长版本更长 我这里的示例主要是javascript,因为我们一直在节点环境中开发,但是如果您想创建自己的版本,它应该不会有太大的不同

医生 从本质上说,这是位只是为了显示功能文件的方式,很容易消化的业务,我有计划将测试报告集成到这一点上,并给ab 切换分支等的能力

首先,您希望获得features文件夹中所有文件的简单数组,并选择结尾带有.feature的文件

本质上,您只需要在这里展平ls,这是可以改进的,但是我们需要使用node的LTS版本,而不是一般的最新版本

常数fs=要求“fs”; 常量路径=要求“路径”; const walkSync=d=>fs.statSyncd.isDirectory?fs.readdirSyncd.mapf=>walkSyncpath.joind,f:d; 常数展平=arr,结果=[]=>{ if!Array.isArrayarr{ 返回[…结果,arr]; } arr.forEacha=>{ 结果=A,结果 } 返回结果 } 功能功能文件夹{ const allFiles=flattWalkSyncPath.relativeprocess.cwd,文件夹 让可转换=[] 对于所有文件的let文件{ 如果file.match/.feature$/{ 可转换文件 } } 敞篷车 } ... 使用Gherkin解析器遍历所有这些文件以提取场景需要进行一些设置,尽管这非常简单,因为Gherkin有一个非常好的定义结构和已知的关键字

可以有很多自引用,当您将其归结为基本内容时,很多cucumber都是建立在定义良好的组件上的。例如,您可以将场景描述为具有描述、标记和名称的背景:

类转换{ ... 静态背景{ 返回{ cuke:`${background.keyword.trim}:`, 步骤:this.stepsbackground.steps, 位置:this.locationbackground.location, 关键词:background.keyword } } 静态场景{ 返回{ …这个背景场景, 标签:this.tagsscenario.tags, cuke:`${scenario.keyword.trim}:${scenario.name}\n`, 描述:`${scenario.description.replace/?!^\s+[>].$^.*$/gm,$1.trim}`, 示例:this.examplescenario.examples } } ... } 您可以完全充实它,以写入单个文件,或输出几个标记文件,确保在菜单文件中引用它们

流程图 流程图使问题更容易可视化,有一些工具可以使用降价来帮助生成这些问题,如下所示:

在后面,它最终会变成这样:

### Login

Customers should be able to log into their account, as long as they have registered.

...


```mermaid
 graph TD
        navigateToLogin["Navigate to Login"] -->logIn{"Login"}
        logIn -->validCredentials["Valid<br>Credentials"]
        logIn -->invalidCredentials{"Invalid<br>Credentials"}
        invalidCredentials -->blankPass["Blank Password"]
        invalidCredentials -->wrongPass["Wrong Password"]
        invalidCredentials -->blankEmail["Blank Email"]
        invalidCredentials -->wrongEmail["Wrong Email"]
        ...

        click blankPass "/#/areas/login/scenario-blank-password" "View Scenario"
        ...
 ```
它会将测试的任何部分分解为描述,这意味着如果CSS发生变化,我们将不会搜索不再存在的内容,甚至是调试该站点区域的新手也能够从测试失败中恢复过来

表达 我认为所有这些都应该说明如何在更普遍的意义上改善沟通。这一切都是为了确保项目能够被尽可能多的人访问,这些人可以输入一些有价值的东西,这些东西应该是你业务中的每一个人

TL;博士 Cucumber是一个BDD框架。其主要组成部分是:

:一种普遍使用的语言,用作比 任何东西,都可以作为合作的跳板。信息技术 帮助管理企业的期望,如果每个人都可以 如果以可消化的格式查看您正在进行的更改,它们将 希望开发团队少受挫折,但是 如果有必要,您可以使用它来加快团队的反应时间 是bug,通过编写cucumber用思维定势包装的测试 有人会回来在某个时候调试它 指向 或CLI:基于 小黄瓜。它是由志愿者开发的,他们都捐赠了一部分 他们的业余时间。每个实现都特定于一个编程 支持可供测试的生产代码的语言。它是 被视为具体工具/实用工具。 长版本 Gherkin作为通信工具的预期用途,从多个角度或参与者描述与系统的交互,碰巧您可以将其与测试框架集成,这有助于确保系统正确处理这些交互

通常,这是从用户的角度进行的:

Given John has logged in
When he receives a message from Brenda
Then he should be able to click through to his message thread with Brenda via the notification
但也可以从组件/页面的角度:

Given the customer history table is displayed
And there have been changes to the customer table for that user since the page was first loaded
When it receives a click to refresh the data
Then the new changes should be displayed
这一切都是关于描述行为,允许业务和开发人员自由协作,同时打破通常会困扰沟通的语言障碍,通常会使双方因缺乏对某个问题的相互理解而彼此感到沮丧

这就是乐趣的开始-阿纳金,Ep III 您可以使用这些文件在整个开发团队中创建一个生动的文档环境,如果成功,更广泛的业务以及理论上正确的措辞和显示,这将对客户服务人员是一个难以置信的福音,他们将更容易跟上变化,如果没有任何额外的努力,我会非常好地描述帮助文档,但这不是我在野外见过的东西。我在工作中写了一个剧本 通过将功能转换为标记,以及各种其他标记工具mermaid for graphs、生成API文档的tsdoc插件标记,以及我选择的HTML转换器的各种扩展,docsify我已经成功地创造了一些不难导航的东西,并打开了团队之间的沟通,这些团队以前发现很难将他们的问题传达给开发团队,现在大多数人都知道有点降价,即使它必须被描述为你在reddit线程和youtube评论中键入的字符,以使文本加粗和斜体等,人们才能理解它是什么,但这意味着每个人都可以为此做出贡献

当涉及到调试测试时,它是一个非常有用的工具,尤其是当与剧本模式一起使用时,标准页面对象模型更是如此,因为pom没有提供额外的上下文,但它仍然很有用,因为每件事的描述方式都会导致在问题失败时从用户或组件的角度复制问题

我将它与流程图配对,在流程图中,我绘制出用户交互,将功能固定在它上,并能够以更直观的方式看到用户将能够做一些我们可能没有计划的事情,或者甚至可以找出一些我们不知何故错过的花哨场景

长版本更长 我这里的示例主要是javascript,因为我们一直在节点环境中开发,但是如果您想创建自己的版本,它应该不会有太大的不同

医生 从本质上讲,这是一个bit,只是为了以一种企业易于理解的方式显示功能文件,我也计划将测试报告集成到其中,并提供切换分支等功能

首先,您希望获得features文件夹中所有文件的简单数组,并选择结尾带有.feature的文件

本质上,您只需要在这里展平ls,这是可以改进的,但是我们需要使用node的LTS版本,而不是一般的最新版本

常数fs=要求“fs”; 常量路径=要求“路径”; const walkSync=d=>fs.statSyncd.isDirectory?fs.readdirSyncd.mapf=>walkSyncpath.joind,f:d; 常数展平=arr,结果=[]=>{ if!Array.isArrayarr{ 返回[…结果,arr]; } arr.forEacha=>{ 结果=A,结果 } 返回结果 } 功能功能文件夹{ const allFiles=flattWalkSyncPath.relativeprocess.cwd,文件夹 让可转换=[] 对于所有文件的let文件{ 如果file.match/.feature$/{ 可转换文件 } } 敞篷车 } ... 使用Gherkin解析器遍历所有这些文件以提取场景需要进行一些设置,尽管这非常简单,因为Gherkin有一个非常好的定义结构和已知的关键字

可以有很多自引用,当您将其归结为基本内容时,很多cucumber都是建立在定义良好的组件上的。例如,您可以将场景描述为具有描述、标记和名称的背景:

类转换{ ... 静态背景{ 返回{ cuke:`${background.keyword.trim}:`, 步骤:this.stepsbackground.steps, 位置:this.locationbackground.location, 关键词:background.keyword } } 静态场景{ 返回{ …这个背景场景, 标签:this.tagsscenario.tags, cuke:`${scenario.keyword.trim}:${scenario.name}\n`, 描述:`${scenario.description.replace/?!^\s+[>].$^.*$/gm,$1.trim}`, 示例:this.examplescenario.examples } } ... } 您可以完全充实它,以写入单个文件,或输出几个标记文件,确保在菜单文件中引用它们

流程图 流程图使问题更容易可视化,有一些工具可以使用降价来帮助生成这些问题,如下所示:

在后面,它最终会变成这样:

### Login

Customers should be able to log into their account, as long as they have registered.

...


```mermaid
 graph TD
        navigateToLogin["Navigate to Login"] -->logIn{"Login"}
        logIn -->validCredentials["Valid<br>Credentials"]
        logIn -->invalidCredentials{"Invalid<br>Credentials"}
        invalidCredentials -->blankPass["Blank Password"]
        invalidCredentials -->wrongPass["Wrong Password"]
        invalidCredentials -->blankEmail["Blank Email"]
        invalidCredentials -->wrongEmail["Wrong Email"]
        ...

        click blankPass "/#/areas/login/scenario-blank-password" "View Scenario"
        ...
 ```
它会将测试的任何部分分解为描述,这意味着如果CSS发生变化,我们将不会搜索不再存在的内容,甚至是调试该站点区域的新手也能够从测试失败中恢复过来

表达
我认为所有这些都应该说明如何在更普遍的意义上改善沟通。这一切都是为了确保项目能够被尽可能多的人访问,这些人可以输入一些有价值的东西,这些东西应该是您业务中的每个人都可以使用的

cucumber用于指定带有输入和预期结果的测试用例。它不执行测试,也不直接与被测软件交互。为此,您可以使用驱动浏览器(例如Selenium)的工具。然后你就有了类似JUnit的东西,它可以读取Cucumber规范,并让Selenium驱动浏览器。这是一个较长的故事。为了澄清,我可以推荐BDD行动手册。它很好地解释了概念和概念

BDD背后的动机,以及针对何种抽象级别的测试。我想如果你仅仅把它看作一个工具,你就会错过BDD非常有用的概念,而不仅仅是一些测试工具。@wemu我知道,作为一个工具,Cucumber只验证BDD测试规范。如果只是这样,为什么我们不能称之为测试工具呢?@kai不确定我理解你的意思。可以这样想:开发团队使用文字处理器。它有助于发展吗?是,例如,指定事物。它是一个开发工具吗?不,那么我们就不那么新鲜了吧?从这个意义上说,cucumber是一个执行规范的工具,其中可能包含基于定义语言的示例,该语言可能描述允许通过您提供的步骤定义针对您的代码运行该规范的行为。有点像那部分测试。你用它干什么取决于你自己。或者用它瞄准什么测试片。您可能只使用它为指定的行为生成文档,而根本不运行测试。因此,这是一个广泛的可能性部分。CuCumber用于指定带有输入和预期结果的测试用例。它不执行测试,也不直接与被测软件交互。为此,您可以使用驱动浏览器(例如Selenium)的工具。然后你就有了类似JUnit的东西,它可以读取Cucumber规范,并让Selenium驱动浏览器。这是一个较长的故事。为了澄清,我可以推荐BDD行动手册。它很好地解释了BDD背后的概念和动机,以及针对哪些抽象级别的测试。我想如果你仅仅把它看作一个工具,你就会错过BDD非常有用的概念,而不仅仅是一些测试工具。@wemu我知道,作为一个工具,Cucumber只验证BDD测试规范。如果只是这样,为什么我们不能称之为测试工具呢?@kai不确定我理解你的意思。可以这样想:开发团队使用文字处理器。它有助于发展吗?是,例如,指定事物。它是一个开发工具吗?不,那么我们就不那么新鲜了吧?从这个意义上说,cucumber是一个执行规范的工具,其中可能包含基于定义语言的示例,该语言可能描述允许通过您提供的步骤定义针对您的代码运行该规范的行为。有点像那部分测试。你用它干什么取决于你自己。或者用它瞄准什么测试片。您可能只使用它为指定的行为生成文档,而根本不运行测试。因此,这是一个广泛的可能性部分。@Kais最肯定的是,Cucumber允许在测试过程中维护此小黄瓜文档,而无需测试团队付出太多额外的努力。我认为这是一个跳板的原因是,如果您使用Cucumber框架,那么小黄瓜从一开始就是一个沟通催化剂,开发团队可以很容易地将其显示出来。我会更新我的答案,以涵盖你在那里的其他4点。@Kais我在那里为你添加了一个合适的部分谢谢你的详细答案。我理解你在“文档”部分写的内容。现在,让Cucumber执行您描述的脚本。脚本应该由实现步骤定义的代码调用吗?啊,我明白了!实际上,您应该能够将reporters和类似功能链接到cucumber,并将其与本机cucumber CLI一起使用。我将对此进行研究,但本质上所有这些都是一个报表格式化程序。Gherkin是一种通信工具,cucumber jvm、ruby和js库是第一个在开发一个使用该工具的框架方面显示出优势的库。。Cucumber的JS实现将自己描述为运行用普通语言编写的自动化测试的工具。我想我们已经说到点子上了,Cucumber是一个基于小黄瓜的测试者。Gherkin是一种普遍存在的语言,用作BDD的正式通信工具。@Kais最肯定的是,Cucumber允许在测试过程中维护此Gherkin文档,而无需测试团队付出太多额外的努力。我认为这是一个跳板的原因是,如果您使用Cucumber框架,那么小黄瓜从一开始就是一个沟通催化剂,开发团队可以很容易地将其显示出来。我会更新我的答案,以涵盖你在那里的其他4点。@Kais我在那里为你添加了一个合适的部分谢谢你的详细答案。我理解你在“文档”部分写的内容。现在,让Cucumber执行您描述的脚本。脚本应该由实现步骤定义的代码调用吗?啊,我明白了!实际上,您应该能够将reporters和类似功能链接到cucumber,并将其与本机cucumber CLI一起使用。我将对此进行研究,但本质上所有这些都是一个报表格式化程序。小黄瓜是一只猫
ion工具以及cucumber jvm、ruby和js库是第一批在开发利用该工具的框架方面表现出优势的。。Cucumber的JS实现将自己描述为运行用普通语言编写的自动化测试的工具。我想我们已经说到点子上了,Cucumber是一个基于小黄瓜的测试者。小黄瓜是一种普遍存在的语言,用作BDD的正式通信工具。