Apifox接口自动化--如何将request body中的动态值提取出作为数据库查询的变量
执行后发现接口检验不成功,分析接口检验不成功的原因是接口请求时request中键值key A是数据1,而查询数据库时使用的是另一个数据2。再次执行接口,该接口仍然跑不成功,其原因是request body中的键值key A已成功提取出来,但是数据库查询时仍没有使用到该值。apifox工具中没有封装好的从request body中提取变量的方法,那试试自定义脚本的方法提取request body中的
背景:
在做apifox接口自动化时,在接口request中的body中有键值key A的变量是需要每次执行时更新value值。因此我在环境管理中配置环境变量environment_A,使用数据生成器生成动态数据。然后request中的键值key A和后置操作查询数据库中都引用environment_A。执行后发现接口检验不成功,分析接口检验不成功的原因是接口请求时request中键值key A是数据1,而查询数据库时使用的是另一个数据2。所以数据库查询不出任何数据造成校验失败。

解决方法:
意识到查询数据库时不能使用环境管理中的变量,因为每次去取环境管理中的变量,该变量都会使用数据生成器生成其他的数据。那应该在查询数据库时使用request body中键值key A的值。那现在解决的问题转化成如何提取request body中键值key A的值?
方法1:
在apifox中的后置操作中提取变量,发现只能从response中提取数据,无法从request中提取数据。通过后置操作提取变量的方法尝试失败。

方法2:
apifox工具中没有封装好的从request body中提取变量的方法,那试试自定义脚本的方法提取request body中的键值key A的值。
var request_body = $.request.body;
var parsedbody = JSON.parse(request_body);
var applyGuaranteeId = parsedbody.applyGuaranteeId;
console.log(applyGuaranteeId);
脚本写好后执行接口,提示后置操作request.body没有定义。
百度该错误尝试解决方法,是因为系统无法识别到 $.request.body,需要申明定义 request.body。再次修改脚本:
var request_body = pm.request.body;
var parsedbody = JSON.parse(request_body);
var applyGuaranteeId = parsedbody.applyGuaranteeId;
console.log(applyGuaranteeId);
此时“后置操作request.body没有定义”的错误解决。
再次执行接口,该接口仍然跑不成功,其原因是request body中的键值key A已成功提取出来,但是数据库查询时仍没有使用到该值。此时,有可能是键值key A已成功提取出来,但是没有存入变量中,数据库查询时仍无法关联到该值。因此脚本再次修改,增加了蒋提取出的键值key A的值配置成临时变量的代码。再次执行脚本跑通。
var request_body = pm.request.body;
var parsedbody = JSON.parse(request_body);
var applyGuaranteeId = parsedbody.applyGuaranteeId;
console.log(applyGuaranteeId);
pm.variables.set("applyGuaranteeId", applyGuaranteeId);
总结:
如何在apifox中写脚本:
#获取request body
var request_body = pm.request.body;
#将提取出的body转化成json格式
var parsedbody = JSON.parse(request_body);
#从转化成json格式的body中提取键值key的值
var applyGuaranteeId = parsedbody.applyGuaranteeId;
#将提取出的键值key的值配置成变量,以方面后续操作中使用该变量
pm.variables.set("applyGuaranteeId", applyGuaranteeId);
更多推荐
所有评论(0)