python-Flask开发mock服务

1、mock测试
mock测试,就是在测试活动中,对于某些不容易构造或者不容易获取的比较复杂的数据/场景,用一个虚拟的对象(mock对象)来创建用于测试的测试方法。
2、mock测试的作用
解决不同的单元之间由于耦合而难于开发、测试的问题,mock既可用于单元测试,也可用于集成测试、系统测试过程中;
3、mock适用场景

  • 构造独立的测试环境,将需要被测的单元和其依赖模块分开,不关注被测单元的依赖对象,只关注被测单元的功能逻辑;
  • 被测单元依赖的功能模块尚未开发完成,而被测单元需要依赖模块的返回值进行后续处理;
  • 前后端项目中,后端接口开发完成前,用于接口联调;
  • 依赖的上游接口尚未完成开发,需要进行联调;
  • 被测模块依赖的对象比较难模拟或者构造比较复杂;

4、mock实现的方式
搭建一个Mock Server,通过该服务提供mock接口

  • 使用第三方mock平台: Moco
  • 自己开发的mock服务
  • 使用mock框架搭建mock服务: Python+Flask

5、关于Flask框架
Flask是一个轻量级的Python Web框架,是一个微型框架,具有灵活性和可扩展性;Flask框架可以用于构建任何类型的Web应用程序,包括单页面应用程序、企业应用程序、博客、社交媒体应用程序等等;

6、Flask框架搭建mock服务

  • 安装Flask pip3 install Flask
  • 检查是否安装成功 flask --version
  • 案例:模拟登录接口
    接口文档描述:
    在这里插入图片描述
from flask import Flask, request, jsonify

# 创建实例
app = Flask(__name__)
# 解决接收报文中文乱码问题
app.config['JSON_AS_ASCII'] = False


# 登录接口,指定路由和请求方法
@app.route('/newlogin/login.do', methods=['POST'], strict_slashes=False)
def login():
    # 获取请求的数据
    data = request.get_json()
    # 用户名和密码从data中取值
    username = data['username']
    psw = data['psw']

    """
    测试场景:
    1) 用户名、密码正确(test_001/123456);
    2) 用户名/密码错误;
    """
    if username == 'test_001' and psw == '123456':
        return jsonify(
            {
                "content": {
                    "data": {
                        "resultCode": 100,
                        "iframeRedirect": True,
                        "iframeRedirectUrl":
                            "//h5.m.taobao.com/other/loginend.html?origin=https%3A%2F%2Fmain.m.taobao.com"
                    },
                    "status": 0,
                    "success": True
                },
                "hasError": False
            }
        )
    elif username != 'test_001' or psw != '123456':
        return jsonify(
            {
                "content": {
                    "data": {
                        "titleMsg": "账号名或登录密码不正确",
                        "resultCode": 100
                    },
                    "status": 0,
                    "success": True
                },
                "hasError": False
            }
        )


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

服务启动,运行结果如下:

 * Serving Flask app 'mockServer_demo'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit

基于测试用例,写mock数据

import requests
import pytest


def test_login_01():
    data = {
        'username': 'test_001',
        'psw': '123456'
    }
    url = 'http://127.0.0.1:5000/newlogin/login.do'
    res = requests.post(url=url, json=data)
    print("=================登录接口响应===================")
    print(res.text)


if __name__ == '__main__':
    pytest.main(['-s', 'test_demo_01.py'])

运行结果如下:


test_demo_01.py::test_login_01 
-------------------------------- live log call ---------------------------------
2023_55_09/15/23 14:55:42 (connectionpool.py:213) INFO     Starting new HTTP connection (1): 127.0.0.1)
=================登录接口响应===================
{"content":{"data":{"iframeRedirect":true,"iframeRedirectUrl":"//h5.m.taobao.com/other/loginend.html?origin=https%3A%2F%2Fmain.m.taobao.com","resultCode":100},"status":0,"success":true},"hasError":false}

PASSED

============================== 1 passed in 0.07s ===============================

Process finished with exit code 0

有些时候我们会需要根据接口中参数的不同,返回不同的Mock数据,这个时候我们就需要使用根据需要的场景,修改参数,但是如果需要服务修改后,需要停止之前的服务,重启服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值