Android+Python Flask+Nginx搭建Mock服务器

无论是产品的快速迭代,还是使用敏捷开发,需求总会不断地增加,变更。
一个普遍的开发场景是(串行,省略部分会议)

接口文档定义>>服务器开发>>客户端开发>>接口上线>>联调>>测试上线。

如果在快速迭代的环境下,两周左右一个Android版本就必须登陆市场。如果按照上面的流程来走,会给Android/iOS/WP程序员带来巨大的压力,第一周等服务器写接口,第二周拼命加班赶进度,还有被测试催时间。

假如可以先通过接口文档的定义,自己模拟出服务器返回结果,通过代理方式进行开发测试,等服务器上线之后,客户端一行代码都无需改动就可以提交测试,so cool~

可以实现的方法有:

  • 通过抓包工具,例如Fiddler/charles
  • 通过自建服务器和反向代理

第二种方法比第一种难,而且比较hacker,下面讲解第二种方法。

Python环境安装

我用的Python 2.7,安装步骤请谷歌。

Flask和REST框架安装

Flask安装
Flask REST安装

Nginx安装

Nginx windows zip

Python请求

上面的环境问题可以根据windows/mac/linux系统自行选择配置,这里不再赘述。
现在进入代码编写部分,easy!

GET请求

GET请求包括了大部分的请求。
下面是简单的Python代码,引入包

from flask import abort, jsonify, Flask, request

初始化 & 造点数据吧

app = Flask(__name__)

tasks = [
    {
        'id': 1,
        'title': u'Buy groceries',
        'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
        'done': False
    },
    {
        'id': 2,
        'title': u'Learn Python',
        'description': u'Need to find a good Python tutorial on the web',
        'done': False
    }
]

定义请求

@app.route("/todo", methods=['GET'])
def get_all_task():
    return jsonify({"task": tasks})

启动服务器

if __name__ == "__main__":
    app.run()

检查,打开命令行输入

curl http://localhost:5000/todo

或者在浏览器中输入

http://localhost:5000/todo

可以得到前面造的数据。

Post请求

假设往数据库里面插数据,先判断是否Json字段,主键有没有重复。参数合法则从中取值,构建Task对象并插入队列中。

    @app.route("/todo/tasks", methods=["POST"])
    def create_task():
        if not request.json or not "title" in request.json:
            return jsonify({"error" : "wrong parameters"})
        task = {
            "id" : tasks[-1]["id"] + 1,
            "title" : request.json["title"],
            "des" : request.json.get("des", "")
        }
        tasks.append(task)
        return jsonify({"task" : task}), 201

Nginx

反向代理

可以理解一下知乎中关于反向代理的回答

它代理了服务器,可以监听转发用户的请求到指定的服务器,然后再把应答转发到相应的客户端。

把Nginx下载完成后,在安装目录下打开conf/nginx.conf,配置如下:

upstream xxstream {
    server 8.8.8.8:80;(正常服务器地址)
}

 server {
        listen       x.x.x.x:80; (填写本地的ip地址)
        server_name  www.google.com;(需要监听请求的域名)
    
        
        location / {(正常请求走正常流程)
            resolver 127.0.0.1;
            proxy_set_header Host $http_host;
            proxy_connect_timeout 5;
            proxy_pass http://xxstream /;
            error_log  logs/access.log  debug;
        }

        
        location = /xxx/yyy(需要拦截的地址) {
            proxy_pass http://localhost:5000;(自建服务器地址,这里是Flask默认地址)
        }
    }

上面的配置代表监听从x.x.x.x:80发出的请求中带有www.baidu.com域名的请求,其中www.google.com/xxx/yyy的请求发往自己的服务器,其他则发往正常的服务器(upstream中定义)。

请求分发

还有需要在本地hosts添加

x.x.x.x www.google.com #(本地ip地址 请求域名)

重启Nginx服务器。

在Python服务器开启后可以看见过滤的请求。

在手机链接wifi设置静态代理,x.x.x.x:80

总结

如果你跟着完成到这里,恭喜你,代码没写多少,配环境倒是花了不少时间,毕竟是一劳永逸的东西。

终于可以实现自己的Mock服务器了,还不快去把测试用例补一补!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容

  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,672评论 24 1,002
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,654评论 18 139
  • 学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器。根据搜索的教程照做,对于原理一...
    Cocoa_Coder阅读 17,126评论 4 56
  • [TOC] Deploy Flask Application with Nginx and uWSGI 考虑到部署...
    ttdevs阅读 3,740评论 2 9
  • 夏日的夜 静悄悄 山谷里的风儿来到 惊醒树上的鸟儿 吹过枝头的蝉 撩起你的发梢儿 拂过我的面庞 一片芬芳 青蛙在叫...
    桦丁阅读 156评论 0 0