Cucumber/Automation 测试:如何使用 javascript 函数处理整体概念?

Cucumber/Automation testing: How to approach the overall concept using javascript functions?

首先让我说,我是 javascript 的新手,刚刚起步。这可能是一个广泛的问题,但我真的很想得到一个答案,这样我就能理解整个 concept/approach。我正在阅读这本名为《更敏捷测试》的书,其中有一段是关于自动化测试和页面对象模式的,以及以某种方式编写自动化测试用例是如何非常有用的,所以如果实际 UI 发生某些变化,我会只需要更改 object/function 并且使用该 object/function 的所有其他测试用例将在该更改后继续工作。

这是我的想法的一个例子,假设我有以下黄瓜场景

Given I'm on some page
When I login
Then I must see some other page

这就是上面的场景。

我是否应该像某种接收登录名和密码两个参数的函数那样实现我的登录代码,然后在 UI 上单击所需的 fields/buttons。如果我有那个功能,我会简单地使用 When('something'), function login() etc.

将来如果我需要在其他测试用例中使用登录,我会在给定或 when 语句中使用该函数。

这样做正确吗?

身份验证通常是所有测试的先决条件。 从Cucumber Wiki推荐为前提。

Given John has a Logged in 
Then Navigate the Home Page 

因此,您将为场景使用 Before Hook,可能带有标签,以便您可以过滤掉不要求身份验证作为先决条件的场景,例如身份验证失败 test/scenario。

您应该将登录代码实现为辅助函数,然后在登录步骤中调用它。

当您开始开发系统登录功能时,您将需要一个 When 步骤来登录,例如

Given I am registered
When I login
Then I should be logged in

完成后,您可以在

等步骤中重复使用此功能

Given I am logged in

具体实现,我在ruby里做,你要适配js。

# features/step_definitions/login_steps.rb
module LoginStepHelper
  def login_as(user:)
    # assumes user is an object that knows its email, password etc.
    ...
  end
end
World LoginStepHelper

When I login
  login_as user: @i # assumes you have setup who you are earlier
end

Given I am logged in
  login_as user: @i
end

请注意,有很多不同的步骤定义来登录是完全没问题的,只要它们使用相同的辅助方法来完成实际工作。

强烈建议您不要使用before hooks或tags来控制登录。如果您正在编写许多需要登录才能执行某些操作的场景,请改用后台。

例如

Feature: Registering gives benefits

Background:
  Given I am registered
  And I am logged in


Scenario: Have a history
  When I view my history
  Then 
...

而不是

Feature: Registering gives benefits

  @logged_in
  Scenario: Have a history
    When I view my history
    ...

@hooks 旨在控制事物的技术方面 运行 例如@wip,@javascript 不要将它们用于业务功能。

最后,您可以在示例项目 (https://github.com/diabolo/cuke_up/tree/master/features) 的这组功能中更详细地看到这一点