Gatling报告中自定义检查失败未标记为KO的问题求助
问题原因及解决方案
你遇到的问题核心是误用了transform方法实现校验:
transform的作用是转换响应数据格式,它返回的Failure只是转换后的结果值,不会触发Gatling的检查失败判定逻辑,所以请求始终被标记为OK。- 要实现自定义校验,必须使用Gatling提供的
validate方法,该方法会将返回的Validation结果作为检查是否通过的依据。
修改后的代码示例
调整自定义检查的实现,用validate替代transform:
private ChainBuilder ocsp() { ... .doIf(session -> !session.getBoolean("usePost")) .then( exec( http("OCSP GET request") .get("#{ocspUrlGet}") .header("Accept", "application/ocsp-response") .check(ocspStatusCheck) .check(status().is(200)) ) ); } CheckBuilder ocspStatusCheck = bodyBytes().validate("OCSP Status Check", (byte[] rawBytes) -> { try { OCSPResp ocspResp = new OCSPResp(rawBytes); BasicOCSPResp basic = (BasicOCSPResp) ocspResp.getResponseObject(); for (SingleResp srsp : basic.getResponses()) { BigInteger certid = srsp.getCertID().getSerialNumber(); if (new BigInteger(ocspRequest.getSerial(), 16).equals(certid)) { CertificateStatus stat = srsp.getCertStatus(); if (stat == CertificateStatus.GOOD) { return Validation.Failure("OCSP processing error: "); } } } return Validation.Failure("Certificate serial number " + ocspRequest.getSerial() + " not found in OCSP response or its status was not GOOD."); } catch (Exception e) { // Catch any parsing or processing errors and return a Failure return Validation.Failure("OCSP processing error: " + e.getMessage()); } });
关键说明
validate方法需要传入两个参数:第一个是检查名称(用于日志和报告展示),第二个是校验逻辑函数。- 函数返回
Validation.Failure()时,Gatling会将该请求标记为失败,并在报告和日志中显示对应错误信息;返回Validation.Success()则判定检查通过。
内容的提问来源于stack exchange,提问作者Zorka Csendes
相关产品推荐
相关产品推荐

