接口测试-处理经过加密的返回数据的方法

疑问:若接口返回的数据经过加密或格式发生改变,如何处理

进行一层封装,显示转换

  • 将获得的数据进一步判断数据格式,根据条件进行转换。如以下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。通常用于认证内容未被篡改。
原文地址:https://www.cnblogs.com/chenri/p/12683458.html