• Python_01_适配器模式实现多协议接口测试框架


    
    # 适配器模式
    from abc import ABCMeta, abstractmethod
    
    
    class HTTPRequest(object):
        def __init__(self, url, body):
            self.url = url
            self.body = body
    
        def get(self):
            print(f"http get->{self.url}-{self.body}")
    
        def post(self):
            print(f"http post->{self.url}-{self.body}")
    
    
    class WebSocket(object):
        def __init__(self, url, msg):
            self.url = url
            self.msg = msg
    
        def request(self):
            print(f"websocket-{self.url}-{self.msg}")
    
    
    class Request(object):
        def __init__(self, method, url, body, proto):
            self.method = method
            self.url = url
            self.body = body
            self.proto = proto
    
    
    class RequestAdapter(metaclass=ABCMeta):
        @abstractmethod
        def send(self, request: Request):
            pass
    
    
    class WebSocketAdapter(RequestAdapter):
        def send(self, request: Request):
            websocket = WebSocket(url=request.url, msg=request.body)
            websocket.request()
    
    
    class HttpAdapter(RequestAdapter):
        def send(self, request: Request):
            http = HTTPRequest(url=request.url, body=request.body)
            if request.method == "get":
                http.get()
            elif request.method == "post":
                http.post()
    
    
    class ApiRequest(object):
        adapter: RequestAdapter
    
        def __init__(self, method="", url="", body="", proto="http"):
            self.request = Request(
                method,
                url,
                body,
                proto
            )
    
        def send(self):
            if self.request.proto == "websocket":
                adapter = WebSocketAdapter()
            elif self.request.proto == "http":
                adapter = HttpAdapter()
            else:
                raise ValueError(self.request.proto)
            adapter.send(self.request)
    
    
    if __name__ == '__main__':
        # http和websocket两套适配器 同一套接口测试不同协议的接口服务
        ApiRequest(proto="websocket").send()
        ApiRequest(proto="http", method="get").send()
    
    
  • 相关阅读:
    Java里的堆(heap)栈(stack)和方法区(method)
    SpringMVC 的 Controller 返回各种视图的处理方式
    Nginx Open File Cache
    HandlerInterceptor与MethodInterceptor
    Mysql的with rollup分组统计功能(5.1以上版本)
    idea中@data不生效
    java中? extends T 和? super T解析
    java8排序
    spring boot gateway自定义限流
    spring boot添加logging不能启动且不报错
  • 原文地址:https://www.cnblogs.com/carp-li/p/15152088.html
Copyright © 2020-2023  润新知