Bull's blog Bull's blog
首页
工作
  • 分类
  • 标签
  • 归档
关于

Bull

首页
工作
  • 分类
  • 标签
  • 归档
关于
  • 马上消费

  • 斗虫

    • 基础课件

      • python基础和条件语句
      • 基础数据类型_改
      • 函数
      • 1 函数练习
      • 32文件操作
      • 3 异常
      • 面向对象
      • 1面向对象案例-学生管理系统
      • 1Python基础练习题
      • 自动化测试理论
      • 2 接口测试基础
      • 3 requests
      • 4 代码
      • 5 简单封装
      • 1 pytest
      • 签名的设计
      • 接口case设计
      • 3 新建一个接口
      • x装饰器语法
      • httprunner2.x工具快速入门
      • httprunner3.x的简介
      • Flask框架
      • 了解任务
      • mock服务
      • UI自动化策略
      • PageObject模式
      • pytest参数化进阶
      • pytest框架生成报告
      • Yaml运用
      • 日志类模板
      • 持续集成
      • jdk配置
      • Linux基础
      • Jenkins主从测试任务
      • conda管理项目环境
      • 面试题-栈结构
      • 面试题-找众数
      • 正交测试法
      • 装饰器
      • 综合面试题_原版
    • RF

  • 天眼查

  • 某米

  • 工作经历
  • 斗虫
  • 基础课件
wangyang
2023-09-02

mock服务

# 为什么mock?

image

在工作之中我们或多或少都需要使用兄弟团队或是其他公司提供的接口服务。这个时候,协调资源是一件很困难的事情

# mock的好处

1.方便测试异常条件

2.实现系统隔离,对上游系统解耦

3.增加自动化测试脚本的稳定性

4.实现测试驱动开发

# 怎么实现mock?

这里我们将如何使用flask来实现一个mock server。flask本身是一个用来编写网络服务的框架,我们的mock server本质上也是一个服务。有的时候,我们也叫它“挡板”服务。在这整理一下需求点:

1.可以 返回我们预期的结果

2.可以 代替真正的服务为我们返回结果

3.可以 切换不同类型的假数据

app = Flask(__name__)
#  让中文正常显示,否则res被编码
app.config['JSON_AS_ASCII'] = False

#要给这个mock分配一个url地址(设置路由)
@app.route('/login', methods=['POST'])
def login():
    url = 'login'
    # 获取参数
    # 1.get请求  data = request.values.to_dict()
    # 2.post请求  data = request.get_json()
    data = request.get_json()
    name = data['name']
    password = data['password']
    # 对请求参数进行判断,根据请求参数的不同进入不同的接口,返回不同的数据
    if name == '被锁定':
        return jsonify({'code':402,'name':'被锁定','res':'用户被锁定'})
    elif name == '服务器异常':
        return jsonify({'code': 403, 'name': '服务器异常', 'res': '服务器异常,请联系管理员'})
    elif name == '请求解析异常':
        return jsonify({'code': 405, 'name': '请求解析异常', 'res': '请求解析异常'})
    elif name == '黑名单':
        return jsonify({'code': 445, 'name': '黑名单', 'res': '您已经进入我司黑名单,请联系客服专员'})
    else:
        # 需要去调用正常的接口
        resp = passThrough(url,data)
        return resp
    # 提问:
    # 访问真实服务的“服务器异常”,会怎么用?

# mock挡板的作用是,挡住一些不好实现的接口逻辑(来验证这些业务里的其他接口)
# 挡掉接口以后,还需要走真实业务
#     1.mock了这个接口的异常情况,“正常”情况我们还需要调用真实的接口服务
#     2.在业务链中,mock服务可能需要调用下一个步骤的接口

# 接口级别的mock <func> 动态传递参数,动态路由,默认是字符串
# <int:func> 可以手动设置参数的数据类型

# 默认的请求方式是get,如果要用post你需要通过methods=['POST']去设置
# methods=['POST','GET']

@app.route('/time', methods=['POST'])
def request_time():
    resp = Through_time()
    return resp

@app.route('/<func>', methods=['POST'])
def regist(func):
    print(f'{func}接口被动态路由接收(未在mock功能中)')
    data = request.get_json()
    resp = passThroughRe(func,data)
    return resp


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

4.可以 切换真/假数据

import requests
from flask import json, make_response

ip = 'http://127.0.0.1:5000/'

def passThrough(url,data):#参数透传
    url = ip + url
    result = requests.post(url, json=data)
    # 把请求原来接口的返回值放在构造的响应里面,在加一个Content-Type
    resp = make_response(result.json())
    return resp


def passThroughRe(url,data):#接口透传
    url = ip + url
    result = requests.post(url, json=data)
    # 把请求原来接口的返回值放在构造的响应里面,在加一个Content-Type
    resp = make_response(result.json())
    # resp = make_response(result.text)
    return resp

def Through_time():
    url = 'http://127.0.0.1:5000/time'
    result = requests.post(url)
    # 把请求原来接口的返回值放在构造的响应里面,在加一个Content-Type
    # resp = make_response(result.json())
    resp = make_response(result.text)
    return resp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#python自动化#自动化入门
上次更新: 2023/09/05, 02:16:11
了解任务
UI自动化策略

← 了解任务 UI自动化策略→

最近更新
01
30.快速实现接口重构测试---deepdiff库使用
09-21
02
概述
09-07
03
概述
09-07
更多文章>
Theme by Vdoing | Copyright © 2018-2025 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式