loadrunner12.55:delete请求删除数据,响应删除成功,但是实际未删除,响应结果与实际结果不符
2023-09-14 08:59:26 时间
问题描述:
脚本实现删除场景名称为test1的记录,删除请求响应删除成功{"success":true,"data":"","code":200,"message":"删除成功!"},但是前台显示该数据仍然存在
原脚本实现如下:
Action() { int i=1,busiSceneIdnum; char* busiSceneId; web_add_auto_header("Accept-Language", "zh-Hans-CN,zh-Hans;q=0.5"); web_reg_save_param("queryResponseBody", "LB=", "RB=", "Search=Body", LAST); web_custom_request("queryScene", "URL=http://10.248.57.226:9010/user-center/uap-app-scene/queryScene", "Method=POST", "Resource=0", "RecContentType=application/json", "Referer=http://10.248.57.226:9010/U-C/", "Snapshot=t23.inf", "Mode=HTML", "EncType=application/json;charset=utf-8", "Body={\"current\":1,\"size\":10,\"busiSceneId\":\"\",\"sceneName\":\"\"}", LAST); // Create a Json object from a string. lr_eval_json("Buffer={queryResponseBody}", "JsonObject=json_obj_1", LAST); busiSceneIdnum=lr_json_get_values("JsonObject=json_obj_1",//获取响应体所有busiSceneId字段值并保存到数组JinKuList中,用于后面删除的参数化 "ValueParam=JinKuList", "QueryString=$.data.tablesArr[*].busiSceneId", "SelectAll=Yes", LAST); while(i<busiSceneIdnum){ lr_save_int(i,"index"); busiSceneId=lr_eval_string("{JinKuList_{index}}"); lr_output_message("busiSceneId=%s",lr_eval_string(busiSceneId)); //{"success":true,"data":"","code":200,"message":"删除成功!"} web_reg_save_param("ResponseBody", "LB=", "RB=", "Search=Body", LAST); web_reg_save_param("respStatus", "LB=\"success\":", "RB=,\"data", "Search=Body", LAST); web_reg_save_param("respMsg", "LB=message\":\"", "RB=\"}", "Search=Body", LAST); lr_start_transaction("deleteJinKu"); web_custom_request("delete", "URL=http://10.248.57.226:9010/user-center/uap-app-scene/delete?busiSceneId=lr_eval_string(busiSceneId)&state=-1", "Method=DELETE", "Resource=0", "RecContentType=application/json", "Referer=http://10.248.57.226:9010/U-C/", "Snapshot=t24.inf", "Mode=HTML", LAST); if(lr_eval_string("{respStatus}")){ lr_output_message("删除金库成功"); lr_end_transaction("deleteJinKu", LR_PASS); }else{ lr_error_message("删除金库失败,失败原因为:%s",lr_eval_string("{respMsg}")); lr_end_transaction("deleteJinKu", LR_FAIL); } i=i+1; } web_reg_save_param("LastResponseBody", "LB=", "RB=", "Search=Body", LAST); web_custom_request("queryScene_2", "URL=http://10.248.57.226:9010/user-center/uap-app-scene/queryScene", "Method=POST", "Resource=0", "RecContentType=application/json", "Referer=http://10.248.57.226:9010/U-C/", "Snapshot=t25.inf", "Mode=HTML", "EncType=application/json;charset=utf-8", "Body={\"size\":5,\"current\":1,\"busiSceneId\":\"\",\"sceneName\":\"\"}", LAST); return 0; }
日志显示:
经与开发沟通定位显示:实际发送的删除请求地址为http://10.248.57.226:9010/user-center/uap-app-scene/delete?busiSceneId=lr_eval_string(busiSceneId)&state=-1,说明lr_eval_string(busiSceneId)函数的参数化并未起作用,而是本身作为字符串发起了请求,而系统针对非失败的请求均响应成功,所以问题解决的根本在于请求中的busiSceneId字段如何取值。
解决办法:
将请求地址url进行参数拼接实现,实现脚本如下:
lr_save_string(lr_paramarr_idx("JinKuList", i), "busiSceneId");//获取数组JinKuList中索引为i的值
web_custom_request("delete", "URL=http://10.248.57.226:9010/user-center/uap-app-scene/delete?busiSceneId={busiSceneId}&state=-1", "Method=DELETE", "Resource=0", "RecContentType=application/json", "Referer=http://10.248.57.226:9010/U-C/", "Snapshot=t24.inf", "Mode=HTML", LAST);
优化后的完整脚本如下:
Action() { int i=1,busiSceneIdnum; web_add_auto_header("Accept-Language", "zh-Hans-CN,zh-Hans;q=0.5"); web_reg_save_param("queryResponseBody", "LB=", "RB=", "Search=Body", LAST); web_custom_request("queryScene", "URL=http://10.248.57.226:9010/user-center/uap-app-scene/queryScene", "Method=POST", "Resource=0", "RecContentType=application/json", "Referer=http://10.248.57.226:9010/U-C/", "Snapshot=t23.inf", "Mode=HTML", "EncType=application/json;charset=utf-8", "Body={\"current\":1,\"size\":10,\"busiSceneId\":\"\",\"sceneName\":\"\"}", LAST); // Create a Json object from a string. lr_eval_json("Buffer={queryResponseBody}", "JsonObject=json_obj_1", LAST); busiSceneIdnum=lr_json_get_values("JsonObject=json_obj_1",//获取响应体所有busiSceneId字段值并保存到数组JinKuList中,用于后面删除的参数化 "ValueParam=JinKuList", "QueryString=$.data.tablesArr[*].busiSceneId", "SelectAll=Yes", LAST); while(i<busiSceneIdnum){ lr_save_string(lr_paramarr_idx("JinKuList", i), "busiSceneId");//获取数组JinKuList中索引为i的值 //{"success":true,"data":"","code":200,"message":"删除成功!"} web_reg_save_param("ResponseBody", "LB=", "RB=", "Search=Body", LAST); web_reg_save_param("respStatus", "LB=\"success\":", "RB=,\"data", "Search=Body", LAST); web_reg_save_param("respMsg", "LB=message\":\"", "RB=\"}", "Search=Body", LAST); lr_start_transaction("deleteJinKu"); web_custom_request("delete", "URL=http://10.248.57.226:9010/user-center/uap-app-scene/delete?busiSceneId={busiSceneId}&state=-1", "Method=DELETE", "Resource=0", "RecContentType=application/json", "Referer=http://10.248.57.226:9010/U-C/", "Snapshot=t24.inf", "Mode=HTML", LAST); if(lr_eval_string("{respStatus}")){ lr_output_message("删除金库成功"); lr_end_transaction("deleteJinKu", LR_PASS); }else{ lr_error_message("删除金库失败,失败原因为:%s",lr_eval_string("{respMsg}")); lr_end_transaction("deleteJinKu", LR_FAIL); } i=i+1; } web_reg_save_param("LastResponseBody", "LB=", "RB=", "Search=Body", LAST); web_custom_request("queryScene_2", "URL=http://10.248.57.226:9010/user-center/uap-app-scene/queryScene", "Method=POST", "Resource=0", "RecContentType=application/json", "Referer=http://10.248.57.226:9010/U-C/", "Snapshot=t25.inf", "Mode=HTML", "EncType=application/json;charset=utf-8", "Body={\"size\":5,\"current\":1,\"busiSceneId\":\"\",\"sceneName\":\"\"}", LAST); return 0; }
相关文章
- Spring学习笔记(八)——SpringMVC响应数据和结果视图
- 基于Proxy从0到1实现响应式数据
- 手机响应式网站设计_如何做响应式网页设计
- Golang框架Gin入门实战--(2)Gin路由中响应数据
- Vue3响应式助你轻松实现国际化
- (六)监听响应数据的变化
- 2. 「vue@2.6.11 源码分析」数据驱动视图(响应式)
- 【Vue 响应式数据原理】数据双向绑定原理
- 【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)
- Adobe Dreamweaver 2021:引领响应式网站设计新时代 安装步骤
- MySQL安装的最后一步: 无反应(mysql安装最后一步未响应)
- springboot springmvc拦截器 拦截POST、PUT、DELETE请求参数和响应数据,并记录操作日志详解编程语言
- HttpClient携带请求JSON数据访问HTTP接口得到响应JSON数据详解编程语言
- Yac缓存与Redis实现快速应用响应(yac缓存和redis)
- Redis队列实时响应数据获取(redis队列 实时返回)
- javascript一个函数对同一元素的多个事件响应
- 滚动条响应鼠标滑轮事件实现上下滚动的js代码