有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在功能文件中概括登录步骤并避免重复步骤?

我在自动化项目中使用Selenium+Cucumber,并使用Java编写。我已经编写了一个功能文件,在每个场景中我都会重复4-5个登录步骤。下面是在每个场景中重复出现的登录行

Scenario: Display the relevant items assigned when logged in as an testUser
    Given I am on the login page
    And I fill email with valid testUser email address
    And I fill password with valid testUser password
    And I press Log in
    When I click on the selector
    Then I should see all the items assigned to my testUser account

这里的密钥工作“testUser”是参数化的。有时,对另一个用户(如“stageUser”)重复相同的步骤。对于这类步骤,Cucumber是否提供了一种以某种方式概括这些步骤的方法?因为每一个场景都是从这6行开始的,这样一来,scearios看起来就更大了,而且有了这些重复的步骤

任何建议都将不胜感激


共 (3) 个答案

  1. # 1 楼答案

    使用@Before和@After注释分别在每个场景之前和之后运行。当我们需要执行一些全局设置/清理时:@BeforeSuite和@AfterSuite

  2. # 2 楼答案

    写出更好的场景和步骤。你的一切都是关于你是如何登录的,所以重复是痛苦的。相反,写下只与你正在做的事情有关的步骤;这些更容易重复使用

    所以

    Scenario: Login
      Given I am registered
      When I login
      Then I should be logged in
    

    后来

    Feature: Something that requires me to be logged in
    
    Background
      Given I am logged in
    
    Scenario: Do something
      When I do something
      Then something should be done
    

    看看我是如何把一大堆背景简化成更简单、更抽象的东西的

    我将在这里给出一些关于实现的提示

    Given I am logged in
      @i = create_registered_user
      login(user: @i
    end
    
    When I login
      login(user: @i)
    end
    
    Given I am registered
      @i = create_registered_user
    end
    
    

    您可以以任何复杂程度应用此方法。请注意,在上一个场景中,我们是如何使用相对复杂的注册行为的,而该场景或功能甚至没有意识到(注册是登录的一部分)

  3. # 3 楼答案

    你应该考虑把常见的步骤移到后台。 看起来有点像黑客,但你可以在下面的场景描述中提到用户

      Background: 
        Given Do given
        When Do when
        Then Do then
    
      Scenario: User is - Test User One
        And user name is
    
      Scenario: User is - Test User Two
        And user name is
    

    然后在Before钩子中捕获该用户。然后,用户将在场景中的各个步骤中可用

    private String user;
    
    @Before
    public void before(Scenario scen) {
        this.user = scen.getName().substring(scen.getName().indexOf('-') + 2);
    }