其他分享
首页 > 其他分享> > 原创:testng 参数化(5)- 使用cucumber来读取feature文件

原创:testng 参数化(5)- 使用cucumber来读取feature文件

作者:互联网

目录

简介

前面提到,testng中使用@DataProvider读取csv中的数据文件,并且通过注解来引入csv文件,使得测试数据和测试逻辑组织相当简洁。
还有一种测试数据组织的方式,就是使用cucumber的feature文件来组织测试数据

cucumber介绍

Cucumber使用近似自然的语言去描述测试场景和测试用例。
在feature文件中定义测试场景,数据和步骤。

feature文件基本格式

举一个例子

  Feature: cucumber demo test
    Scenario Outline: login
      Given 登陆页面
      When 登陆页面中输入账户<account>密码<pwd>点击登陆按钮
      Then 验证登陆状态<state>和登陆信息<msg>

      Examples:

      |account  |   pwd   |state|msg  |
      |liang    |123456   |0    |success|
      |liang    |abc      |1    |failure|

cucumber 依赖

<dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-testng</artifactId>
            <version>6.9.1</version>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-core</artifactId>
            <version>6.9.1</version>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>6.9.1</version>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-spring</artifactId>
            <version>6.9.1</version>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>6.9.1</version>
        </dependency>

定义steps类

基于上面的feature文件,定义每一步骤的处理函数

package train.testng;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
import io.cucumber.java.en.Then;

public class Liang6LoginStep {

    @Given("^登陆页面$")
    public void loginPage(){
        System.out.println("open the login page");
    }

    @When("^登陆页面中输入账户(.*)密码(.*)点击登陆按钮$")
    public void clickLoginBtn(String account, String pwd){
        System.out.println("login account is : "+ account + " | pwd is : " + pwd);
    }
    
    @Then("^验证登陆状态(.*)和登陆信息(.*)$")
    public void verify(String state, String msg){
        System.out.println("login state is : " + state + " | msg is : " + msg);
    }
}

创建Runner类

package train.testng;

import io.cucumber.junit.Cucumber;
import io.cucumber.spring.CucumberContextConfiguration;
import io.cucumber.testng.*;
import org.junit.runner.RunWith;
import org.testng.annotations.*;

@RunWith(Cucumber.class)
@CucumberOptions(
        features = {"src/main/java/train/testng/liang6cucumber.feature"},
        glue = {"train/testng"},
        plugin = {"pretty", "html:target/cucumber", "json:target/json/LoginTest.json","junit:target/junit"},
        monochrome = true)
@CucumberContextConfiguration
public class Liang6DemoCucumberRunner extends AbstractTestNGCucumberTests {

    @BeforeClass
    public void beforeTest(){
        System.out.println("start to do cucumber test");
    }

    @AfterClass
    public static void afterTest(){
        System.out.println("finish doing cucumber test");
    }

}

总结

  1. 需要定义feature文件,用自然语言来描述测试用例和场景,易于理解
  2. 当用例中有较多的参数时候,获取feature文件中的参数,处理起来不太简洁,会在step函数中,用很多参数来接受
  3. 执行过程的注解也比较繁琐,需要指定feature文件和step 文件,同时还需要继承AbstractTestNGCucumberTests
  4. 使用testng + cucumber来运行测试,额外的工作比较多
  5. 依赖的jar包较多
  6. 总体感觉不如使用csv文件方便和简洁

标签:feature,testng,cucumber,io,import,public
来源: https://www.cnblogs.com/liang6/p/14437868.html