Spring Boot + 云 | Zuul代理 |集成测试

2024-03-21

当使用 Spring Boot 构建微服务时,可以非常轻松地编写大量且非常易读的集成测试并模拟远程服务请求MockRestServiceServer.

有没有办法使用类似的方法来执行额外的集成测试ZuulProxy?我想要实现的是能够模拟远程服务器ZuulProxy将转发并验证我的所有ZuulFitlers 的表现符合预期。然而,ZuulProxy正在使用RestClient来自 Netflix(似乎已弃用?),它自然不使用RestTemplate可以通过以下方式重新配置MockRestServiceServer我目前找不到模拟远程服务对代理请求的响应的好方法。

我有一个微服务,负责处理 API 会话密钥的创建,然后其行为类似于 API 网关。转发是通过 Zuul Proxy 完成到底层公开服务的,Zuul Filters 将检测会话密钥是否有效。因此,集成测试将创建一个有效的会话,然后转发到一个假端点,例如“集成/测试”。

可以通过设置配置属性来指定“集成/测试”是新端点@WebIntegrationTest,我可以成功模拟所有正在处理的服务RestTemplate但没有 Zuul 转发。

实现对转发目标服务的模拟的最佳方法是什么?


查看WireMock http://wiremock.org/docs/junit-rule/。我一直在使用它对我的 Spring Cloud Zuul 项目进行集成级别测试。

import static com.github.tomakehurst.wiremock.client.WireMock.*;

public class TestClass {
    @Rule
    public WireMockRule serviceA = new WireMockRule(WireMockConfiguration.options().dynamicPort());

    @Before
    public void before() {
        serviceA.stubFor(get(urlPathEqualTo("/test-path/test")).willReturn(aResponse()
            .withHeader("Content-Type", "application/json").withStatus(200).withBody("serviceA:test-path")));
    }

    @Test
    public void testRoute() {
        ResponseEntity<String> responseEntity = this.restTemplate.getForEntity("/test-path/test", String.class);
        assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);

        serviceA.verify(1, getRequestedFor(urlPathEqualTo("/test-path/test")));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot + 云 | Zuul代理 |集成测试 的相关文章

  • Mockito:如何通过模拟测试我的服务?

    我是模拟测试新手 我想测试我的服务方法CorrectionService correctPerson Long personId 实现尚未编写 但这就是它将执行的操作 CorrectionService将调用一个方法AddressDAO这将
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • Spring Cloud 中的粘性会话和 Zuul

    我有一组微服务 我们使用 zuul 从前端进行路由 作为使用 Spring Cloud 将 uri 上下文路径映射到特定微服务的一种方式 在内部和外部 我们使用 spring OAuth2 效果非常好 然而 对于一项特定服务 出现了对 SA
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • scikit learn:未选择所需数量的最佳功能 (k)

    我试图使用卡方 scikit learn 0 10 选择最佳特征 我首先从总共 80 个训练文档中提取 227 个特征 然后从这 227 个特征中选择前 10 个特征 my vectorizer CountVectorizer analyz
  • Hibernate 的泛型

    Hibernate 无法加载以下类 package com project alice entities import javax persistence Entity import javax persistence GeneratedV
  • 设置对话框的最大高度,然后允许滚动

    我似乎无法理解如何正确设置 jquery ui 对话框的高度 我希望它显示存在的内容的高度 但如果它超过 400 像素 那么我需要一个滚动条 因此 如果内容的高度为 200 像素 则对话框的高度应为 200 像素 如果内容的高度大于 400
  • graphviz 中跨越多行的记录

    我试图用点语言可视化一个相当复杂的结构 因为记录很大 所以我想把代码写成多行 所以而不是 A11 label A 11 Access Control A 11 1 Business requirements for access contr
  • Bash 变量替换和字符串

    假设我有两个变量 a AAA b BBB 我从文件中读取了一个字符串 该字符串如下 str a b 如何从替换变量的第一个字符串创建一个新字符串 newstr AAA BBB bash questions tagged bash多变的间接没
  • 使用 libtorrent-python 下载 Torrent

