test mock-03-wiremock 模拟 HTTP 服务的开源工具 flexible and open source API mocking

这篇具有很好参考价值的文章主要介绍了test mock-03-wiremock 模拟 HTTP 服务的开源工具 flexible and open source API mocking。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

拓展阅读

test 之 jmockit-01-overview

jmockit-01-test 之 jmockit 入门使用案例

mockito-01-overview mockito 简介及入门使用

PowerMock

Mock Server

ChaosBlade-01-测试混沌工程平台整体介绍

jvm-sandbox 入门简介

wiremock

WireMock是一个流行的开源工具,用于API模拟测试,每月下载量超过500万次。它可以帮助您创建稳定的测试和开发环境,隔离与不稳定的第三方服务的依赖,并模拟尚不存在的API。

WireMock于2011年由Tom Akehurst作为Java库启动,现在已经涵盖多种编程语言和技术栈。

它可以作为库或客户端包装器在许多语言中运行,也可以作为独立的服务器运行。项目及其生态系统背后有一个庞大的社区。

WireMock支持多种创建模拟API的方法 - 在代码中、通过其REST API、作为JSON文件以及通过记录代理到另一个目标的HTTP流量。

WireMock具有丰富的匹配系统,允许将传入请求的任何部分与复杂和精确的条件进行匹配。

通过基于Handlebars的模板系统,可以动态生成任何复杂度的响应。

最后,由于其众多的扩展点和全面的API,WireMock易于集成到任何工作流程中。

关键特性

WireMock可以在单元测试中运行,也可以作为独立进程或容器运行。

其关键特性包括:

  • 可通过URL、头部和正文内容模式进行HTTP响应存根匹配
  • 支持通过流畅的Java API、JSON文件和HTTP传输的JSON进行配置
  • 存根的录制和回放
  • 请求验证
  • 故障和响应延迟注入
  • 按请求的条件代理
  • 用于请求检查和替换的浏览器代理
  • 具有状态的行为模拟
  • 可扩展性

WireMock生态系统

WireMock具有针对其他语言和测试框架的实现和适配器。它支持多种技术栈的适配器和实现,包括Python、.NET、Golang和Rust。

对于JVM生态系统,有适用于Spring Boot、Quarkus、Kotlin、Testcontainers等的库。

WireMock还可以在Android支持上运行,并即将提供官方的gRPC和GraphQL适配器。

快速入门:使用Java和JUnit 4进行API模拟

在本指南中,我们将使用WireMock和JUnit 4编写API单元测试。

先决条件

  • Java 11或17
  • Maven或Gradle,使用最新版本
  • 一个基于Maven和Gradle的Java项目
  • 一个我们将用作演练场的单元测试文件

将WireMock依赖项添加到您的项目

WireMock通过Maven Central分发,可以通过常见的构建工具的依赖管理包含在您的项目中。

要将标准的WireMock JAR添加为项目依赖项,请将以下依赖项放在构建文件的dependencies部分中。

在我们的测试中,我们还将使用AssertJ来验证响应。为了发送请求,我们将使用Java 11+中可用的嵌入式HTTP客户端。

如果您想添加一个Java 1.8测试,您将需要添加一个外部的HTTP客户端实现,如Apache HttpClient。

<dependency>
    <groupId>org.wiremock</groupId>
    <artifactId>wiremock</artifactId>
    <version>3.3.1</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj-core</artifactId>
    <version>3.24.2</version>
    <scope>test</scope>
</dependency>

添加WireMock规则

WireMock提供了一些JUnit规则来管理服务器的生命周期和设置/拆卸任务。

要使用WireMock的流畅API,请添加以下导入语句:

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

为了在每个测试用例中自动启动和停止WireMock,请将以下内容添加到您的测试类(或其超类):

@Rule
public WireMockRule wireMockRule = new WireMockRule(8089); // No-args constructor defaults to port 8080

写一个测试

import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

...

