Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >测试数据验证的3大难题,这个工具全搞定!

测试数据验证的3大难题,这个工具全搞定!

作者头像
可可的测试小栈
发布于 2025-01-14 06:19:15
发布于 2025-01-14 06:19:15
25710
代码可运行
举报
文章被收录于专栏:全栈测试全栈测试
运行总次数:0
代码可运行

Hi,你好呀,我是可可。

在测试过程中,涉及数据验证时,我们常常面临三大难题:数据不准确、处理速度慢、结果难以复现。

今天,我要强推一个神器,它让我的数据测试工作变得轻松又高效!

一、相关背景

模块化开发和分布式服务器部署盛行的时代,我们在系统测试中经常要确保与后端服务的数据交互是完整无误的。但实际操作起来,却可能遇到不少难题。

在实际工作中,我们可能会遇到的一些挑战。

1、后端开发未同步

后端服务还在紧锣密鼓的开发,测试工作无法顺利全面进行。

2、权限限制

测试人员可能因为权限的限制而无法触及后端数据,严重阻碍对数据交换完整性的验证工作。

3、第三方开发

后端服务是由第三方团队负责开发,进行有效的集成测试就会变得更加复杂。

我们需要更加精细和智能化的测试工具和方法,有效地识别和解决数据交换过程中可能出现的问题,从而提高软件质量。

二、WireMock

我们通过搭建 WireMock 服务器,模拟客户端数据的接收过程。这种方法简单而高效,它允许我们在设定的时间内验证服务器接收到的数据量和频率,从而确保客户端发送的数据符合预期。

1、面临的问题

我们的用例需要精准,以下是三个关键点:

1)依照场景自动化触发API请求,确保功能点都能在自动化流程中被准确触发。

2)现实业务中的请求地址转换为WireMock配置的路径,在一个受控的环境中模拟真实请求。

3)验证监控数据是否与预期值一致,确保自动化测试准确性的关键。

2、相关环境

用例核心在于:利用Rest-Assured来完成API的数据发送。在实际项目中,这一步通常是通过客户端项目的功能来触发的。

接下来,通过验证服务器接收到的数据来确认API的数据发送是否成功。

IDE: IntelliJ IDEA

✅ 语言:Java

✅ API服务器 :WireMock

✅ API 请求:Rest-Assured

✅ 测试框架:TestNg

✅ 项目类型:Maven

3、关键步骤

1) WireMock 的POST构建与启动 :

创建和配置 WireMock 服务器,设置 POST 请求的 stub,以便模拟真实的 API 行为。

2) Rest Assured 模拟API请求:

使用 Rest Assured 库发送模拟的 API POST 请求

3) WireMock API 获取POST数据:

掌握如何通过 WireMock API 获取接收到的 POST 数据,以进行后续的验证和分析。

三、实现过程

假如有一个系统功能需要测试——数据发送。

确保数据的完整性。怎么做?简单说,数据发出去后,我们得去服务器端看看,接收到的数据和发出去的是否一模一样,每个字段都得对上,确保没有遗漏。

我们得连续触发这个功能,看看它是否每次都能准时、完整地发送数据。

1、过程分解

对于这个测试需求,本示例使用 WireMock 工具搭建一个模拟服务器,来替代真实的后端服务。通过这种方式,可以在本地测试数据发送功能。

我们利用模拟工具WireMock,来模拟服务器端的行为,捕获和验证数据。即使我们不能直接接触服务器,也能确保数据的完整性和准确性。

1)搭建并启动Mock 服务器

创建一个 WireMock 服务器,模拟真实的后端数据接收接口。

2)发送数据

触发本地系统的数据发送功能,使用 RestAssured 模拟数据发送,为了更好地验证数据发送功能,这里数据的发送是在一个新线程中完成。实时监控服务器接收数据的状况,动态测试系统的数据发送能力。

3)监控记录请求

Mock 服务器会记录所有接收到的请求,包括发送的数据。

4)比对数据

在监控过程中,可以WireMock 服务器里获取记录的数据,以确定数据发送功能未被篡改且没有丢失数据。在验证大量数据发送过程中,我们可以通过设置超时,来确认数据发送功能没有延迟或数据丢失