    我有以下 python 代码 import libtorrent as lt import time ses lt session ses listen on 6881 6891 params save path home download
  • iOS 15 TabView导航栏透明度问题

    新的 iOS 15 使导航栏背景完全透明 如果后面没有元素 如果有一个列表并且您将元素滚动到导航栏后面 这将获得白色半透明背景 但如果我使用 TabView 其中每个 TabItem 都有一个在选项卡项目之间切换时 导航栏背景内的列表未正确
  • 如何在bash中找到字符串中最后分组的数字

    这是一个后续问题this https stackoverflow com q 51923800 10247894问题 关于如何知道字符串中分组数字的数量 In bash 如何找到字符串中最后一次出现的一组数字 所以 如果我有 string
  • Xamarin 表单(跨平台):ListView 中的多种类型的单元格

    I am new to Xamarin I have a requirement where I have to implement a ListView or say tableView that have multiple differ
  • TortoiseGit 使用不正确的 SSH 密钥

    我现在有一个关于乌龟git的奇怪问题 我无法弄清楚 当尝试提交到 github 上的存储库时 出现错误 错误 对 key2 的 martindevans Hermes git 权限被拒绝 Key2 是我用来访问不同 github 存储库的密
  • 我可以一成不变地借用 self 来实现 self.callbacks: Vec> 吗?

    pub struct Notifier lt a T gt callbacks Vec
  • 如果启用了热模块替换,为什么在更改 HTML 时 LiveReload 在 Webpack 中不起作用?

    如果你设置hot true in the devServer设置在Webpack 那么模块热更换CSS 有效 并且无需重新加载完整页面即可应用更改 但是当改变HTML文件时 实时重载由于某种原因不起作用 您需要手动刷新页面才能应用更改 If
  • 'Object.ReferenceEquals' 始终为 false,因为它是使用值类型调用的

    当我使用slSvcUtil exe要创建我的服务客户端文件 我看到如下代码 private string CategoryField System Runtime Serialization DataMemberAttribute publ
  • 如何使用 Python 中的 DLL 文件?

    最简单的使用方法是什么DLL从内部归档Python 具体来说 如何做到这一点without编写任何附加包装器C 向其公开功能的代码Python Native Python与使用第三方库相比 功能更受青睐 为了方便使用 ctypes http
  • 如何解决 CoUnitialize() 上挂起的进程?

    我有一个本机 Visual C NT 服务 当服务启动时 它的线程调用CoInitialize 它将线程附加到 STA 服务线程通过 COM 接口使用 MSXML 当服务接收到SERVICE CONTROL STOP它在消息队列中发布一条消
  • 创建图像蒙版

    用户向我的应用程序提供了一张图像 应用程序需要从中制作一个遮罩 对于原始图像中的每个透明像素 蒙版都包含一个红色像素 我尝试了以下方法 Bitmap OrgImg Image FromFile FilePath Bitmap NewImg
  • 自定义添加到购物车按钮,将多个产品添加到购物车并添加数量:woocommerce

    我想创建自定义 添加到购物车 按钮 将我的 3 个产品添加到购物车 每个产品 2 个数量 为了将三个产品添加到购物车中 我已经使用了这样的方法 a class single add to cart button shop skin btn
  • 如何创建部分发票?

    我想从特定订单中为该订单中的某些选定项目创建发票 我已以编程方式成功为整个订单创建了发票 但我想创建该订单的部分发票 最后我明白了 必须挖 magento 才能得到这个 orderid order id order Mage getMode
  • 使用 asciidoctor 创建自定义 HTML

    我正在使用 CMS 来发布我的博客文章 我正在寻找一种从简单的文本文件离线创建 HTML 文章的方法 这是我通常在文章中使用的一段 HTML p We want to show how you can gather information
  • Spring Boot + 云 | Zuul代理 |集成测试

    当使用 Spring Boot 构建微服务时 可以非常轻松地编写大量且非常易读的集成测试并模拟远程服务请求MockRestServiceServer 有没有办法使用类似的方法来执行额外的集成测试ZuulProxy 我想要实现的是能够模拟远程