美文网首页
python web接口测试--使用flask框架进行mock测

python web接口测试--使用flask框架进行mock测

作者: D_w | 来源:发表于2021-09-29 14:02 被阅读0次

    web接口测试为什么要mock呢

    (1)需要将当前被测单元和其依赖模块独立开来,构造一个独立的测试环境,不关注被测单元的依赖对象,只关注被测单元的功能逻辑。

    (2)被测单元依赖的模块尚未开发完成,而被测单元需要依赖模块的返回值进行后续处理。

    前后端项目中,后端接口开发完成之前,接口联调

    依赖的上游项目的接口尚未开发完成,需要接口联调测试;

    被测单元依赖的对象较难模拟或者构造比较复杂。

    这里选择使用python的flask框架进行mock操作,Flask是由python实现的一个web微框架,安装可以通过pip install flask或pycharm安装库的方式。

    1.先简要介绍下flask的简单使用

    from flask import Flask       # 引入Flask类
    app = Flask(__name__)     # 创建实例并将当前模块名传入
    @app.route('/')                    # 该装饰器的参数是个路由,可以理解为下面的函数将在这个路由中执行
    def index():
        return 'Hello World'
    if __name__ == '__main__':
        app.debug = True # 设置调试模式,生产模式的时候要关掉debug
        app.run()               # 运行
    

    其中前两行都是固定写法,第三行中注意这个路由的意思(我理解就是跟在主页地址后到目标网页的相对路径)最后一行运行也是固定写法

    2.Request对象

    from flask import Flask,url_for,request,render_template
    
    @app.route('/login', methods=['POST', 'GET'])
    def login():
        if request.method == 'POST':
            if request.form['user'] == 'admin':
                return 'Admin login successfully!'
            else:
                return 'No such user!'
        title = request.args.get('title', 'Default')
        return render_template('login.html', title=title)
    if __name__ == "__main__":
        app.run(debug=True)
    

    request中”method”变量可以获取当前请求的方法,即”GET”, “POST”, “DELETE”, “PUT”等;”form”变量是一个字典,可以获取Post请求表单中的内容,”request.args.get()”方法则可以获取Get请求URL中的参数,该函数的第二个参数是默认值,当URL参数不存在时,则返回默认值。

    3.mock数据

    直接看代码

    # -*- coding:utf-8 -*-
    from flask import Flask,request
    
    app = Flask(__name__)
    class Datebase():
        def __init__(self):
            self.address_success = {
                "msg": "success",
                "code": 0,
                "data": {
                    "data": [
                        {
                            "id": "235",
                            "alias": "123123",
                            "name": "123213",
                            "tel": "123213",
                            "province_name": "北京市",
                            "city_name": "东城区",
                            "county_name": "东华门街道",
                        }
                    ]
                }
            }
    
            self.address_error = {"msg":"返回失败","code":-400,"data":""}
    
    datebase = Datebase()
    
    @app.route("/useraddress/index", methods=["GET"])  # 地址详情路由
    def queryInfo():
        address_id = request.args.get("flag")
        if int(address_id) == 1:
            return datebase.address_success
        if int(address_id) == 0:
            return datebase.address_error
    
    if __name__ == '__main__':
        app.run(port=8080)
    

    在这里先封装了了访问成功和失败的数据,在@app.route中指定路由和请求方式,
    request.args.get("flag")获得url中"flag"标签对应的值,后面对该值进行判断,mock出不同返回结果。

    image.png

    相关文章

      网友评论

          本文标题:python web接口测试--使用flask框架进行mock测

          本文链接:https://www.haomeiwen.com/subject/rtxjnltx.html