Java 遵循BDD时单元测试与端到端(集成本身)之间的关系

Java 遵循BDD时单元测试与端到端(集成本身)之间的关系,java,unit-testing,cucumber,bdd,gherkin,Java,Unit Testing,Cucumber,Bdd,Gherkin,我的问题还涉及到谁在典型的BDD中做什么。据我所知,产品负责人在Gherkin中提出了用户故事,QA在功能文件中编写端到端测试的场景,Dev在何处编写代码,他是否也遵循BDD?。在这一点上,如果开发人员编写了自动化单元测试,那么QA是否可以利用它进行端到端测试,或者它们可以完全不同 我的问题是,在遵循BDD的同时,开发人员和QA如何在编码方面利用彼此的工作。我不知道如何连接这些点 让我们以一个基于JAVA的应用程序为例,QA已经在使用Cucumber和Selenium Webdriver进行自动

我的问题还涉及到谁在典型的BDD中做什么。据我所知,产品负责人在Gherkin中提出了用户故事,QA在功能文件中编写端到端测试的场景,Dev在何处编写代码,他是否也遵循BDD?。在这一点上,如果开发人员编写了自动化单元测试,那么QA是否可以利用它进行端到端测试,或者它们可以完全不同

我的问题是,在遵循BDD的同时,开发人员和QA如何在编码方面利用彼此的工作。我不知道如何连接这些点


让我们以一个基于JAVA的应用程序为例,QA已经在使用Cucumber和Selenium Webdriver进行自动化测试

如果您正在练习BDD,那么您将首先创建规范来定义行为,然后才实施该行为,即编写生产代码。在哪个级别上定义行为的相关性较小,尽管在单元测试级别,大多数人会称此TDD,即使它不一定是测试驱动的,因为测试是为您想要编写的代码设计的。开发人员和QA将协作定义行为,并实施测试和生产代码。理想情况下,我希望在不同的级别上进行不同的测试,最终的最高级别是E2E测试。我也会确保不在每个级别上都重新测试所有内容,而只测试在该级别上有意义的内容。例如:计算值的方法应进行单元测试,该值在前端的显示方式将在前端进行测试,但仍然可以是单元测试,如何从后端获取值将是集成测试,等等。
您可能有兴趣阅读更多关于BDD的信息,可以在这里:,或者在这里的任何相关博客帖子中:,或者在Cucumber Book/Cucumber for Java Book中。

如果您正在练习BDD,那么您将创建规范,首先定义行为,然后才实现此行为,即编写生产代码。在哪个级别上定义行为的相关性较小,尽管在单元测试级别,大多数人会称此TDD,即使它不一定是测试驱动的,因为测试是为您想要编写的代码设计的。开发人员和QA将协作定义行为,并实施测试和生产代码。理想情况下,我希望在不同的级别上进行不同的测试,最终的最高级别是E2E测试。我也会确保不在每个级别上都重新测试所有内容,而只测试在该级别上有意义的内容。例如:计算值的方法应进行单元测试,该值在前端的显示方式将在前端进行测试,但仍然可以是单元测试,如何从后端获取值将是集成测试,等等。
您可能有兴趣阅读更多关于BDD的信息,可以在这里:,或者在这里的任何相关博客帖子中:,或者在Cumber Book/Cumber for Java Book中。

关于开发人员和QA人员之间的BDD/TDD对等编程,如何实现e2e测试自动化

这可能需要

E2e服务和应用程序部署自动化一次过-理想情况下在任何工程师笔记本电脑上工作 用例设置 在数据存储/数据库中设置行为应用程序状态更新数据/db模式,如果功能使用密钥开关,则配置文件 确定行为输入和输出的明确定义 定义特征触发器和验证规则 实现应用程序逻辑 用实现的逻辑验证验证规则
我可能听上去有很多想法需要同时去做,因此很多人会不鼓励实施e2e,我想通过正确的工具集,这个过程可以非常容易地实现。

开发人员和QA人员之间的BDD/TDD对等编程如何,从而实现e2e测试自动化

这可能需要