@Test
public void exampleTest() {
    // Setup the WireMock mapping stub for the test
    stubFor(post("/my/resource")
        .withHeader("Content-Type", containing("xml"))
        .willReturn(ok()
            .withHeader("Content-Type", "text/xml")
            .withBody("<response>SUCCESS</response>")));

    // Setup HTTP POST request (with HTTP Client embedded in Java 11+)
    final HttpClient client = HttpClient.newBuilder().build();
    final HttpRequest request = HttpRequest.newBuilder()
        .uri(wiremockServer.getRequestURI("/my/resource"))
        .header("Content-Type", "text/xml")
        .POST().build();

    // Send the request and receive the response
    final HttpResponse<String> response =
            client.send(request, HttpResponse.BodyHandlers.ofString());

    // Verify the response (with AssertJ)
    assertThat(response.statusCode()).as("Wrong response status code").isEqualTo(200);
    assertThat(response.body()).as("Wrong response body").contains("<response>SUCCESS</response>");
}

拓展测试类

为了对由规则创建的WireMock服务器的设置有更多的控制,您可以将通过流式构建的Options对象传递给规则的构造函数。

让我们以更改端口号为例:

import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
...

@Rule
public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().port(8089).httpsPort(8443));

您可以让WireMock(更准确地说是JVM)选择随机的、空闲的HTTP和HTTPS端口。如果您想要并发运行测试,这是一个很好的选择。

@Rule
public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().dynamicPort().dynamicHttpsPort());

可以用下面的发现对应的端口信息:

int port = wireMockRule.port();
int httpsPort = wireMockRule.httpsPort();

wiremock 是如何实现 http 服务的模拟的?原理是什么

WireMock实现HTTP服务的模拟的基本原理是拦截和模拟HTTP请求,并根据预定义的规则返回相应的模拟响应。

以下是WireMock的基本原理:

  1. 代理模式: WireMock 可以作为一个代理服务器,拦截客户端发出的HTTP请求。当 WireMock 作为代理运行时,它会监听指定的端口,并将接收到的请求发送到实际的目标服务器。WireMock 在中间拦截这些请求,允许你模拟响应。

  2. Stubbing: 在 WireMock 中,模拟服务的期望行为通过 stub(存根)来定义。一个 stub 定义了一个匹配规则和一个对应的响应。当收到符合匹配规则的请求时,WireMock 将返回预定义的响应,而不是将请求转发到实际的目标服务器。

  3. 匹配规则: WireMock 提供了丰富的匹配规则,可以根据请求的URL、HTTP方法、请求体、查询参数等条件进行匹配。这使得可以精确地定义哪些请求应该由 WireMock 进行模拟响应。

  4. DSL(领域特定语言): WireMock 使用了DSL,即一种特定于领域的语言,用于定义 stubs。DSL 提供了清晰而简洁的语法,使得创建和配置 stubs 变得直观和易读。

  5. 内嵌服务器: 除了代理模式,WireMock 还可以作为一个独立的HTTP服务器运行。在这种情况下,它监听指定的端口并直接处理客户端发出的请求,而不需要实际的目标服务器。

  6. 录制和回放: WireMock 具有录制和回放功能,可以用于记录实际服务的请求和响应,然后将其用作模拟服务的期望行为。这有助于创建与实际服务行为一致的 stubs。

http服务模拟工具,test,http,开源,网络协议,单元测试,unit testing文章来源地址https://www.toymoban.com/news/detail-811070.html

