Python3 使用Turq mock一个极轻量的http server

前提
在写一个自动化测试suite的过程中,需要测试一个异步的API。调用这个API会向一个notification server发送一个包含notification的request,notification server根据reques的内容返回一个response,response包含了此次调用的最终结果。
因此,测试这个API需要一个notification server,怎么办?mock一个简单的server,只要能处理http请求,解析request中的内容,然后返回结果就行。

Turq
在Google的过程中,发现有一个叫turq的包,支持用python3 mock server,而且极其轻量。
安装:
pip3 install turq
测试:
$ turq
如果能够像下面一样正常启动,说明安装成功:
18:22:19  turq  new rules installed
18:22:19  turq  mock on port 13085 - try http://pergamon:13085/
18:22:19  turq  editor on port 13086 - try http://pergamon:13086/
18:22:19  turq  editor password: QGOf9Y9Eqjvz4XhY4JA3U7hG (any username
Turq自带一个编辑器,你可以在浏览器中访问 http://localhost:13086/ 打开编辑器。网页会向你请求用户名和密码,若没用配置则只输入启动turq时给的密码不输入用户名即可。
你可以根据右边的实例mock一个简单的server:
然后在Postman中测试:
同时在启动turq的命令行中可以看到相关log的输出:
17:22:25  turq.request.3  + Content-Type: text/plain; charset=utf-8
17:22:25  turq.request.3  sending 37 bytes of response body
17:22:55  turq.request.4  > POST /scif/notification/info HTTP/1.1
17:22:55  turq.request.4  + Host: localhost:13085
17:22:55  turq.request.4  + Connection: keep-alive
17:22:55  turq.request.4  + Content-Length: 126
17:22:55  turq.request.4  + User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
17:22:55  turq.request.4  + Cache-Control: no-cache
17:22:55  turq.request.4  + Origin: chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop
17:22:55  turq.request.4  + Postman-Token: 647786e0-5e14-b489-686c-d8499f5852d4
17:22:55  turq.request.4  + Content-Type: application/vnd.yang.data+json
17:22:55  turq.request.4  + Accept: */*
17:22:55  turq.request.4  + Accept-Encoding: gzip, deflate, br
17:22:55  turq.request.4  + Accept-Language: zh-CN,zh;q=0.9
17:22:55  turq.request.4  received request body: 126 bytes
17:22:55  turq.request.4  < HTTP/1.1 200 OK
17:22:55  turq.request.4  + Content-Type: application/json
17:22:55  turq.request.4  + Date: Mon, 09 Apr 2018 09:22:55 GMT
17:22:55  turq.request.4  sending 48 bytes of response body
当然,如果我要在测试脚本中mock server可以这样来编辑并启动这个server:
首先写一个后台rule文件,保存为rules.py:
if route('/scif/notification/info'):
    if POST:
        debug()
        result = request.json['result']
        soId = request.json['soId']
        if result == "ok":
            json({"sdx:output": {"result": "ok", "soId": soId}})

启动该server:

$ turq --no-editor --rules ./rules.py
或者后台运行,将log输出到指定文件中:
$ nohup turq --no-editor --rules ./rules.py >logs/notification-server.log 2>&1 &
通过ctrl+C终止进程,或者使用pkil命令:
$ pkill turq
参考

Turq user manual — Turq 0.3.2.dev1 documentation


更新

如遇以下错误:

AttributeError: module 'werkzeug.http' has no attribute 'parse_authorization_header'

原因:werkzeug 版本过高,回退到2.3.7 即可。'parse_authorization_header' not found in werkzeug 3.0.0 · Issue #6541 · psf/requests · GitHub

pip3 uninstall werkzeug

pip3 install werkzeug==2.3.7

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值