zoukankan      html  css  js  c++  java
  • 接口测试加解密与多环境测试

    加密方法

    • 请求加密:摘要加密 把原文或者原始请求中的部分字段做摘要算法的加密,把加密后的结果也放到原始请求中发送。
    • 响应加密:返回的整个响应或者响应中的部分字段被加密,我们需要找到解密办法,还有一个名字叫摘要算法。

    加密与签名的区别

    • 加密通常代表是对称加密,这种加密是可以解密的。比如base64,主要用于的数据传输。
    • 签名通常代表是非对称加密,这种加密不可逆不可解密。比如rsa、md5。通常用于认证内容未被篡改。

    解密方式

    • 自己解决通用解密算法
    • 需要研发提供加解密的lib
    • 需要加密方提供远程解析服务,这样算法仍然是保密的
    
    import base64
    import json
    
    import requests
    
    
    class TestEnCode:
        origin_url = 'http://0.0.0.0:8000/json_1.txt'
        url = "http://0.0.0.0:8000/base64_1.txt"
    
        def test_get(self):
            r = requests.get(url=self.url)
            print(r.content)
            data = self.decode(r.content)
            j = json.loads(data)
            print(j)
            assert len(j['topics']) == 2
    
        def test_encode(self):
            r = requests.get(url=self.origin_url)
            print(r.json())
            assert len(r.json()['topics']) == 2
    
        def decode(self, raw):
            return base64.b64decode(raw)
    
        def test_base64_api(self):
            """返回结果有加密"""
            res = ApiRequest()
            res_data = {
                "schema": "http",
                "encoding": "base64",
                "method": "get",
                "url": "http://docker.testing-studio.com/base64_1.txt",
                "headers": None
            }
            j = res.send(res_data)
            assert len(j['topics']) == 2
    
        def test_api(self):
            """返回结果没有加密"""
            res = ApiRequest()
            res_data = {
                "schema": "http",# 请求方式
                "encoding": "",# 是否加密
                "method": "get",# 请求方法
                "url": "http://0.0.0.0:8000/json_1.txt",
                "headers": None
            }
            j = res.send(res_data)
            assert len(j['topics']) == 2
    
    
    class ApiRequest:
        """处理接口返回数据加密"""
    
        def send(self, data: dict):
            if data["schema"] == "http":
                # 把host修改为iP,并附加host到headers
                """支持多环境测试"""
                env = {
                    "docker.testing-studio.com": {
                        "test": "192.168.1.37",
                        "dev": "192.168.2.14"
                    },
                    "default": "test"
                }
                # 井host修改为IP
                data["url"] = str(data['url']).replace("docker.testing-studio.com",
                                                    env['docker.testing-studio.com'][env['default']])
                # 添加host到headers中
                data["headers"]["host"] = "docker.testing-studio.com"
                res = requests.request(data["method"], data['url'], headers=data["headers"])
                if data['encoding'] == 'base64':
                    return json.loads(base64.b64decode(res.content))
                else:
                    return json.loads(res.content)
            elif "dubbol" == data['schema']:
                pass
            elif data['urllib'] == "urllib":
                pass
            elif data['schema'] == "websocket":
                pass
            else:
                pass
    
    
  • 相关阅读:
    Dapper and Repository Pattern in MVC
    在linux中使用多个redis端口来构建redis集群
    搭建Sql Server AlwaysOn 视频教程
    支付宝支付插件使用文档
    NopCommerce添加事务机制
    NopCommerce(3.9)作业调度插件
    微信扫码支付插件使用文档
    生成HTML表格的后台模板代码
    json字符串和字典类型的相互转换
    NopCommerce适应多数据库方案
  • 原文地址:https://www.cnblogs.com/an5456/p/11729717.html
Copyright © 2011-2022 走看看