关于编写场景(功能测试)的主要想法?

Main idea about writing scenarios (functional testing)?

美好的一天,

我一直在思考描述特征的实质(Gherkin语法),找不到最佳答案。

同一场景的两个示例:

Scenario: Creation of a new task
Given I see the button for the creation of a new task
 When I click the button in order to create a new task
 Then I see the task editor

Scenario: Creation of a new task
Given I see the button "Create task"
 When I click the button "Create task"
 Then I see page "Task editor" has been opened

我看到了主要区别:

  1. 第一个变体是接口无关的。但是,您必须使用选择器或类似工具来找到确切的元素,然后您可以更改界面中的所有内容,并且这些测试不会失败(作为第二个变体)。

  2. 第一个变体不是声明性的。通常,您不能重复使用它来描述任何其他界面行为。

  3. 根据我的口味,第二个变体更容易理解场景中发生的事情。

我认为,第二个变体更灵活,可以让您更快地编写场景,但同时也存在问题:

那么,您能说说,您对此有何看法?

我认为灵活性、速度、质量和可读性(第二个变体)比第一个变体(除了可读性和 "stability"?什么都没有)好得多,但我不确定。是的,你在场景中放置了一些数据,但你几乎从不更改它们,即使你会更改它,它也可能在 seconds/minutes.

中固定

您在项目中使用什么,为什么?

而且,主要问题是,哪种变体更好?

请说出你的想法。

在我们目前的公司(数十项服务,企业级,用 BDD 编写),我们从第一个变体开始。

Scenario: Creation of a new task
Given I see the button for the creation of a new task
 When I click the button in order to create a new task
 Then I see the task editor

我们认为它更面向业务,更具描述性和更清晰。

但是几个月后现实生活告诉我们第二个版本更灵活,使用这个版本问题更少。

最后我们将所有场景重写为第二个版本

Scenario: Creation of a new task
Given I see the button "Create task"
 When I click the button "Create task"
 Then I see page "Task editor" has been opened

到目前为止,我们很高兴使用它。

总结: 基于几个月使用这两个版本,在团队中编写,使用 BDD 风格(首先测试)企业软件:第二个版本 win。即使使用 BDD 理论,第一个版本可能看起来更好。