2、Maven 配置

配置Java项目中依赖项的XML配置片段,在Maven项目的pom.xml文件中。它定义项目所需的三个库依赖,这些依赖是用于在Java项目中集成和运行WireMock服务器以及Jetty服务器的必要组件。

依次配置了三个依赖项,用于在Java项目中集成WireMock服务器和Jetty服务器,用于测试和模拟HTTP服务。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 引入WireMock依赖,用于在测试中模拟HTTP服务 -->
<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock-jre8</artifactId>
    <version>3.0.1</version>
    <type>pom</type>
    <scope>test</scope>
</dependency>

<!-- 引入Jetty Servlet依赖,提供Servlet API的实现 -->
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-servlet</artifactId>
    <version>11.0.22</version>
</dependency>

<!-- 引入Jetty Server依赖,提供HTTP服务器和Servlet容器的核心功能 -->
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>11.0.22</version>
</dependency>

3、代码解析

代码给出完整的测试用例执行流程,且对每一个方法进行了逐一解释。

1、构建WireMock 服务器:

启动服务器并配置 WireMock,使其能够处理特定的 HTTP 请求。最后,返回一个 200 状态的响应,并包含 Content-Type 为 application/json 的头信息。

2、新建一个新线程Thread dataSendRequest 执行sendPost()方法。

sendPost 利用RestAssured 会每隔100 毫秒发送一次数据到MockServer,重复发送100 次且从第51次开始,发送内容testPostInvalid。

3、dataValidation() 方法

先通过调用receivedDataMonitor()方法,获取MockServer 收到的请求数据接着,再对请求的数据进行内容与大小的验证。

4、receivedDataMonitor()方法

每500毫秒循环一次地按接收到的时间,分别把请求的次数保存以做延迟性验证。

5、最后是合并线程和关闭MockServer 服务器。

部分式例代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 验证数据发送的完整性。
 */
@Test(description = "To Verify Data Sending Integrity ")
public void testDataIntegrity() {
    // 初始化并启动WireMock服务器,监听9090端口
    wireMockServer = startWireMockServer(9090);
    
    // 设置数据发送的阈值和数量
    long threshold = 10;
    int eventSentCount = 100;
    
    // 在新线程中发送数据,模拟并发发送场景
    baseURI = "http://localhost:9090/api/data/receive";
    Thread dataSendRequest = new Thread(() -> {
        try {
            // 实际发送POST请求的方法
            sendPost(eventSentCount, 100);
        } catch (Exception e) {
            // 发送数据时的异常处理
            System.out.println("Error: Sending Data");
        }
    });
    // 启动线程
    dataSendRequest.start();
    
    // 验证数据发送的完整性
    dataValidation(eventSentCount, threshold);
    
    // 等待发送数据的线程结束
    try {
        dataSendRequest.join();
    } catch (InterruptedException e) {
        // 处理线程中断异常
        throw new RuntimeException(e);
    }
    
    // 停止WireMock服务器
    stopWireMockServer(wireMockServer);
}

四、总结

这种方法让我们能够迅速校验客户端请求的次数和内容,确保它们在限定时间内的准确性。这不仅关乎速度,更关乎业务需求的深入验证。

