首页 > 其他分享 >jmeter中断言失败后不继续执行后续的取样器,以及失败事务个数的统计

jmeter中断言失败后不继续执行后续的取样器,以及失败事务个数的统计

时间:2023-11-22 16:46:08浏览次数:32  
标签:String vars get int 失败 put 取样器 jmeter

  • 需要实现的场景:N款产品自动投保,需要统计成功投保的有多少款,失败投保的有多少款?
  • 遇到的问题处理:

问题一、某款产品投保时,若其中一个接口断言失败,如何让后续接口不继续执行?

答:通过if控制器进行处理,

 

 问题二:如何解决统计失败或成功执行的产品数?

答:通过事务处理器+BeanShell监听器进行处理,当察看结果树中有几大条时,beanshell就会对应执行几次,所以,如果我们单个产品投保设置为一个事务,且勾选Generate parent sample,beanshell针对一个事务就只会执行一次,在beanshell监听器中通过int errorNum = prev.getErrorCount();获取事务中最后一个取样器(也就是当前取样器)的ErrorCount,若最后一个取样器失败则为1,成功则为0。

通过beanshell计数来统计失败与成功的产品数;

 

 

 

 

 最后附实现的beanshell代码:

import org.json.*;
import org.json.JSONObject;
import org.apache.jmeter.samplers.SampleResult;

log.info("接口请求响应:"+prev.getResponseCode());
// 统计产品数
String productNum = vars.get("ProductCount");
int proNum = Integer.parseInt(productNum);
proNum+=1;
vars.put("ProductCount",String.valueOf(proNum));
log.info("产品数量:"+vars.get("ProductCount"));
//提取事务随后一个接口的失败状态(0为成功 1为失败)
int errorNum = prev.getErrorCount();
if(errorNum != 0){
    //提取事务名称(用来记录失败产品)
    String tname= sampleResult.toString(); 
    String errName = vars.get("ErrorProductName");
    errName = errName + tname;
    vars.put("ErrorProductName",errName+";");
    //统计产品失败数量
    String err = vars.get("ErrorCount");
    int error = Integer.parseInt(err);
    error+=errorNum;
    //将错误数据塞回给定义的字段,以统计下一个产品请求失败数
    vars.put("ErrorCount",String.valueOf(error));
    //获取请求接口名称,将失败的是那个产品的接口抛出来
    String sampleName = prev.getSampleLabel();
    //获取接口响应体
    String responseData = prev.getResponseDataAsString();
    //将接口响应体转换为json对象
    JSONObject response = new JSONObject(responseData);
    //获取响应失败具体原因    
    String msg = response.getString("msg");
    log.info("msg:"+msg);
    //获取自定义错误原因字段值
    String result = vars.get("ErrorResult");
    result = result +" "+ sampleName + ": " +msg;
    vars.put("ErrorResult",result+";\n");
}else{
    //提取事务名称(用来记录成功产品)
    String tname= sampleResult.toString();
    String sucName = vars.get("SuccessProductName");
    sucName = sucName + tname;
    vars.put("SuccessProductName",sucName + ";");
    //统计产品成功数
    String num = vars.get("ErrorCount");
    int er = Integer.parseInt(num);    
    String productNum = vars.get("ProductCount");
    int proNum = Integer.parseInt(productNum);
    int success = proNum - er;
    vars.put("SuccessCount",String.valueOf(success));
}
log.info("失败原因:"+vars.get("ErrorResult"));
log.info("冒烟产品共"+vars.get("ProductCount")+"款,失败 "+vars.get("ErrorCount")+" 款,成功 " +vars.get("SuccessCount")+" 款\n成功的产品为:"+vars.get("SuccessProductName")+"\n失败的产品为:"+vars.get("ErrorProductName")+"\n失败原因:"+vars.get("ErrorResult"));

 

标签:String,vars,get,int,失败,put,取样器,jmeter
From: https://www.cnblogs.com/lelexiong/p/17849667.html

