springcloud contract 契约测试

契约测试适用于微服务架构的项目,尤其是当项目要对另外一个项目产生依赖的时候,这时候使用契约的方式就能够在单体项目本身进行测试了。

但是,搜了一圈网上的答案,理论化非常严重,真正落地的东西非常之少,所以特地写下此篇来作一个参考。

不管是使用1.5还是2.0以上的springboot contract介绍的方式都有三种,CLASSPATH,LOCAL REMOTE。CLASSPATH我没有做过,下面来着重讲一下CLASSPATH跟LOCAL。

参考链接(因公司代码保密问题,只得从网上找了个用来说明,这个老哥的案例操作简单易懂,于是就采用了)

官方文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-contract/1.2.5.RELEASE/single/spring-cloud-contract.html

https://github.com/fygol/springcloud-contract-producer

https://github.com/fygol/springcloud-contract-consumer

先来说选用LOCAL的方式

在producer这里,需要事先在test测试目录的resources建立一个.groovy的契约文件,如果想用.yaml文件的请参考官网

目录结构如图

一切先按照git中的代码来,不要擅自做修改,他这个我测试了是没有问题的。然后等执行完mvn clean install 之后,我们再在consumer项目中运行test方法,我windows中这时候会报错404.原因就在于它没有找到你安装的那个stub的jar包。当我查看我本地的maven仓库的时候,我发现里面已经有了,但是它就是说找不到。后来才发现是它寻址的问题,尽管我的maven setting.xml中的地址已经指向了D盘,但是它仍然会按照默认的路径去C盘寻找,C:\Users\xx\.m2\repository这一点我目前还没有解决的办法,我只能是先将我D盘安装好的复制c盘那个目录中。

这里有几个点要提一下,在consumer项目配置这个注解的时候

@AutoConfigureStubRunner
ids = {"io.sample:springcloud-contract-producer:0.0.1-SNAPSHOT:stubs:8085"}

这个ids中对应io.sample是groupId,springcloud-contract-producer是artifactId,0.0.1-SNAPSHOT是版本号,这里有的人说可以使用+来代替最后一个版本,这个的话还要看版本是否支持吧。stubs是指具体的那个jar包,因为这里会有两个jar包,一个是契约jar,另外一个是项目jar,8085是启动契约jar包的端口。然后看对应的目录结果

C:\Users\xx\.m2\repository\io\sample\springcloud-contract-producer\0.0.1-SNAPSHOT

目录要求非常的严谨。还有值得一提的是,在.groovy这个文件里面写的也非常的严格,request的url不能凭空捏造,要在controller中的确是有的,然后返回值又要跟response对应。至于更加细节的正则问题,数组问题还是参考官网吧。

基本上做好这些local的方式就使用完毕了。

执行步骤,在producer 中执行mvn clean install -Dmaven.test.skip=true,然后将文件拷贝到c盘(windows),在consumer中执行测试方法就可以了

但是,这仅是实现了简单步骤而已,如果只是在本地测试,那我直接将两个项目都起起来不就行了,何必要那么麻烦,重点是如何在jenkins中通过测试。这里的话就应该采用remote的方式了,现在producer中将项目发布部署就行了。

我在producer的pom.xml文件增加了以下语句

<distributionManagement>
   <snapshotRepository>
      <id>****</id>这是server的id
      <name>***</name>这是用户名,密码不用写,如果你在maven里有配置的话

      <url>http://*******</url>这是maven私服地址
   </snapshotRepository>
</distributionManagement>

然后执行 mvn clean deploy -Dmaven.test.skip=true就行了。它会把所有东西连同那两个jar包一起部署到私服中

如图,这就是上传私服成功的样子。

然后在consumer中的配置

@AutoConfigureStubRunner(
ids = {"io.sample:springcloud-contract-producer:0.0.1-SNAPSHOT:stubs:8085"},repositoryRoot = "http://私服地址")就行了。

这里值得一提的是,当我运行成功之后,我在c盘中又找到了这个jar包,原本我是删除的。这里它的做法应该是先从远程仓库中下载到c盘当中,然后跟local的方式一样使用。

猜你喜欢

转载自blog.csdn.net/weixin_41195786/article/details/88419279