Python+Flask写Mock(测试桩)

前言

作为测试,我们在工作中常常会遇到这样的问题

1、我们的系统和多方的系统对接,在测试的时候,我们需要对方系统给我们返回特征性的数据,但是由于各种原因,对方不能够给我们构造出我们想要的目标数据来验证我们的 系统的业务逻辑处理,这个时候怎么办?

2、当前端开发完成,想要转测,但是我们的后端开发代码还未开发完成,怎么办

3、 当我们的环境构造某个场景的数据,比较复杂,需要做很多的基础数据,操作步骤繁琐,但是我们只是想验证其中某一个小功能的改动怎么办?

当然我们的解决方案有一些,比如可以使用fiddler的autoresponse来做到针对特征的请求设置一些返回值,但是这样的不是非常灵活。

既然我们只是想要一个接口的返回特征数据,那么我们去构造这样一个接口,直接跳过其中的复杂业务逻辑处理,直接给到我们要的特征数据即可,我们可以自己编写接口的方式,来直接返回数据即可(当然也可以做动态数据返回,根据参数来设定不同的返回值),所以有了如下的内容

 

Python篇

环境准备

  1. python解析器

  2. 安装Flask,pip install Flask

  3. python编辑器,如PyCharm

 

模拟请求

在做数据模拟的时候,我们根据请求的方式,以及请求参数的传参形式来进行分开编写,那么常见基于HTTP协议的rest接口有哪些请求方式和数据传参格式呢?请见下表:

请求方式

数据格式

举例

备注

GET

urlPath

/demo/123

参数放在urlPath中,如将123作为参数

Params

/demo?name=zhangsan

参数在URL的?后,如key是name,值为zhagnsan

POST

form-data

name:zhangsan

age:18

传值使用form表单的形式提交,content-type为multipart/form-data

raw-json

{“age”:18,"name":"zhangsan"}

传值使用json方式,content-type为application/json

 

 

 

 

模拟GET接口(URLPath)

python代码如下

 

# coding=utf-8

from flask import Flask, request, json, jsonify


# 实例化Flask类
app = Flask(__name__)


# 在这种方式种,需要在url中,将urlPath中的参数使用<>包起来,并且传值给def 方法,这样就可以在接下来的函数中去使用这个变量了
@app.route('/hello/<name>', methods=['GET'])
def myPath(name):
#处理逻辑略
return name

if __name__ == '__main__':
# 启用服务 debug=True,加上这个参数之后不用重新执行,他会自动执行
app.run(debug=True)

 

 

模拟GET接口(Params)

 

# coding=utf-8

from flask import Flask, request, json, jsonify


# 实例化Flask类
app = Flask(__name__)


@app.route('/hello', methods=['GET'])
def hello():
# 可以通过request.args获取到所有参数键值对
user = request.args
# 也可以单独的去使用key获取值
name = request.args.get("name")
return name

if __name__ == '__main__':
# 启用服务 debug=True,加上这个参数之后不用重新执行,他会自动执行
app.run(debug=True)

 

模拟POST接口(form表单)

 

# coding=utf-8

from flask import Flask, request, json, jsonify


# 实例化Flask类
app = Flask(__name__)


@app.route('/post/form', methods=['POST'])
def postForm():
# 可以通过request.form来获取表单值,通过get或者直接通过key来获取参数值
name = request.form.get("name")
age = request.form['age']
date = {"name":name,"age":age}
# 将字典对象序列化,使用json的dumps方法
return json.dumps(date)

if __name__ == '__main__':
# 启用服务 debug=True,加上这个参数之后不用重新执行,他会自动执行
app.run(debug=True)

 

 

模拟POST接口(JSON请求方式)

 

# coding=utf-8

from flask import Flask, request, json, jsonify


# 实例化Flask类
app = Flask(__name__)


@app.route("/post/josn", methods=['POST'])
def postJson():
# 通过request.get_data的方式将值取出,并且通过loads的方式将请求的参数序列化
user = json.loads(request.get_data(as_text=True))
# 从序列化的变量中获取值,当然这边是一层的path,后续根据层级来获取
name = user['name']
age = user['age']
date = {"name": name, "age": age}
# 将字典对象序列化,使用json的dumps方法
return json.dumps(date)

if __name__ == '__main__':
# 启用服务 debug=True,加上这个参数之后不用重新执行,他会自动执行
app.run(debug=True)

 

posted @ 2022-08-11 10:16  致命风华  阅读(760)  评论(0编辑  收藏  举报