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

xiaoxiao2021-02-28  21

前提

在写一个自动化测试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

参考

http://turq.readthedocs.io/en/latest/
转载请注明原文地址: https://www.6miu.com/read-2627512.html

最新回复(0)