通过上面的代码就限制了do必须出现on后面,否则会提示Mock对象不支持do方法。同时如果只有on没有do,也不会创建新的mock。
远程调用
现在,我们的Mock Server已经可以启动运行了,但必须且只能在启动时指定mock行为,也就是说还不能动态更新配置。
接下来就该RPC登场了,RPC是远程过程调用的简称,这里的远程指的是不同的进程,可能是同一台机器上的,也可能是位于不同机器上的,它们之间可以通过某种PIC(进程间通信)协议传递信息,比如socket。而RPC就是对PIC协议的再封装,把信息发送/接收的过程变成更简单易用的函数调用过程。
本例中使用Python的第三方扩展库rpyc来实现RPC,这样就可以在CASE中动态的修改Mock Server的形为了。
def execute (code,service_name='MOCK_SERVER'): conn=get_online_connectiones(service_name)[-1] if __name__=='__main__': execute(r"""Mock.on( any_package(), large_than(32), ).do( send_back('hello,world! come on ....'), clear_buf(), ).on( got('QUIT\n'), ).do( close_sock(), ).on( got('STOP\n'), ).do( stop_server(), )""") |
在最开始的CASE中的mock_exectue函数,实际上就是对这里的execute的再包装而已。
综述
总结一下我们所实现的这个Mock Server的特点:
● 用事件驱动的方式描述行为
● 用函数来描述[条件]和[结果]
● 用DSL代替配置文件的解析
● 用RPC代替配置文件的分发和加载
相比之传统定义上的Stub Server, Mock Server抛弃了死板的配置文件,将要行为描述与接口实现分离,更利于代码的复用,进一步简化桩程序的开发成本。
(全文完)