• Mock Server之与被测系统对接(python+flask)


    第一步:获取入参与返回结果

      先通过postman、jmeter、自己写脚本之类的方式请求我们的mock server,试着获取入参与对应的返回值,这里我用的是robotframework + RequestsLibrary

      mock server代码如下,其中多import了request,g,jsonify

     1 #coding:utf-8
     2 from flask import Flask,request,g,jsonify
     3 app = Flask(__name__)
     4 
     5 # 返回结果
     6 @app.before_request
     7 def set_result():
     8     g.test_result1 = 'hello world'
     9     g.test_result2 = {'code':1000,'result':'test'}
    10 #定义路由
    11 @app.route('/api/test', methods=['GET'])
    12 def get_request():
    13     print 'get request'
    14     print request.args.to_dict()
    15     print request.args.get('a')
    16     print request.values.to_dict()
    17     print request.values.get('a')
    18     return g.test_result1
    19 
    20 @app.route('/api/test2', methods=['POST'])
    21 def post_request():
    22     print 'post request'
    23     print request.get_data()
    24     print request.data
    25     print request.values.get('a')
    26     return jsonify(g.test_result2)
    27 
    28 
    29 if __name__ == '__main__':
    30     #host:主机ip,配置为0.0.0.0或主机的ip,则其他同网络环境设备就可以访问该server
    31     #port:端口号,根据实际情况自定义设置,如5000
    32     app.run(debug=True,host='0.0.0.0',port=9003)

      ①先试下get_request,预期返回'hello world',robotframework脚本如下:

      执行结果,返回值如下,与预期结果一致:

      后台打印如下,各方法获取入参如下:

      ②再试下post_request,预期返回{'code':1000,'result':'test'},robotframework脚本如下:

      执行结果,返回值如下,与预期结果一致:

      后台打印如下,各方法获取入参如下:

     

    第二步:让开发在本地修改配置文件

    再看一下mock server的图

    我们的目的是要测试被测系统自身的处理逻辑+与外部服务的交互,我们前面准备了server

    第一步搞定了获取入参与返回值,那么下一步就是要搞定被测系统与server之间的连接。

    因此先让开发在本地修改配置文件,把本来请求外部服务的地址修改成我们的server的,这样我们可以通过浏览器操作他的本地,看是否请求我们的server。

    PS1:这里可以用特定的单据操作,先无视入参,构造对应的返回值。

    PS2:注意系统请求头的Content-Type是什么。

    当为application/x-www-form-urlencoded或者multipart/form-data的时候,也就是我们

    所谓表单提交,访问request.form会返回一个包含解析过的的表单对象的 MultiDict,而request.data是空的。

    当flask遇到不能处理的mimetype时,请求的数据就不能被其它方式正常解析,这些方式包括request.form、request.json和request.files这几个常用的用来访问数据的属性。这时就把数据作为字符串存在request.data中。

    这里注意一下request.json需要application/json。

    PS3:系统庞大的话,让开发直接连测试环境数据库或者用copy的测试环境的数据库

  • 相关阅读:
    springmvc 拦截器
    springmvc 文件上传
    springmvc 数据验证 hibernate-validator --->对象验证
    springmvc 类型转换器 数据回显及提示信息
    springmvc框架自带的异常处理器SimpleMappingExceptionResolver的使用
    如何解决JSP页面顶端报错 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
    eval函数的使用之一
    【模板】负环判定
    【洛谷P1072】Hankson 的趣味题
    【洛谷P1463】反素数
  • 原文地址:https://www.cnblogs.com/walkingtester/p/11377279.html
Copyright © 2020-2023  润新知