0

目前我正在使用BDD 和 Cucumber作为测试优先 开发方法的项目。我正在努力理解 UI 与我的后端代码的集成。

根据我的理解BDD->Write failed Scenario (Feature File)->Write Step Definition (Step Def File)->Application Code (Java Class) 我已经使用测试优先方法(Java cLass)实现了我的后端。接下来,我需要集成我的 UI 部分。我是否需要将我的前端(例如动态 Web 项目)创建为一个单独的项目,然后如何遵循测试优先的方式。互联网上的一切都只是告诉 Cucumber 和 Selenium 作为自动化框架。我找不到一个很好的资源来开发一个完整的端到端(即使是非常小的应用程序),但同时使用前端和后端作为测试优先的方法。
我不想了解测试,我正在尝试将 BDD 应用为测试优先的开发方法

4

1 回答 1

1

首先,在处理 Web 应用程序时,您最初的重点应该是应用程序做什么以及为什么它很重要。所以它是如何实现的完全无关紧要。

使用 Cucumber 作为使用 BDD 驱动开发的工具,您只需编写由业务想要什么以及为什么他们想要的东西如此重要以至于他们希望您尽快处理它的场景指导的场景。

使用 UI,用户将做某事(WHAT),而那件事很重要(WHY)。他们正在做的事情将需要与 UI 交互(此时他们如何交互完全无关紧要。这种交互在场景 WHEN 中捕获。

为了让他们进行这种互动,有些事情必须已经发生。这些东西被场景 GIVENS 捕捉到。用户与系统交互后,需要在 UI 中进行更改。您在 THENS 场景中对此进行检查。

一旦你有了你的场景,你就可以定义并开始实施你的步骤定义。通常,我将每个步骤定义都作为对辅助方法的一次调用,因此这些步骤只做一件事,即将场景中的一行转换为您的编程语言中的调用。

现在您可以在您的编程语言中定义一个方法,然后您才应该开始考虑如何使这一切工作。

从一个您理解的非常简单的示例开始这项工作。我会选择注册。

Scenario: Register
  Given I am a new user
  When I register
  Then I should be registered

现在我们可以做步骤定义了,(我会用 ruby​​,你必须翻译)

Given 'I am a new user' do
  @i = create_new_user
end

When 'I register' do
  register(user: @i)
end

Then 'I should be registered' do
  check_registration(user: @i)
end

现在我们制作我们的辅助方法

def create_new_user
  # here you will create a new user. The user will know their email and password
end

def register(user: )
  # here you can use a tool, perhaps selenium, to goto the registration page 
  # and fill in the registration from. You can use the user to get the email,
  # password and any other registration details
end 

def check_registration(user: )
  # here you will look at where you are in the UI and look at the page to
  # confirm the user is registered
end

差不多就是这样。您只需为您发现的每一个新行为重复该模式。

一些进一步的提示

大多数 Givens 不需要通过 UI 所有 WHENS 与 UI 交互所有 THENS 都应该与 UI 交互

您对后端所做的一切与您如何继续使用 BDD 开发新行为完全无关。BDD 就是要找出什么和为什么。只有当您开始考虑如何使您指定的行为发挥作用时,您的后端才会变得相关。

如果你以小的增量步骤工作,你可以使用你以前的行为来建立你的新行为。因此,一旦我们可以注册,我们就可以开始考虑登录

Scenario: Sign in
  Given I am registered
  When I sign in
  Then I should be signed in

我们遵循与上面完全相同的模式。

请注意,因为 Given 不必通过 UI,我们可以执行类似的操作

Given 'I am registered' do
  @i = create_registered_user
end 

def create_registered_user
  user = create_new_user
  save_user_to_db(user)
  return user
end
于 2020-05-20T07:28:27.987 回答