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

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

作者头像
可可的测试小栈
发布2025-01-14 14:19:15
发布2025-01-14 14:19:15
28510
代码可运行
举报
文章被收录于专栏:全栈测试全栈测试
运行总次数: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
运行
复制
<!-- 引入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
运行
复制
/**
 * 验证数据发送的完整性。
 */
@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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档