相关文章

  • VS2022下nuget包同步失败,提示: PackageSourceMapping 已启用,未考虑以下源: **
    随着Net8的发布,顺带VS2022升级到17.8后,发现nuget还原恢复多了一些配置: 有问题的时候,会提示未找到映射源,此时编译会报错,如下示例: 严重性代码说明项目文件行禁止显示状态错误NU1100无法解析net7.0-android33.0的“HarfBuzzSharp.NativeAssets.Linux(>=2.8.2.3)”......
  • 关于mybaitis 动态列名,列名有小数点,导致提示格式转换失败
    nestedexceptionisorg.apache.ibatis.reflection.ReflectionException 此类错误是数据格式问题 关于mybaitis动态列名,列名有小数点,java接受返回值提示格式转换失败处理办法动态列名别名把小数点转换成其他符号,后台拿到数据在转换自己想要的列名......
  • jmeter beanshell常见问题:"BeanShellInterpreter: Error invoking bsh method: eval
    jmeter使用beanshell文件经常会遇到这个问题:BeanShellInterpreter:Errorinvokingbshmethod:evalInfile:inlineevaluationof.... 原因可能有:1.jar包没有放入对应位置解决:放到lib/ext目录下,并且重启jmeter2.beanshell不支持java泛型,如List<String>list=newAr......
  • 一个我个人的jmeter测试流程和命令
    1,准备首先是下载jmeter和插件,包含CustomThreadGroups(多样化的线程组,之后细说),PerfMon(监控服务器信息)接下来部署测试应用,数据库和jmeter到不同的三个服务器上,启动测试应用和数据库,确保功能正常 2,perfmon使用perfmon需要下载两个部分,一个是jmeter的插件,直接从jmeter的Plu......
  • jmeter基本使用实践1
    1、录制脚本打开开发者工具,选中要录制的接口,右键copy>copyascurlbash2、线程数(即并发数):一个用户占一个线程,200个线程就是模拟200个用户;Ramp-Up时间(秒):设置线程需要多长时间全部启动;如果线程数为200,准备时长为10,那么需要1秒钟启动20个线程;也就是每秒钟启动20个线程;循环......
  • Windwos启动Docker失败
    Windwos启动Docker失败一、环境windows10PSC:\WINDOWS\system32>wsl--versionWSL版本:1.2.5.0......
  • C# 22H2之后的windows版本使用SetDynamicTimeZoneInformation设置时区失败处理
    使用SetDynamicTimeZoneInformation设置时区返回false,设置失败。使用PowerShell设置Set-TimeZone成功。///<summary>///设置本地时区///参数取值"ChinaStandardTime",即可设置为中国时区///</summary>///<paramname="timeZoneId"></param>///<retur......
  • Git因文件过大导致提交失败解决方案
    问题描述git推送到远程时因个别文件过大导致推送失败Gitee托管平台对不同套餐的用户采用了不同的配额限制,详情可查阅Gitee产品文档解决方法1、查看超出限额的大文件命令如下,其中557b10ce603309c9a25c0e3924ce3d681104f18c为错误信息中给出的文件的哈希值gitrev-list--......
  • 记一次Rider2021版本 + EmmyLua + XLua 断点失败问题
    https://www.jianshu.com/p/5a453a80b7e9 按照上述配置加载到对应的LuaMain文件中 也发现连接成功了,但是无论如何都断点不到网上寻找发现Rider2021版本后需要1.ProjectSetting->Editor->C#ProjectGeneration添加;lua如下图ps:一定要保存一下(Ctrl+S),关闭Unity,删......
  • axios请求失败、请求超时重新发送请求
    一、axios重新发送请求基础版(所有的请求错误,不论是请求超时还是接口请求出错都会进行重试)以下是一个完整的文件,看懂了的话axios重试请求也就基本会了,不会的话直接复制到项目里,也可以直接调用使用。创建一个axios实例,并在实例中设置请求超时时间timeout、重试请求次数re......