干货!记一次接口调用失败后的排查思路

2634 篇文章 14 订阅
234 篇文章 1 订阅
文章讲述了在处理一个HTTP接口调用时遇到的签名加密问题,通过排查确定是由于在beanshell脚本中混淆了Jmeter变量和Java变量导致的MD5加密错误。最终,修正变量使用并调整代码后解决了问题。
摘要由CSDN通过智能技术生成

特此声明:以下聊天记录为老师和学员的真实沟通记录,仅用于做典型技术问题分享,敏感信息已打码。VIP学员可以享受永久答疑服务。

2023年2月24日,早上刚到公司,有学员发来问题:有个http接口调不通

问题截图如下:

这个接口是需要签名加密的,现在接口返回code:1,签名验证失败

具体的签名加密方法,是学员自己在beanshell中写的逻辑

  • 分析一:首先怀疑sign字段,接口对于签名字段要求是小写的md5,学员传的是大写的,让学员改成小写试试,结果还是不成功

  • 分析二:对于签名接口,也可能是时间戳不准确,但是学员贴出了获取时间戳的代码,看着也没问题

  • 分析三:接口既然返回了“invaild sign data,有可能是在Jmeter中加密数据出现了错误,按照接口的签名规则,对请求中的参数使用第三方工具进行加密,然后跟Jmeter的加密结果进行对比,结果发现并不一致。说明确实是在Jmeter加密错误。

学员想远程看看,目前问题基本已经定位,应该很快就能解决,暂时不需要远程了,接下来查看学员是如何加密的。

清注意代码中标红的地方,此处调用了自己封装的md5函数,然后想把入参中的phoneNum+testfan字符串+mytime拼接,然后做md5加密。关键是在整个beanshel中,并没有定义phoneNum和mytime这两个Java变量,不过在代码中的这两个地方,分别定义了phoneNum和mytime两个Jmeter变量。

众所周知,在beanshell中变量分成Jmeter变量和Java变量两种形式,Jmeter变量使用vars.get("变量名”的形式调用。Java变量就是直接定义变量,然后执行使用,如String phoneNum ="123”。

这个学员是把Jmeter变量当成Java变量来用了,所以beanshel就识别不到这两个变量,最后拼接后的数据就是错的,加密后自然也是错的了。

学员自己改了下,把改后的代码发了出来,不过仍然有一些小问题,变量名没加双引号。

加上双引号后,问题彻底得到解决,美好的一天,从帮助别人开始。

最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取【保证100%免费】

在这里插入图片描述

 这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值