在自动化测试框架里,既能保证快速有效的测试,同时也能保证测试结果的稳定性,从而降低代码的维护。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 可可的测试小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
可以,大佬,互粉一下
可以,大佬,互粉一下
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
如何使用模拟框架测试微服务? | 微服务系列第八篇
作为开发人员尝试创建集成测试时,会遇到许多复杂问题。出现的两个最常见的问题包括与:
魏新宇
2018/09/30
3.8K0
如何使用模拟框架测试微服务? | 微服务系列第八篇
Swagger和Wired
在我们前后端分离的架构中,前端与我们后端的开发是并行的,那么我们除了写自己的代码之外,我们还需要一些额外的的工具来帮助我们跟前端沟通,下面我们将为大家介绍2个常见的工具。
用户7386338
2020/05/28
8110
最火的Spring Cloud Gateway 为经过身份验证的用户启用速率限制实践-spring cloud 入门教程
在本文中,您将学习如何使用 Spring Cloud Gateway 为经过身份验证的用户启用速率限制。为什么重要?API 网关是您的微服务系统的入口点。因此,您应该提供适当的安全级别。速率限制可以防止您的 API 遭受 DoS 攻击并限制网络抓取。
jack.yang
2025/04/05
1340
最火的Spring Cloud Gateway 为经过身份验证的用户启用速率限制实践-spring cloud 入门教程
REST-assured 实现 GET, POST, PUT, PATCH, DELETE 请求
本文中将展示如何使用 REST Assured 框架发送 API 请求。例子中包含了 GET,POST,PUT,PATCH 和 DELETE 格式的请求。
RiemannHypothesis
2022/10/31
1.3K0
REST-assured 实现 GET, POST, PUT, PATCH, DELETE 请求
API测试工具Top 10 你都用过吗?
API测试(应用程序编程接口测试)是一种软件测试类型,它着重于确定所开发的API是否满足关于应用程序的功能、可靠性、性能和安全性的预期。
软测小生
2019/07/05
6.1K1
API测试工具Top 10 你都用过吗?
利器 | Java 接口自动化测试首选方案:REST Assured 实践 (一)
在 REST Assured 的官方 GitHub 上有这样一句简短的描述: Java DSL for easy testing of REST services 简约的 REST 服务测试 Java DSL
霍格沃兹测试开发
2022/05/26
1.1K0
推荐几款常用的Mock测试工具!
模拟测试(Mock Testing)是软件测试中的一种重要技术,它的主要用途是在软件开发过程中对代码进行测试,特别适合在进行开发自测、单元测试或接口测试阶段。
测试开发技术
2023/11/30
1.3K0
推荐几款常用的Mock测试工具!
SpringBoot几个注解MockMvcWireMockSwagger2@JsonViewHibernate Validator异常处理拦截方式上传下载异步处理RESTSpring Security
只有特定名称或者类型的Bean(通过@ConditionalOnMissingBean修饰)不存在于BeanFactory中时才创建某个Bean
spilledyear
2018/10/09
2.1K1
SpringBoot几个注解MockMvcWireMockSwagger2@JsonViewHibernate Validator异常处理拦截方式上传下载异步处理RESTSpring Security
如何确保API 的稳定性与正确性?你只需要这一招
一、什么是rest-assured 现在,越来越多的 Web 应用转向了RESTful的架构,很多产品和应用暴露给用户的往往就是一组 REST API,这 样有一个好处,用户可以根据需要,调用不同的 API,整合出自己的应用出来。从这个角度来讲,Web 开发的成本会越来越低,人们不必再维护自己的信息孤岛,而是使用 REST API 这种组合模式。
霍格沃兹测试开发
2022/06/09
1.2K0
一起来学SpringBoot | 第十九篇:轻松搞定数据验证(一)
对于任何一个应用而言,客户端做的数据有效性验证都不是安全有效的, 而数据验证又是一个企业级项目架构上最为基础的功能模块,这时候就要求我们在服务端接收到数据的时候也对数据的有效性进行验证。为什么这么说呢?往往我们在编写程序的时候都会感觉后台的验证无关紧要,毕竟客户端已经做过验证了,后端没必要在浪费资源对数据进行验证了,但恰恰是这种思维最为容易被别人钻空子。毕竟只要有点开发经验的都知道,我们完全可以模拟 HTTP 请求到后台地址,模拟请求过程中发送一些涉及系统安全的数据到后台,后果可想而知....
battcn
2018/08/03
8480
一起来学SpringBoot | 第十九篇:轻松搞定数据验证(一)
API自动化测试指南
我相信自动化技能已经成为高级测试工程师总体技能的标配。敏捷和持续测试破坏了传统的测试自动化实践,导致测试工程师重新考虑自动化的完成方式。当今的自动化工程师需要在GUI的下方深入到API级别完成软件质量的保护。
FunTester
2019/12/31
1.9K0
API自动化测试指南
10个Java开发人员的顶级测试工具、库和框架介绍
最近,我写了一些关于Java开发人员今年应该学习什么的文章,例如编程语言、库 和 框架,但如果你只有一件事需要改进或学习,那么那必须是你的自动化测试技能。
田维常
2019/07/16
2.8K0
10个Java开发人员的顶级测试工具、库和框架介绍
走进Java接口测试之Mock(概念篇)
在接口测试过程中,对于某些不容易构造或者不容易获取的对象,我们常常会用一个虚拟的对象代替以便测试。在具体的测试过程中,我们经常会碰到需要模拟数据或者接口的情况,因为环境问题或者系统复杂度的问题,我们需要使用 Mock 方式进行数据的模拟。
高楼Zee
2019/07/17
11.4K0
走进Java接口测试之Mock(概念篇)
聊一聊含有反向代理的情况下如何进行接口测试
反向代理的作用通常用于负载均衡、安全防护、SSL终止、请求转发等。它位于客户端和实际服务器之间,客户端不直接访问服务器,而是通过反向代理。
漫谈测试
2025/06/05
691
聊一聊含有反向代理的情况下如何进行接口测试
几个测试接口的好工具,效率加倍~
作为一名后端程序员,一定要对自己写的接口负责,保证接口的正确和稳定性。因此,接口测试也是后端开发中的关键环节。
程序员鱼皮
2023/10/23
9650
几个测试接口的好工具,效率加倍~
软件开发工程师谈测试金字塔实践
测试金字塔是对测试的分层描述,在不同层次做不同类型的测试。测试金字塔如何运用到工程实践,是一件困难的事情。原文作者是一位德国Thoughtworks的软件开发工程师,本文将回顾传统的测试金字塔,并结合实例,进行一次有深度的探秘实践。
dongfanger
2022/09/30
1.3K0
软件开发工程师谈测试金字塔实践
java单元/集成测试中使用Testcontainers
Testcontainers是一个Java库,它支持JUnit测试,提供公共数据库、SeleniumWeb浏览器或任何可以在Docker容器中运行的轻量级、一次性实例。
东溪陈姓少年
2020/08/06
3.1K0
基于Redis做Spring Cloud Gateway 中的速率限制实践-spring cloud 入门教程
目前Spring Cloud Gateway是仅次于 Spring Cloud Netflix 的第二大最受欢迎的 Spring Cloud 项目(就 GitHub 上的 Star 数而言)。它是作为 Spring Cloud 家族中 Zuul 代理的继任者而创建的。该项目为微服务架构提供了一个 API 网关,并建立在反应式Netty和 Project Reactor之上。它旨在提供一种简单但有效的方法来路由到 API 并解决诸如安全性、监控/指标和弹性等常见问题。 Spring Cloud Gateway 为您提供了许多功能和配置选项。今天我将专注于网关配置的一个但非常有趣的方面——速率限制。速率限制器可以定义为一种控制网络上发送或接收流量速率的方法。我们还可以定义几种类型的速率限制。Spring Cloud Gateway 目前提供了一个Request Rate Limiter,它负责将每个用户限制为每秒 N 个请求。与 Spring Cloud Gateway 一起 使用时RequestRateLimiter,我们可能会利用 Redis。Spring Cloud 实现使用令牌桶算法做限速。这个算法有一个集中的存储桶主机,你可以在每个请求上获取令牌,然后慢慢地将更多的令牌滴入桶中。如果桶为空,则拒绝请求。
jack.yang
2025/04/05
960
基于Redis做Spring Cloud Gateway 中的速率限制实践-spring cloud 入门教程
接口自动化测试框架Karate入门
在这篇文章中,我们将介绍一下开源的Web-API自动化测试框架——Karate介绍
顾翔
2019/12/11
3.2K0
接口自动化测试框架Karate入门
Spring Cloud Gateway实现数字签名与URL动态加密
在现代应用程序中,安全性是至关重要的。随着微服务架构的流行,API网关成为保护和授权服务的重要一环。Spring Cloud Gateway是一个功能强大的API网关,允许您在请求到达后端服务之前执行各种安全性操作。本文将介绍如何使用Spring Cloud Gateway实现数字签名和URL动态加密,以确保您的API请求和响应数据的完整性和保密性。
IT_陈寒
2023/12/13
5800
Spring Cloud Gateway实现数字签名与URL动态加密
推荐阅读
相关推荐
如何使用模拟框架测试微服务? | 微服务系列第八篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验