【云+社区年度征文】最简单没有之一的挡板程序FLASK实现

2020-12-21 09:48:42 浏览数 (1)

所谓挡板程序,就是在被测程序和其依赖的测试环境之间建立一个挡板,模拟依赖环境的返回,降低其对环境的依赖性。挡板程序一般用来解决以下问题:

  1. 测试环境不具备,比如说有些数据要用真实的发票,实际又找不来那么多种真实的发票,怎么测试呢?可以用挡板。
  2. 产品之间解耦。产品A与产品B深度耦合,A有问题了B就用不了,A不稳定的情况下,如何测试B呢?可以用挡板。

开发一个挡板程序可以很简单,有多简单呢?简单几行代码就可以搞定静态地址、get请求、post请求的返回。

代码语言:javascript复制
from flask import Flask, request
#创建Flask实例
app = Flask(__name__)

#通过路由模拟静态返回
@app.route('/hi')
def index():
   return 'hi, 服务起来啦'

#模拟get请求,参数不区分大小写
@app.route('/geta', methods=['GET'])
def get():
  return request.args.get('a')
    
#模拟post请求
@app.route('/postb', methods=['post'])
def post():
  return request.form.get('b')

#启动服务
if __name__ == '__main__':
    app.run('127.0.0.1', 9000)

上面是一个基于Flask的Python程序,在命令行中输入以下命令,就可以启动挡板服务。

代码语言:javascript复制
python run.py

要运行这个程序,首先要安装python (Flask支持 Python 3.4 及更高版本的 Python 3 、 Python 2.7 和 PyPy,我用的是python 3.7),然后安装Flask包,就可以使用了。

代码语言:javascript复制
pip install Flask

服务启动成功后,我们可以用浏览器访问服务地址(http://127.0.0.1:9000/hi)验证:

浏览器中访问静态地址验证服务启动成功浏览器中访问静态地址验证服务启动成功
浏览器中通过地址传参数验证get方法返回浏览器中通过地址传参数验证get方法返回

我们还可以使用工具postman、curl等验证通过form提交的post请求能够被正确返回:

Mac上使用curl验证post方法返回值Mac上使用curl验证post方法返回值

上面是最简单的场景下挡板服务的实现。在实际项目中,我们往往需要处理更加复杂的情况,比如说数据的加密,各种参数和数据传递的处理,等等。因此,在项目中的挡板测试服务,一般需要以下步骤:

  1. 了解要实现的挡板场景,对业务有个基本的了解;
  2. 和相关研发人员沟通,获取接口文档,这样才能正确的模拟各接口的输入和输出;
  3. 设计挡板测试用例,根据需要实现底层的支持,如数据加解密的实现,是否需要打印日志供问题定位使用,等等;
  4. 实现挡板服务;
  5. 设计挡板测试数据;
  6. 与研发人员沟通,将被测系统的地址切换为挡板服务地址,进行联调,保证业务畅通;
  7. 进行挡板测试。

各个项目的具体挡板实现需求不同,此处就不展开叙述各个部分的实现。本文旨在说明挡板服务的入门并不难,投入成本不高,却可以解决项目中的某些痛点,性价比挺高。但是,挡板测试并不能代替功能测试,只是一个辅助手段。模拟一个全量的依赖系统响应返回的成本是很高的,代价在于穷举各种场景和返回值。在一般的项目中,模拟一个完全的挡板服务的代价,高于其产出,因此挡板测试不能完全取代功能测试。特殊情况下除外哈!即使完全模拟了被依赖系统的返回,去掉挡板后的真实业务测试还是建议要走一遭的,以保证业务的完整性和正确性。

0 人点赞