E2e服务和应用程序部署自动化一次过-理想情况下在任何工程师笔记本电脑上工作 用例设置 在数据存储/数据库中设置行为应用程序状态更新数据/db模式,如果功能使用密钥开关,则配置文件 确定行为输入和输出的明确定义 定义特征触发器和验证规则 实现应用程序逻辑 用实现的逻辑验证验证规则
我可能听上去有很多想法需要同时去做,因此很多人会不鼓励实施e2e,我想有了正确的工具集,这个过程会非常容易实施。

我正在一个应用BDD的项目中工作。当BA创建一个票证并写下所有场景时,它被分配给开发人员。同时,QA还创建一个QA记录单,以执行与该开发记录单相关的工作。 但是QA只有在开发人员的代码正在审核或者已经完成时才会开始编写自动化测试。这是因为该特性需要可用于测试。 当QA开始编码时,应该完成该票据的所有单元测试。 所以要利用这项工作 在开发和质量保证方面,我们提出了一个解决方案。虽然它处于试点阶段,但尚未正式应用。 QA需要参与单元测试评审。这意味着他/她需要查看所有的单元测试,如果他/她认为还有一些案例需要添加或删除,则给出评论。QA还可以在单元测试中获得测试覆盖率,并根据覆盖率决定编写自动化测试。 在这里,QA需要积极参与并决定在e2e中测试什么。 如果您可以与开发人员面对面地讨论以获得单元测试覆盖率,这会更容易,但我认为审查代码更客观。同样,没有任何开发人员愿意告诉QA他的工作。 然而,该解决方案需要QA工程师具备更多技能。没有任何QA能够阅读和理解开发代码

这是我们的QA团队在当前项目中给出的想法,我不知道是否有任何项目应用了这一点。
这真是个好问题。我还想听取其他人的更多意见/想法,他们也希望利用QA和开发人员的工作。

我正在一个应用BDD的项目中工作。当BA创建一个票证并写下所有场景时,它被分配给开发人员。同时,QA还创建一个QA记录单,以执行与该开发记录单相关的工作。 但是QA只有在开发人员的代码正在审核或者已经完成时才会开始编写自动化测试。这是因为该特性需要可用于测试。 当QA开始编码时,应该完成该票据的所有单元测试。 因此,为了充分利用DEV和QA的工作,我们提出了一个解决方案。虽然它处于试点阶段,但尚未正式应用。 QA需要参与单元测试评审。这意味着他/她需要查看所有的单元测试,如果他/她认为还有一些案例需要添加或删除,则给出评论。QA还可以在单元测试中获得测试覆盖率,并根据覆盖率决定编写自动化测试。 在这里,QA需要积极参与并决定在e2e中测试什么。 如果您可以与开发人员面对面地讨论以获得单元测试覆盖率,这会更容易,但我认为审查代码更客观。同样,没有任何开发人员愿意告诉QA他的工作。 然而,该解决方案需要QA工程师具备更多技能。没有任何QA能够阅读和理解开发代码

这是我们的QA团队在当前项目中给出的想法,我不知道是否有任何项目应用了这一点。
这真是个好问题。我还想听取其他人的更多意见/想法,他们也希望利用QA和DEV的工作。

