如何在 Gherkin+Cucumber+Cypress 中命令用户清理

问题描述 投票:0回答:1

我正在为以用户操作为中心的 WebUI 应用程序编写测试(freeipa)。

我想测试多个用户的添加和删除。为此,我需要确保之前运行的用户被清理,特别是因为在本地开发中,后端应用程序在不重新启动的情况下保持运行(在 Github-CI 中,它会为每次 PR 运行生成)。

相关片段:

 Background:
    Given I am logged in as "admin"
    Given I am on "active-users" page

  Scenario Outline: Add a new user
    When I click on "Add" button
    * I type in the field "User login" text "<userLogin>"
    * I type in the field "First name" text "<firstName>"
    * I type in the field "Last name" text "<lastName>"
    * I type in the field "New Password" text "<password>"
    * I type in the field "Verify password" text "<password>"
    * in the modal dialog I click on "Add" button
    Then I should see "<userLogin>" entry in the data table
    Examples:
      | userLogin | firstName | lastName | password             |
      | testuser1 | Arthur    | Dent     | ILoveKlingonPoetry42 |
      | testuser2 | Banana    | Bread    | FishAndChips097      |
      | testuser3 | Cypress   | Gateway  | TestingIsFun73       |


  Scenario: Delete a user
    Given I should see "testuser1" entry in the data table
    When I select entry "testuser1" in the data table
    And I click on "Delete" button
    Then I see "Remove active users" modal

    When in the modal dialog I check "Delete" radio selector
    And in the modal dialog I click on "Delete" button
    Then I should not see "testuser1" entry in the data table

我尝试过的:

  • Before
    挂钩
    • 这是在
      Background
      之前执行的(在管理员登录之前),因此失败了
  • 将“干净状态”步骤放入
    Background
    块中
    • 这会在每个场景之前执行,因此
      Delete a user
      失败
  • 将“清洁状态”步骤作为
    Add a new user
    场景中的第一步:
    • 这违背了让多个用户可见的目的。

我应该如何重构/排序我的测试,以便以空表开始

Add a new user
,但保留添加的用户以进行删除? 如果这违反了耦合原则,是否可以在另一个场景中重用场景? 谢谢!

testing cypress gherkin
1个回答
0
投票

由于您有 3 个示例用户,您是否只能在用户数等于 3 时运行“clean state”?或者仅当

testuser2
testuser3
存在时,因为
Scenario: Delete a user
将处理 #1。

将步骤放在背景中最后。


还有带有标签的条件

Before()
,但我不认为它直接插入到上面的测试套件中(因为
Scenario Outline: Add a new user
运行了三次)。

Before({ tags: "@clean" }, function () {
  loginAdmin()
  cleanState()
})

另一件事要考虑的是丝柏/摩卡

before()
,而不是黄瓜
Before()
,它相当于
beforeEach()

cypress/support/e2e.ts

before(() => {
  loginAdmin()
  cleanState()
})
© www.soinside.com 2019 - 2024. All rights reserved.