原创:testng 参数化(5)- 使用cucumber来读取feature文件
作者:互联网
目录
简介
前面提到,testng中使用@DataProvider读取csv中的数据文件,并且通过注解来引入csv文件,使得测试数据和测试逻辑组织相当简洁。
还有一种测试数据组织的方式,就是使用cucumber的feature文件来组织测试数据
cucumber介绍
Cucumber使用近似自然的语言去描述测试场景和测试用例。
在feature文件中定义测试场景,数据和步骤。
feature文件基本格式
- Given: 假设
- When: 执行操作
- Then: 验证
- Scenario :表示一个测试场景
- Scenario Outline :表示参数化的测试场景,与Examples配合使用
举一个例子
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");
}
}
总结
- 需要定义feature文件,用自然语言来描述测试用例和场景,易于理解
- 当用例中有较多的参数时候,获取feature文件中的参数,处理起来不太简洁,会在step函数中,用很多参数来接受
- 执行过程的注解也比较繁琐,需要指定feature文件和step 文件,同时还需要继承AbstractTestNGCucumberTests
- 使用testng + cucumber来运行测试,额外的工作比较多
- 依赖的jar包较多
- 总体感觉不如使用csv文件方便和简洁
标签:feature,testng,cucumber,io,import,public 来源: https://www.cnblogs.com/liang6/p/14437868.html