You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求基于JMeter JSR223预处理器的Diameter AAA示例脚本

JMeter JSR223 Sampler 自定义AAA模块示例脚本

前置准备

  • 确保JMeter/lib目录下已添加Diameter协议相关依赖包(如diameter-api.jar、diameter-core.jar等)
  • JSR223 Sampler选择Groovy作为脚本语言(性能最优)

可直接使用的示例脚本

// 1. 导入必要的Diameter类
import org.jdiameter.api.*
import org.jdiameter.api.auth.*
import org.jdiameter.client.impl.controller.*
import org.jdiameter.client.api.*
import org.jdiameter.common.impl.app.auth.*

// 2. 获取JMeter上下文变量
def jmeterCtx = ctx
def vars = jmeterCtx.vars

// 3. 初始化Diameter客户端(全局初始化可移至JSR223 PreProcessor)
if (!vars.getObject("diameterClient")) {
    def configFile = "diameter-client-config.xml" // 替换为你的客户端配置文件路径
    def client = new StackImpl()
    client.init(new File(configFile))
    client.start()
    vars.putObject("diameterClient", client)
}
def client = vars.getObject("diameterClient")

// 4. 创建AAA认证请求
def sessionFactory = client.getSessionFactory()
def authSession = sessionFactory.getNewSession(AuthSession.class)

// 构建请求消息
def request = authSession.createRequest(AuthRequest.Type.AUTHENTICATE, 
    client.getMetaData().getLocalPeer().getRealmName(), 
    client.getMetaData().getLocalPeer().getUri())

// 添加核心AVP字段
request.getAvps().addAvp(Avp.USER_NAME, vars.get("username"), true, false, true)
request.getAvps().addAvp(Avp.PASSWORD, vars.get("password").getBytes(), true, false, true)
request.getAvps().addAvp(Avp.SERVICE_TYPE, 1, true, false, true) // 1代表登录服务

// 5. 发送同步请求并设置超时
def response = authSession.sendSyncRequest(request, 5000) // 5秒超时

// 6. 处理响应结果
if (response != null) {
    def resultCode = response.getAvps().getAvp(Avp.RESULT_CODE).getInteger32()
    vars.put("resultCode", String.valueOf(resultCode))
    
    // 标记请求成功/失败
    if (resultCode == 2001) { // 2001为Diameter标准成功码
        jmeterCtx.setSuccessful(true)
        log.info("AAA认证成功,用户名:${vars.get("username")}")
    } else {
        jmeterCtx.setSuccessful(false)
        log.error("AAA认证失败,结果码:${resultCode}")
    }
} else {
    jmeterCtx.setSuccessful(false)
    log.error("AAA请求超时,未收到响应")
}

// 7. 释放会话资源(按需保留会话可省略)
authSession.release()

扩展说明

  • 配置文件:diameter-client-config.xml需包含Peer地址、路由规则、本地节点信息等,可参考JMeter Diameter插件默认配置修改
  • 动态参数:username、password可通过CSV Data Set Config等组件批量传入,实现多用户并发测试
  • 计费模块适配:若需实现计费逻辑,可将请求类型改为ACCOUNTING,添加ACCOUNTING_RECORD_TYPE、ACCOUNTING_SESSION_ID等计费相关AVP
  • 性能优化:Diameter客户端初始化逻辑可移至JSR223 PreProcessor,避免每次请求重复初始化
  • 异常增强:可添加try-catch块捕获IllegalStateException、TimeoutException等异常,提升脚本稳定性

内容的提问来源于stack exchange,提问作者Srikanth Ramakrishnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:52:25