接口测试-处理经过加密的返回数据的方法
疑问:若接口返回的数据经过加密或格式发生改变,如何处理
进行一层封装,显示转换
- 将获得的数据进一步判断数据格式,根据条件进行转换。如以下demo
class TestEncode:
def test_api(self):
req = ApiRequest()
req_data = {
"schema": "http",
"encoding": "base64", # 这个字段根据数据格式而定
"method": "get",
"url": "http://1.1.1.1/topics.txt",
"headers": None
}
r = req.send(req_data) # 将数据发送到已封装的函数,返回一个json格式的数据
assert len(r["topics"]) == 2
class ApiRequest:
"""对数据进行相应的封装,进行格式转换"""
def send(self, data: dict):
if data["schema"] == "http":
res = requests.request(data["method"], data["url"], headers=data["headers"])
if data["encoding"] == "base64": # 判断数据的编码格式
# 使用base64进行解密,将解密后的数据转换成json结构体的数据
return json.loads(base64.b64decode(res.content))
else:
return json.loads(res.content) # 若数据格式不是base64,将原生内容进行json格式化
elif data["schema"] == "dubbo":
pass
elif data["schema"] == "websocket":
pass
else:
pass
- 修改requests 加入hook,隐式转换数据。修改底层库的方法将数据转换
- 若是以base64进行加密,则可以使用base64.b64decode(keyword)函数进行解密后,在转换为json格式或其他格式。
- 若是不知道加密的算法,可与开发商讨,给定一个接口,向接口请求数据,返回所要的具有相应格式的数据
- 加解密不要体现在测试用例中
加密方法
- 请求加密:摘要加密 把原文或者原始请求中的部分字段做摘要算法的加密,把加密后的结果也放到原始请求中发送。
- 响应加密:返回的整个响应或者响应中的部分字段被加密,我们需要找到解密办法,还有一个名字叫摘要算法。
解密方式
- 自己解决通用解密算法
- 需要研发提供加解密的lib
- 需要加密方提供远程解析服务,这样算法仍然是保密的。
加密与签名的区别
- 加密通常代表是对称加密,这种加密是可以解密的。比如base64,主要用于的数据传输。
- 签名通常代表是非对称加密,这种加密不可逆不可解密。比如rsa、md5。通常用于认证内容未被篡改。
您对以上内容有何建议或意见,请写下来告诉我,谢谢!!!