cucumber+springboot UI自动化测试框架搭建

整合目标

本文对Cucumber、feature、spring boot 它们的基本使用和概念就不做解释了,本文主要将它们在项目中进行整合使用,因此在通过spring boot框架开发项目的时候,又能通过 cucumber编写测试用例对项目测试。

1.前提要求

整合之前需要你自己在本地搭建起spring boot项目环境,网上关于spring boot项目搭建很多资料,不明白自行单独解决

2.cucumber和springBoot整合目录

在这里插入图片描述

3. idea安装cucumber插件

在这里插入图片描述

4.pom.xml导入Cucumber相关jar包

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// 请在springBoot项目主目录中的pom.xml(前提通过maven构建项目)中导入cucumber相关的jar包
<!--    依赖cucumber-->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java8</artifactId>
            <version>3.0.2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-spring</artifactId>
            <version>3.0.2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>3.0.2</version>
            <scope>test</scope>
        </dependency>

5.新建cucumber工作目录

  1. 在src目录下新建test目录
  2. test目录下新建 java 目录,并将java目录在idea中设置为:idea中选中此java目录,右键->Mark Directory as -> Test Sources Root
  3. test目录下新建 resources 目录,也将此目录设置为:idea中选中此java目录,右键->Mark Directory as -> Test Resources Root
  4. 在对应目录下新建包名,和文件,目录参考下图:
    在这里插入图片描述

6.在resources->features下新建2个feature用例文件

新建第一个 用例描述文件:feature-file-01.feature

Feature: the greeting msg can be retrieved
  Scenario: client makes call to GET /greeting
    Given name is "User"
    When the client calls /greeting
    Then the client receives status code of 200
    And the client receives content "Hello, User!"

新建第二个 用例描述文件:feature-file-02.feature

Feature: Is it Friday yet?
  Everybody wants to know when it's Friday

  Scenario: Sunday isn't Friday
    Given today is Sunday
    When I ask whether it's Friday yet
    Then I should be told "Nop

注意:
1:以上用例描述的语法说明:其中 Feature Scenario Given When Then And 等为 cucumber的Gherkin关键字,具体的使用方法请网上查阅其它资料,本文主要是整合使用内容。

7.新建cucumber运行入口文件

CucumberSpringBootApplicationTests.java

package com.foo.demo;

import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class) //通过Cucumber方式运行这个类
@CucumberOptions(features = "classpath:features/") //classpath:features/ 表示要运行用例描述文件的目录
public class CucumberSpringBootApplicationTests {

}

8.运行后即可将用例描述文件转换为用例实现类文件方法

1:在 CucumberSpringBootApplicationTests中运行此类。

在这里插入图片描述
2:即可在控制台打印出未实现的用例描述所对应的方法:
在这里插入图片描述

以上 控制台中 打印出的方法 复制到 test->java->com.foo.demo.stepdefs-> MyStepdefs1.java 中即可,其中MyStepdefs1中的步骤方法名可以设置为中文,但feature文件中关键字是英文,那么 中英文关键字对应关系如下:
在这里插入图片描述

9.针对新建的2个feature用例文件,创建对应的用例实现类,即完成用例的具体实现

新建第一个 用例实现类文件:MyStepdefs1.java

// 创建第一个用例实现文件
package com.foo.demo.stepdefs; 

import com.zhiqi.futures.service.AlgorithmBaseOfOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import cucumber.api.java8.Zh_cn;
import java.util.Map;

/*
* 注意:在这个用例实现文件中可以不用导入 springBoot的启动入口文件,也就是不管
* 有多少个用例文件时,只需要保证有一个用例文件导入了 springBoot的启动入口文件即可,比如我这就只
* 在 MyStepdefs2.java 进行了 导入:@SpringBootTest(classes = FuturesApplication.class)
*/
public class MyStepdefs1 implements Zh_cn {
	
	String name;
	
	@Autowired
	AlgorithmBaseOfOrderService algorithmBaseOfOrderService;

	public MyStepdefs1() {("^the client calls \\/greeting", () -> {
			System.out.println("-----Cucumber框架 即将调用spring boot框架 中的代码----");
			
			//此处为调用 springBoot中service层代码,从而得到返回数据可进行被测项目的测试
			Map<Integer,Double> map = algorithmBaseOfOrderService.calculationEveryStepMinPriceOrder("8d018b2027b711ea9a3100163e00a5d2");
			System.out.println("map:" + map);
		});
		
		假设("name is {string}", (String name) -> {
			this.name = name;
		});

		那么("the client receives status code of {int}", (Integer statusCode) -> {
			assert true;
		});

		同时("the client receives content {string}", (String greeting) -> {
			assert true;
		});
	}
}

新建第二个 用例实现类: MyStepdefs2.java

// 创建第二个用例实现类文件
package com.foo.demo.stepdefs;

import com.zhiqi.futures.FuturesApplication;
import com.zhiqi.futures.service.AlgorithmBaseOfOrderService;
import cucumber.api.java8.Zh_cn;//将feature中用例描述关键字转为中文的支持
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Map;

@SpringBootTest(classes = FuturesApplication.class) //注意:FuturesApplication引入的是springboot中的启动入口文件,此处为cucumber整合springBoot的关键所在。
//其中SpringBootTest注解即可表示 测试的springBoot项目
public class MyStepdefs2 implements Zh_cn {

	//通过 Autowired注解 注入springBoot中的service层,从而实现在cucumber用例中调用被测项目的service层进行测试
    @Autowired
    AlgorithmBaseOfOrderService algorithmBaseOfOrderService;
    
    public MyStepdefs2() {
		
		/*
		*	其中 假设 当 那么 这样的方法是由 feature文件中自动生成的。
		*/
        假设("^today is Sunday$", () -> {
            System.out.println("1");

        });("^I ask whether it's Friday yet$", () -> {
            System.out.println("2");

        });

        那么("^I should be told \"Nop$", () -> {
            System.out.println("3");
            //在用例文件中调用被测项目的service层进行测试
            Map<Integer,Double> map = algorithmBaseOfOrderService.calculationEveryStepMinPriceOrder("8d018b2027b711ea9a3100163e00a5d2");
            System.out.println("在第2个feature文件中调用springBoot中的service层:" + map);
            assert true;// 用例返回通过,如果false表示用例执行失败
        });
    }
}

说明:以上的 假设、 当、 那么 等方法就是将 feature文件转换而来,从而进行用例描述的的代码实现,完成预期的测试

10.运行效果

在这里插入图片描述
完! cucumber对springBoot的整合完毕,也支持同时运行多个feature用例文件。以上若存在不对的或有什么问题欢迎评论改进!

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值