使用 jmeter 进行审批类接口并发测试

本文介绍了如何使用JMeter进行审批类接口的并发测试,包括数据创建、登录与提交的模拟,以及针对单用户多浏览器并发和多用户并发两种场景的实现策略,确保请求的同时性。

目录

前言:

背景:

难点:

场景 a:

场景 b:


前言:

使用JMeter进行审批类接口的并发测试是一种有效的方法,可以模拟多个用户同时对接口进行审批操作,以评估系统在高负载情况下的性能和稳定性。

背景

页面上单据审核操作,单据并发操作时会多笔成功提交,出现提交多个支付申请的问题

难点

  • 数据自动创建
  • 接口请求需要登录后执行
  • 动态获取审核单据的请求参数
  • 最大限度模拟并发操作,降低请求间隔
    解决思路:

  • 使用数据抛送接口创建数据

  • 使用 jmeter 头和 cookie 管理器,保存登录 session

  • 通过查询类接口,获取审核请求所需参数

  • 线程组添加同步定时器,确保请求的同时性
    具体实现

  1. 使用数据抛送接口,来进行数据的创建,有以下注意点
    • 随机生成项目单据号,确保数据可创建成功
    • 保存创建数据的项目单据号,方便之后查询接口使用
  2. 在实现登录和提交操作时,进行了两种场景模拟

场景 a:

使用单用户登录,模拟同一用户多浏览器登录进行并发提交。起初将登录和提交请求放到同一线程组中,但是发现在短时间内使用同一用户进行单点登录时,会有部分登录报错,故将登录请求单独放置在一个线程组中,提交请求放在另一线程组,之后将登录线程组中 cookie 传输到请求线程组中(此种方式其实是模拟单用户在同一浏览器多开并发)。

### 审批流中的线程安全与并发控制机制 在审批流系统中,多个用户可能同时操作同一个流程实例,例如提交审批、退回、转派等操作。这种并发行为可能导致数据竞争、状态不一致等问题,因此必须通过线程安全与并发控制机制来保障系统的稳定性与数据一致性。 #### 数据库乐观锁机制 在多用户并发操作同一审批流程的情况下,数据库乐观锁是一种常见的控制手段。该机制通过版本号(version)字段来判断数据是否被其他事务修改过。如果两个用户同时修改了同一个流程实例,只有第一个提交的事务会被接受,后续的事务将因版本号不匹配而被拒绝,从而避免脏写问题。这种机制在 Flowable 等流程引擎中被广泛采用,例如 `ACT_RE_PROCDEF` 表中的 `VERSION_` 字段用于控制流程定义的并发更新 [^3]。 #### 事务一致性控制 审批流系统通常与业务数据紧密耦合,因此必须确保审批操作与业务数据变更在同一个事务中完成。例如,在 Spring Boot 中集成 Flowable 时,可以使用 Spring 的事务管理器来控制整个流程的执行逻辑。通过声明式事务管理,确保流程状态变更、任务分配和业务数据更新具有原子性、一致性、隔离性和持久性(ACID)[^1]。 #### 线程安全的数据结构与线程池管理 Java 提供了丰富的并发工具,如 `ConcurrentHashMap`、`CopyOnWriteArrayList` 等,这些线程安全的数据结构可用于缓存流程定义、任务节点等信息。此外,审批流系统中常涉及异步任务处理,如邮件通知、日志记录等操作。通过线程池(如 `ExecutorService`)管理异步任务,可以有效控制并发资源,避免线程爆炸问题 [^1]。以下是一个使用线程池发送邮件通知的示例: ```java ExecutorService executor = Executors.newFixedThreadPool(10); public void notifyUser(String userId, String message) { executor.submit(() -> { // 发送邮件或消息通知 }); } ``` #### 多用户并发测试与线程隔离 在真实业务场景中,审批操作通常涉及多个用户并发操作不同的单据。为了验证审批流系统的并发能力,可以使用 JMeter 进行多线程测试。每个线程使用不同的用户登录并执行审批操作,确保线程间的数据隔离。例如,通过线程编号为每个线程指定不同的登录账号,模拟真实场景下的并发行为 。 #### 消息队列与分布式锁 在高并发、分布式环境中,审批流系统可以通过消息队列(如 Kafka、RabbitMQ)解耦任务处理流程,实现异步化与削峰填谷。同时,使用分布式锁(如 Redis 锁)可以确保多个节点对共享资源的访问具有互斥性,防止多个服务实例同时处理同一个审批任务 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值