到了这里,关于test mock-03-wiremock 模拟 HTTP 服务的开源工具 flexible and open source API mocking的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 10 款常用的 API Mock 服务器工具

    你是否曾因为后端接口还没开发完成而苦恼,而你作为前端开发人员却迫不及待地想要开始写代码?API Mock 服务器就是你的救星!它们可以快速搭建一个虚拟的后端环境,使你可以立即开始测试和开发。这篇文章将介绍 10 款 API Mock 服务器工具,并以轻松幽默的语气向你展示

    2024年02月08日
    浏览(45)
  • 【P4】JMeter 原生录制方式——HTTP代理服务器(HTTP(S) Test Script Recorder)

    HTTP代理服务器允许JMeter在使用常规浏览器,浏览Web应用程序时拦截并记录操作。JMeter将创建测试样本对象,并将其直接存储到的测试计划中。录制脚本时,最好使用无痕浏览模式,这可以确保浏览器没有存储的Cookie信息,并防止保存某些更改。例如:Firefox不允许永久保存证

    2024年02月11日
    浏览(39)
  • 光伏发电系统模拟及其发电预测开源python工具pvlib

    pysolar是一个用于计算太阳位置和辐照量的Python库。它是基于python语言编写的,可以方便地在各种python项目中使用。pysolar主要用于计算太阳的位置、太阳高度角、太阳方位角、日出和日落时间等信息。这些信息可以用于太阳能电池板和太阳能集热器等应用的设计和优化。 Pys

    2023年04月08日
    浏览(31)
  • PyBullet:一种用 Python 构建的开源 3D 物理模拟工具(教程含源码)

    PyBullet 是一种物理引擎,用于模拟刚体动力学并支持创建逼真的 3D 环境。它基于 Bullet Physics Library,并提供易于使用的界面来模拟各种物理现象。在这篇博文中,我们将探讨 PyBullet 中的用例和可用方法。 PyBullet 在各个行业都有广泛的用例。以下是 PyBullet 的一些最常见用例:

    2024年02月04日
    浏览(36)
  • 开源.NetCore通用工具库Xmtool使用连载 - HTTP请求篇

    《上一篇》 介绍了Xmtool工具库中的XML操作类库,今天我们继续为大家介绍其中的HTTP请求类库。 在现如今的软件需求场景中,HTTP网络请求几乎是开发过程中必然会使用的功能;而系统自带的HTTPClient对象使用起来并不是那么容易和友好,因此我们对其进行了二次封装成了一个

    2024年02月13日
    浏览(41)
  • 14.Netty源码之模拟简单的HTTP服务器

    HTTP 服务器是我们平时最常用的工具之一。同传统 Web 容器 Tomcat、Jetty 一样,Netty 也可以方便地开发一个 HTTP 服务器。我从一个简单的 HTTP 服务器开始,通过程序示例为你展现 Netty 程序如何配置启动,以及引导器如何与核心组件产生联系。 完整地实现一个高性能、功能完备、

    2024年02月15日
    浏览(46)
  • 云服务仿真:完全模拟 AWS 服务的本地体验 | 开源日报 No.45

    Stars: 48.7k License: NOASSERTION LocalStack 是一个云服务仿真器,可以在您的笔记本电脑或 CI 环境中以单个容器运行。它提供了一个易于使用的测试/模拟框架,用于开发云应用程序。主要功能包括: 在本地机器上完全运行 AWS 应用程序或 Lambda 函数,无需连接到远程云提供商。 支持

    2024年02月07日
    浏览(34)
  • 前端先行模拟接口(mock+expres+json)

    目录 mock模拟数据:data/static.js 路由:index.js 服务器:server.js yarn /node 启动服务器:yarn start 客户端:修改代理路径(修改设置后都要重启才生效) 示例 后端框架express构建服务器 前端发起请求 JSON 静态数据:res.status === 304 3xx - Redirection(重定向):附加操作已完成请求 301 Mov

    2024年02月13日
    浏览(40)
  • 百度又开源一款压测工具,可模拟几十亿的并发场景,太强悍了

    dperf 是百度开源的一款基于 DPDK 的 100Gbps 网络性能和负载测试软件,能够每秒建立千万级的 HTTP 连接、亿级别的并发请求和数百 Gbps 的吞吐量。 性能强大: 基于 DPDK,使用一台普通 x86 服务器就可以产生巨大的流量:千万级的 HTTP 每秒新建连接数,数百 Gbps 的带宽,几十亿的

    2024年02月12日
    浏览(36)
  • 【Fiddler】Fiddler实现mock测试(模拟接口数据)

    软件接口测试过程中,经常会遇后端接口还没有开发完成,领导就让先介入测试,然后缩短项目时间,有的人肯定会懵,接口还没开发好,怎么介入测试,其实这就涉及到了我们要说的mock了。 一、mock原理 mock测试其根本任务就是能够模拟后端服务器接口数据。 其实就是提供

    2024年02月17日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包