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

打印 上一主题 下一主题

主题 858|帖子 858|积分 2574

特此声明:以下聊天记录为老师和学员的真实沟通记录,仅用于做范例技能问题分享,敏感信息已打码。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%免费】

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



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表