产品负责人、业务分析师、程序员和测试人员经常对谁应该承担什么责任感到困惑。
答案取决于几个因素,例如团队结构、技能、文化、流程等等。
三位一体
三位一体 是一个会议,它将用户故事转化为干净、全面的 Gherkin 场景。它涉及三个声音(至少)。
- 产品负责人 - 这个人最关心应用程序的范围。这包括将用户故事转换为一系列功能。随着测试人员提出边缘案例,产品负责人负责决定哪些在范围内。
- 测试人员 - 这个人会生成大量场景和边缘案例。应用程序将如何崩溃?在这些功能中,我们没有考虑到哪些用户故事?
- 开发人员 - 这个人会向场景添加许多步骤,并思考每个需求背后的细节。这个应用程序将如何执行?后台的一些障碍或需求是什么?
这些对话可以产生很棒的测试,因为每个朋友都从不同的角度看待产品。因此,至关重要的是所有这些角色都进行对话以共同发现示例。 示例映射 和事件风暴是发现示例的很好的协作分析技术。
最后,没有理由将这些会议限制为三个人,或者只在项目开始时举行一次这样的会议。不断完善您的功能,并与所有人协作,以最佳地了解如何谈论、开发和测试您的应用程序。
编写 Gherkin
首先,当场景中使用的语言和风格仍在建立时,建议整个团队协作编写 Gherkin。稍后,它可以由一对人有效地完成:一名开发人员(或负责自动化的某人)和一名测试人员(或负责质量的某人),只要他们的输出得到产品负责人(或业务代表)的积极审查。
编写功能
Cucumber 测试以“功能”的形式编写。每个功能都包含一个或多个“场景”。
让我们从一个示例功能文件开始
Feature: Explaining Cucumber
In order to gain an understanding of the Cucumber testing system
As a non-programmer
I want to have an overview of Cucumber that is understandable by non-geeks
Scenario: A worker seeks an overview of Cucumber
Given I have a coworker who knows a lot about Cucumber
When I ask my coworker to give an overview of how Cucumber works
And I listen to their explanation
Then I should have a basic understanding of Cucumber
请注意,场景不会深入到软件(或在这种情况下,同事)将执行的操作的细节。它专注于功能旨在服务的人(在本例中为“非程序员”)的视角。
每个功能文件在顶部都只有一个功能描述,但可以包含任意数量的场景。
Feature
行命名功能。这应该是一个简短的标签。
In order to
呈现拥有该功能的原因/理由。一般来说,这应该与项目的核心目标或“业务价值”之一相匹配,例如
- 保护收入
- 增加收入
- 管理成本
- 提高品牌价值
- 使产品引人注目
- 为客户提供更多价值
As a
描述该功能所服务的个人/用户的角色。
I want
是对预期功能执行操作的单句解释。
因此,这三行涵盖了为什么、谁和什么。然后,该文档通过场景进入“如何”。
场景
您可以为一个功能设置任意数量的场景。
如果您在一个功能中有很多很多场景,那么您实际上可能描述了多个功能。在这种情况下,我们建议将文档拆分为单独的功能定义(这里“很多很多”的定义是主观的,由您决定何时该拆分一个功能)。
第一行提供对场景旨在涵盖内容的简短描述。如果您无法用一句话(而不是一个长句)描述您的场景,那么它可能试图涵盖太多内容,应该拆分为多个场景。
之后是“步骤”的组合,即以关键字 Given
、When
和 Then
开头的行(通常按此顺序)。
您可以使用相同关键字(例如,Given there is something
后跟 Given I have another thing
)的许多行。为了提高可读性,您可以替换关键字 And
或 But
(例如,Given there is something
后跟 And I have another thing
)。
一般来说,任何 Given
步骤行都应该只描述一件事。如果您的步骤中间有“and”之类的词,那么您可能描述了不止一个步骤,应该将其拆分为多个步骤。
例如
When I fill in the "Name" field and the "Address" field
变成
When I fill in the "Name" field
And I fill in the "Address" field
Cucumber 功能最适合一致性。不要用不同的方式说同样的话,每次都用相同的方式说。
例如
Given I am logged in
和
Given I have logged in to the site
具有相同的含义,因此最好选择一个并在每个需要登录的场景中使用相同的行。