记录一下这个问题:
问题:上传的图片链接存在数据库里,请求接口返回的参数中也有这个图片链接,要断言返回参数的图片链接和数据库的是同一张图片
难点:但是都是加了签名的,直接进行对比,是通不过的
解决思路:后来想了一个办法,就是用数据库的自带函数SUBSTRING_INDEX(str,delim,count),截取签名前的字符串,和接口返回的参数进行对比(返回参数用jsonpath进行提取),用包含关系进行断言就可以了
函数解释:SUBSTRING_INDEX(str,delim,count),str就是需要截取的字符串,delim就是标志位,以什么作为截断的字符,count就是取截取后的字符串数组的第几位,下标是从1开始的,不是从0开始的,如果要取最后一位可以用-1
举例:
数据库里的图片链接:
https://s3.ap-southeast-1.amazonaws.com/iglooinsure.qa-fileapi/SompoUIC-2022-01-c9f203-222.jpeg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAU2NHV2XFADTKQNVK%2F20220114%2Fap-southeast-1%2Fs3%2Faws4_request&X-Amz-Date=20220114T032625Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=059cd4891c6a42160a7e276a7aa457800b70a51020dd9d800b403ba57d520619w
问号后面的字符串都是签名,每一次接口返回的都不一样,两者不能直接进行对比
用SUBSTRING_INDEX()提取问号前的字符串,取第一个数组:
select SUBSTRING_INDEX(json_unquote(json_extract(json_extract(claim_form,'$.claim_docs'),'$.hospital_discharge[0]')),'?',1) as hospital_discharge
from claim where display_id='HAS62140122-B-00007MA.CL00000012'
然后在断言的时候用包含关系:
tips:这个接口测试工具用的meter sphere,是继承jmeter