背景:

在做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);

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