撸了一个微服务(SOA) MOCK 服务 pfrock - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
knightliao
V2EX    分享创造

撸了一个微服务(SOA) MOCK 服务 pfrock

  •  
  •   knihtliao 2016-03-04 17:42:10 +08:00 3240 次点击
    这是一个创建于 3512 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/knightliao/pfrock

    pfrock

    A plugin-based server for running fake HTTP and socket services (especially SOA service) using Python.

    _ (`-. _ .-') .-. .-') ( (OO ) ( \( -O ) \ ( OO ) _.` \ ,------.,------. .-'),-----. .-----. ,--. ,--. (__...--''('-| _.---'| /`. '( OO' .-. ' ' .--./ | .' / | / | |(OO|(_\ | / | |/ | | | | | |('-. | /, | |_.' |/ | '--. | |_.' |\_) | |\| | /_) |OO )| ' _) | .___.'\_)| .--' | . '.' \ | | | | || |`-'| | . \ | | \| |_) | |\ \ `' '-' '(_' '--'\ | |\ \ `--' `--' `--' '--' `-----' `-----' `--' '--' 

    requirements

    python >=2.7

    开发进度

    • dev(develop branch): 0.2.5
    • master(stable branch): 0.2.5

    English readme

    https://github.com/knightliao/pfrock/blob/master/README-en.md

    主要目标

    • 为微服务架构( SOA )而生。
      • 可以 mock 微服务架构( SOA )中各式各样的服务接口请求
      • 统一的代理服务入口。通过提供统一的 router 入口, 用户不必一个一个接口的去对接 mock. 统一接入代理服务即可.
    • 强大的功能
      • 配置文件式设计,零开发成本
      • 更改配置文件,无须重启,自动生效
      • 输入自定义匹配 url, method(GET/POST/PUT/DELETE/HEAD); 输出自定义 静态文件 /静态目录 /动态 handler/header
    • 开放式设计
      • 插件式开发,即插即用, 为可扩展性提供良好支持。目前系统核心已经支持 静态 /动态 /自定义 的 Mock 服务能力
      • 开放性,利用 python 动态能力,可以与各种中间件交互,登录 redis/Q/db/hadoop

    也就是说,

    • 我们可以随心所欲的对任何 URL, 任何 method 进行 mock.
    • 并且可以对不想 mock 的 URL, 还是让他请求原来要请求的服务.

    通过此种方式, 我们可以以最低的侵入性, 实现为系统的部分或者全部接口进行 mock.

    可用的插件

    快速安装

    pip install pfrock==0.2.5

    (pypi: https://pypi.python.org/pypi/pfrock)

    Quick-Start

    demo 目录结构

    - demo - mocks - handler - hello_world.py - __init__.py - static - a.json - b.json - __init__.py - __init__.py - pfrockfile.json 

    配置文件

    { "servers": [ { "port": 8888, "routes": [ { "path": "/api1/(.*)", "handler": "pfrock_static_plugin", "options": { "routes": [ { "path": "json", "file": "mocks/static/a.json" }, { "dir": "mocks/static" } ] } }, { "path": "/api", "methods": [ "GET" ], "handler": "pfrock_http_plugin", "options": { "handler": "mocks.handler.hello_world.HelloWorldHandler", "query": "1!", "pageno": 1 } }, { "path": ".*", "methods": "any", "handler": "pfrock_proxy_plugin", "options": { "url": "http://www.sov5.com" } } ] } ] } 

    启动

     pfrock git:(master) pfrock git:(master) cd demo demo git:(master) pfrockpy _ (`-. _ .-') .-. .-') ( (OO ) ( \( -O ) \ ( OO ) _.` \ ,------.,------. .-'),-----. .-----. ,--. ,--. (__...--''('-| _.---'| /`. '( OO' .-. ' ' .--./ | .' / | / | |(OO|(_\ | / | |/ | | | | | |('-. | /, | |_.' |/ | '--. | |_.' |\_) | |\| | /_) |OO )| ' _) | .___.'\_)| .--' | . '.' \ | | | | || |`-'| | . \ | | \| |_) | |\ \ `' '-' '(_' '--'\ | |\ \ `--' `--' `--' '--' `-----' `-----' `--' '--' pfrock version 0.2.2 [I 2016-03-04 14:07:05,231 pfrock.core MainThread __init__:19] started server 8888 with autoreload mod 

    静态文件 json get 请求

     ~ curl http://localhost:8888/api1/json { "a": "bddd33e34" }% 

    静态文件 json post 请求

     ~ curl -X POST -d {} http://localhost:8888/api1/json { "a": "bddd33e34" }% 

    静态目录 json get 请求

     ~ curl http://localhost:8888/api1/b.json { "b": "bbb" }% 

    动态能力 get

     ~ curl 'http://localhost:8888/api' Hello, world 1! 1% ~ 

    代理能力

    那么, 除了上面这些 URL 之外, 没有被匹配的 URL 怎么办? 就用代理到默认的服务器上吧! 这在项目中经常会被用到.

     ~ curl 'http://localhost:8888/' 

    没有匹配到的 URL 自动被 路由到 设定的 域名和端口上.

    这里是被路由到 http://www.sov5.com

    Tutorial

    more demos

    https://github.com/knightliao/pfrock-demos

    敏捷开发建议

    建议按以下方式进行敏捷开发

    • 服务间定好接口
    • 使用 pfrock 来提供统一 mock 服务
    • 通过 mock 接口,修改配置文件,无须重启 pfrock ,快速进行接口式开发
    • 联调过程和测试过程,亦可通过 pfrock 来进行部分接口 mock, 避免部分服务不稳定影响整体服务能力

    群联系讨论

    7 条回复    2016-04-26 00:25:15 +08:00
    ezreal
        1
    ezreal  
       2016-03-04 18:30:54 +08:00
    赞~
    ezreal
        2
    ezreal  
       2016-03-04 18:34:41 +08:00
    但是怎么产品随机的模拟数据呢
    knightliao
        3
    knightliao  
    OP
       2016-03-04 20:32:44 +08:00
    @ezreal 那这个就是另外一个话题了。。关于如何产生 合格的 随机的 较大规模的 测试数据
    knightliao
        4
    knightliao  
    OP
       2016-03-04 20:33:50 +08:00
    @ezreal 最近还在为它开发一个插件 ,可以比较方便的根据用户规则 引擎来返回数据
    ezreal
        5
    ezreal  
       2016-03-05 20:16:05 +08:00
    @knightliao 觉得应该把这个功能整合进去,不然功能太有限了
    knightliao
        6
    knightliao  
    OP
       2016-03-05 21:16:25 +08:00
    @ezreal 可以,回头我搞上
    knightliao
        7
    knightliao  
    OP
       2016-04-26 00:25:15 +08:00
    支持具有参数规则引擎计算服务能力 https://github.com/knightliao/pfrock/wiki/Tutorial-5
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5419 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 08:46 PVG 16:46 LAX 01:46 JFK 04:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86