在每个场景之前执行步骤? (黄瓜 + 量角器 + angular)

Execute steps before each scenario? (Cucumber + protractor + angular)

我需要为我的 angular 5 应用程序创建 e2e 测试。我们正在使用黄瓜和量角器。

我有具体的列表步骤,我应该在开始某些场景时执行这些步骤。

这是一个例子:

Scenario: I need do process below before some scenarious
    Given I load a html page
    When I filling the form
      | name | testname|
      | gender        | male|
      | date | 08/18            |
      | surmane       | TestSurname            |
 And I click the checkbox
    And I click the "SAVE AND CONTINUE" button
    And I submit the details
    Then I should be redirected to the second page

然后在开始其他场景时,我需要从第一个场景执行相同的步骤。

Scenario: Scenario 2 - i need the same from scenario 1
Given All steps from scenario 1 done and i redirected to the second page
 ...
 
Scenario: Scenario 3 - i need the same from scenario 1
Given All steps from scenario 1 done and i redirected to the second page
 ...

有没有把所有步骤都放到一个场景中使用的解决方案?

如何为此创建 "Before" 挂钩?例如

Before('@copyScenario', () => {
 //.......list of steps
});

我不想 copy/paste 它...有什么想法吗?

执行此操作的最佳方法是陈述场景的意图,而不是在功能文件中列出操作。

BDD(因此 Cucumber 作为 BDD 工具)的目的是探索您正在实施的特性、能力和业务需求,以便业务人员(通常是非技术人员)拥有相同的作为开发和测试功能的人员对该功能的理解。

这意味着您写在答案中的场景更像是:

Scenario: Registering a user
   Given I am on the registrations page
   When I fill in my personal details
    And submit the registration form
   Then I should be taken to the dashboard

之后,您将编写一个新步骤来编译这些:

Scenario: Searching the site
   Given I have registered an account
     And I am logged in
   When I search the site for "product"
   Then I should see results for "product"

这 - 从非技术业务人员的角度来看,让他们看到测试背后的意图,并通过使每个测试步骤更加原子化(让他们能够无需复制和粘贴即可在所有地方使用,功能相同)。

还有其他替代方法,但我不打算在这里说明它们,因为我相信我上面的建议从长远来看会对您有所帮助。

这可以通过 cucumber 中称为 'Background' 的关键字来完成。 你应该像下面这样使用:

  Background: Always do these steps before executing any scenarios
   Given ....
   When ....
   Then ....

Scenario 1: Do after performing Background
...
Scenario 2: Do after performing Background
...

上面的脚本是这样的:- 它将执行后台步骤,然后执行场景 1,然后在完成场景 1 后,再次执行后台步骤,然后执行场景 2。