Spring Coud技术方案

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

2019-10-18  本文已影响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契约文件,在请求参数那是区分生产者使用的参数和消费者使用的参数。如果使用这参数使用的是具体值,那调用过程只要不是这个值就会报错,这里最好使用正则表达式或者不需要检验的参数则可以不写。


上一篇下一篇

猜你喜欢

热点阅读