美文网首页Spring Coud技术方案
springcloud fegin契约测试解决方案(单元测试)

springcloud fegin契约测试解决方案(单元测试)

作者: 源码互助空间站 | 来源:发表于2019-10-18 13:29 被阅读0次

一、前言

由于现在对代码的质量要求变高,要求代码覆盖率达到80%以上,现在在疯狂的补单元测试。遇到的一个问题就是springcloud fegin单元测试时总是报错找不到。这里解决方案是使用契约测试来模拟feginserver服务。

二、契约测试的介绍

1、官网

https://spring.io/projects/spring-cloud-contract

springcloud contract官网介绍

2、契约测试介绍

A团队埋头苦干,B团队也争分夺秒,两边都开发完了,往往一联调,就出现下图这情况。

所以要使用契约测试

服务间使用契约进行约束

三、一个简单的fegin契约测试 demo

3.1 契约测试需要准备什么

契约测试也叫消费者驱动测试。

两个角色:消费者(Consumer)和 生产者(Provider)

一个思想:需求驱动(消费者驱动)

契约文件:由Consumer端和Provider端共同定义的规范,包含API路径, 输入,输出。

实现原理:Consumer端提供一个类似“契约”的东西(如json 文件,约定好 request和response)交给Provider 端,告诉Provider 有什么需求,然后 Provider根据这份“契约”去实现。

3.2 eclipse安装groovy环境

这里安装上groovy环境,用于契约文件编写。(IDEA自带环境)

参考:eclipse安装groovy环境

eclipse安装groovy环境

3.3 契约测试步骤

Spring Cloud Contract契约测试大概分三个步骤

①producer提供服务的定好服务接口(即契约)

②生成stub,并共享给消费方,可通过mvn install到maven库中

③consumer消费方引用契约服务,进行集成测试

3.4 Provider生成者编写

3.4.1架构引入

pom依赖 contract插件(必需)

3.4.2 编写契约

首先,在src/test/reources/contracts位置写契约xxx.groovy,契约内容包含契约头信息,请求信息,响应信息

契约文件

更多的信息设置参考这里

更多契约参数设置

2.4.3 把契约文件打成stubs jar包(第一次需要执行)

执行命令:mvn spring-cloud-contract:convert,会在在target/tubs生成对应的 groovy和转换的json文件。

生产json文件

接着执行:mvn spring-cloud-contract:generateStub,会在target下生成xx-xx-stubs.jar的jar包

2.4.4 安装stubs jar到本地仓库(中间过程可省略)

mvn install:install-file -DgroupId=com.wangxinqiao -DartifactId=demo -Dversion=0.0.1 -Dpackaging=jar  -Dclassifier=stubs  -Dfile=demo-0.0.1-stubs.jar

2.4.5 一步骤完成stubs jar

只需要执行mvn clean install -SkipTest

在本地仓库里会出现一个stubs的jar包,这里放着契约

2.5 feginclient消费者

2.5.1 架构引入

消费端契约依赖

2.5.2 消费者引入契约规则

基础测试类

这里是基础测试类,配置了测试环境,使用时只需继承即可。现在可以进行单元测试了。

三、契约测试高级

3.1 契约测试对双方约束

在上面的demo中仅仅是对feginclient调用过程中模拟fegin调用,但是我们没有测试feginserver是不是符合契约规则。契约规则应该是对生产者和消费者双方进行约束的。

在feginserver pom.xml引入契约插件

配置基础测试类

需要测试那个类则在MvcMockTest里添加即可

把需要测试的放在这里

之后执行maven命令,mvn spring-cloud-contract:generateTests

自动生成的服务端测试代码

3.2 契约测试的高级编写

契约测试可以对服务端和消费的分别设置不用的参数

两端参数设置

四、契约测试遇到的坑

4.1 契约测试契约文件位置

契约文件要写在src/test/reources/contracts下

4.2 确认执行了spring-cloud-contract:convert

整个项目在第一次使用契约时要先执行一次spring-cloud-contract:convert命令,在target文件夹下生成stubs文件,后面有新增或修改groovy文件,值需要mvn clean install -DskipTests

4.3 不出现契约测试案例

中途出现过执行了mvn spring-cloud-contract:generateTests命令,但是在target内没有生成测试案例,有可能是软件兼容问题。可以在cmd命令窗口,找到项目位置在执行命令。

4.4 契约测试总是测试不通过

中途测试过程中经历了很多契约不通过的问题。回头检查groovy契约文件,在请求参数那是区分生产者使用的参数和消费者使用的参数。如果使用这参数使用的是具体值,那调用过程只要不是这个值就会报错,这里最好使用正则表达式或者不需要检验的参数则可以不写。


相关文章

  • springcloud fegin契约测试解决方案(单元测试)

    一、前言 由于现在对代码的质量要求变高,要求代码覆盖率达到80%以上,现在在疯狂的补单元测试。遇到的一个问题就是s...

  • OpenFegin简介

    Fegin 和 OpenFegin Fegin Feign是Springcloud组件中的一个轻量级Restful...

  • spring-cloud feginClient unit te

    最近单元测试时碰到需要mock feginClient的接口 因为项目中存在fegin的hystrix,在mock...

  • springcloud单元测试异步方法提前结束问题解决方案

    一、前言 在使用springcloud TestRestTemplate 单元测试是遇到了异步方法的测试问题,在...

  • 测试矩阵

    迷阵 “单元测试,集成测试,端到端测试,安全测试,性能测试,压力测试,契约测试,冒烟测试,验收测试,API测试,U...

  • 测试矩阵

    迷阵 “单元测试,集成测试,端到端测试,安全测试,性能测试,压力测试,契约测试,冒烟测试,验收测试,API测试,U...

  • 微服务实战测试之Java实例篇 

    测试分为好多种类型 测试用例的组织 单元测试 集成测试 端到端测试 消费者测试 契约测试 这是著名的测试金字塔, ...

  • springcloud TestRestTemplate 单元测

    一、写在前面 最近在写springcloud项目的单元测试,遇到了一些问题,写了一个测试基础类。 二、测试基础类 ...

  • 契约测试

    业界认为应该让契约测试来替代集成测试。认为你写的2-5%的集成测试和单元测试有重复,或者和其它地方的集成测试存在重...

  • 消费者驱动的契约测试 Spring Cloud Contract

    什么是契约测试 测试是软件流程中非常重要,不可或缺的一个环节。一般的测试分为单元测试,集成测试,端到端的手工测试,...

网友评论

    本文标题:springcloud fegin契约测试解决方案(单元测试)

    本文链接:https://www.haomeiwen.com/subject/ghdimctx.html