您提到的很多内容对我来说都是有意义的。然而,我最初的问题的一部分也是你停下来的地方。由于QA可能会使用E2E进行后端测试,s/he能否利用相同的BDD?作为用户,它可能没有意义。因为用户不太关心幕后发生的事情。可以公平地说BDD不应该用于E2E吗?实际上,我认为BDD非常适合E2E,因为这是您试图描述和构建的实际行为。但是,如果您在应用程序构建之后使用Cucumber或类似的工具来自动化E2E测试,那么您就不会使用BDD,因为它不会推动开发。然而,我最初的问题的一部分也是你停下来的地方。由于QA可能会使用E2E进行后端测试,s/he能否利用相同的BDD?作为用户,它可能没有意义。因为用户不太关心幕后发生的事情。可以公平地说BDD不应该用于E2E吗?实际上,我认为BDD非常适合E2E,因为这是您试图描述和构建的实际行为。但是,如果您在应用程序已经构建之后使用Cucumber或类似的工具来自动化E2E测试,那么您就不会执行BDD,因为它不会推动开发。然而,我的问题更多的是什么部分,而不是如何。假设Dev/QA/PO提供了一个用户故事,该故事后来被转换为一个特性,然后再假设一个场景。现在,开发人员开始使用经典的TDD方法,在该方法中,她编码和重构直到场景通过。这是TDD甚至BDD本身的脊骨。我的问题是,那又怎样?自动化QA如何从这里挑选它进行E2E测试。因为E2E将围绕着一系列的东西,而前者则不是。他能利用已经编写好的代码进行E2E测试吗?@Anup-我想这一切都可以归结为自动化方面,在我们的案例中,我们几乎在所有方面都使用了它,从设置开发/登台环境到再现生产问题,最重要的是E2E测试。所有这一切都表明,所有这些之间有很多重叠,其中某个模块化的e2e工作流负责设置应用程序系统、数据存储/数据库,然后进行构建和部署。自动化,最终回归最复杂的工作流,关注所有应用程序输入和输出。实际上,一旦你有了应用程序数据模型添加
在e2e中,所有后续用例都有很多相似之处。有一个时刻,我们会发出这样的呼吁:唯一的前进之路是E2E或TDD,就像我们所做的那样,显然,在这一点上,我们已经有了多堆栈java/go/javascript应用程序,所以我们所做的是使用E2E测试冻结应用程序行为,该测试基于QA以前使用的半自动回归脚本,从那时起,我们就明确地实现了TDDAll,它说我们发现TDD/E2E最具挑战性的方面之一是数据组织,尤其是每季度,我们为共享应用程序在不同的团队中生成数百个与应用程序行为相关的用例。这里有一些详细的数据组织策略可以帮助您:我有点明白您的建议。然而,我的问题更多的是什么部分,而不是如何。假设Dev/QA/PO提供了一个用户故事,该故事后来被转换为一个特性,然后再假设一个场景。现在,开发人员开始使用经典的TDD方法,在该方法中,她编码和重构直到场景通过。这是TDD甚至BDD本身的脊骨。我的问题是,那又怎样?自动化QA如何从这里挑选它进行E2E测试。因为E2E将围绕着一系列的东西,而前者则不是。他能利用已经编写好的代码进行E2E测试吗?@Anup-我想这一切都可以归结为自动化方面,在我们的案例中,我们几乎在所有方面都使用了它,从设置开发/登台环境到再现生产问题,最重要的是E2E测试。所有这一切都表明,所有这些之间有很多重叠,其中某个模块化的e2e工作流负责设置应用程序系统、数据存储/数据库,然后进行构建和部署。自动化,最终回归最复杂的工作流,关注所有应用程序输入和输出。实际上,一旦在e2e中处理了应用程序数据模型,所有后续用例都会有很多相似之处。有一个时刻,我们会发出这样的呼吁:唯一的前进之路是E2E或TDD,就像我们所做的那样,显然,在这一点上,我们已经有了多堆栈java/go/javascript应用程序,所以我们所做的是使用E2E测试冻结应用程序行为,该测试基于QA以前使用的半自动回归脚本,从那时起,我们就明确地实现了TDDAll,它说我们发现TDD/E2E最具挑战性的方面之一是数据组织,尤其是每季度,我们为共享应用程序在不同的团队中生成数百个与应用程序行为相关的用例。这里有一些详细的数据组织策略可以帮助您:这是真的。我仍然在努力理解或从现实世界中找到一个例子,在这个例子中,所有的用户故事都经过整理和分解,变成场景,然后被用于UAT。我理解它的单元测试部分没有问题。但是,接下来会发生什么是我的问题@Thach Hoang,我也遵循了与你所做的完全相似的东西。但问题是,丹·诺斯所开始的BDD是真的吗?是真的。我仍然在努力理解或从现实世界中找到一个例子,在这个例子中,所有的用户故事都经过整理和分解,变成场景,然后被用于UAT。我理解它的单元测试部分没有问题。但是,接下来会发生什么是我的问题@Thach Hoang,我也遵循了与你所做的完全相似的东西。但问题仍然是,丹·诺斯所开始的BDD是真的吗?