业务场景:
通常我们需要通过手机扫描二维码进行签到确认到访,为了提高测试效率,我们可以通过接口实现快速签到
首先可以通过抓包获取接口之间业务参数关系,方可进行动态关联处理签到。
例如:我这里的二维码实际上是上一个客户报备接口返回的一个二维码图片地址,而我下一个签到接口所需要的一个参数值 不知道从哪里来?分析了半天才发现这个参数值是在上一个接口返回的结果里,我们所需要的这参数就在这个二维码图片地址里 如下图:
‘https://xfb-materia-test.obs.cn-south-1.myhuaweicloud.com/dc-openonline-file/ea2a1fbb-384d-400b-866e-e5b6308ab990.jpg’
下面着重解决如何解析上一个接口的二维码,通过解析这个二维码获取二维码里我们需要的参数
‘visitQrCodeUrl’: ‘https://xfb-materia-test.obs.cn-south-1.myhuaweicloud.com/dc-openonline-file/ce1fa49f-0ef3-40d6-99bb-7d31e7f702f8.jpg’}
我们通过调用上一个接口提取出这个二维码图片地址,可以看的出此图片地址是云服务器返回来的,我们需要将此图片地址下载到本地方可查看到二维码图片,代理处理如下:
#通过get请求从云服务器下载图片到本地保存
# 下载二维码到本地
imgresponse = requests.get("{}".format(add_reserve_info()["data"]["visitQrCodeUrl"]), stream=True) # 以流的方式打开
with open(r"C:\Users\28071\Desktop\Desktop\分销二维码图片\1.jpg", "wb") as jpg:
jpg.write(imgresponse.content)
下载完后可在本地目录查看到此二维码图片的显示,如下图:
现在我们需要将此二维码图片通过第三方包进行解析获取二维码里的参数:
需要用到以下3个包
from pyzbar.pyzbar import decode
from PIL import Image
from urllib import parse
# 解析二维码-从本地打开此图片
img = Image.open(r"C:\Users\28071\Desktop\Desktop\分销二维码图片\1.jpg")
barcodes = decode(img) #解析第三方包解析二维码
print(barcodes)#打印解析结果如下:
#[Decoded(data=b'orgId=181&appId=1001&clueId=6e028157-3dd6-4d92-8a6e-dd15918fbc59&teamId=&productId=&productName=&projectId=3274&firstChannelIdentity=10011&secondChannelIdentity=181&referrerAccountId=100020241&referrerName=\xe9\xab\xaf\xe5\xbe\xa1\xef\xbd\xb8\xe9\xa1\x94\xe8\x84\x82\xe9\x84\x82\xef\xbd\xae\xe8\x8d\xb3\xe5\xa4\x90\xef\xbd\xa1\xef\xbd\xbe\xe9\xab\xa3\xef\xbd\xae&referrerMobile=18811111117&clueAccountId=100037774&name=\xe9\x82\x89\xef\xbd\xbb-\xe8\xb0\xba\xef\xbd\xa7\xe9\xab\xa6\xef\xbd\xb3\xe9\xab\xae\xef\xbd\xaa&gender=1&mobile=13494829720', type='QRCODE', rect=Rect(left=12, top=12, width=276, height=276), polygon=[Point(x=12, y=12), Point(x=12, y=288), Point(x=287, y=287), Point(x=288, y=12)], quality=1, orientation='UP')]
a = [code.data.decode("utf-8") for code in barcodes][0]
print(a)#打印如下:
#orgId=181&appId=1001&clueId=adccf318-ca4f-4cf7-8497-bdf6ee4ff0d5&teamId=&productId=&productName=&projectId=3274&firstChannelIdentity=10011&secondChannelIdentity=181&referrerAccountId=100020241&referrerName=陌上玉置业顾问&referrerMobile=18811111117&clueAccountId=100037787&name=系-刘秀兰&gender=1&mobile=18159815903
clueId = parse.parse_qs(a).get("clueId")[0] #通过第三方包提取我们想要的值clueid
print(clueId)#打印结果如下:
#adccf318-ca4f-4cf7-8497-bdf6ee4ff0d5
拿到我们的clueid 后 我们可以放在下一个接口引用进行签到