python API自动化(基于Flask搭建MockServer)

      接口Mock的理念与实战场景:

                        什么是Mock:

                在接口中,"mock"通常是指创建一个模拟对象来代替实际的依赖项,以便进行单元测试。当一个类或方法依赖于其他类或组件时,为了测试这个类或方法的功能,我们可以使用模拟对象来替代这些实际的依赖项。模拟对象可以模拟实际对象的行为,以便在测试过程中进行控制和验证


                使用模拟对象有几个优点:

                1. 降低测试的复杂性:使用模拟对象可以消除对实际依赖项的依赖,从而简化测试设                       置和执行。

                2. 隔离测试环境:模拟对象可以隔离测试环境,确保测试过程中的行为可控。

                3. 提供测试数据:模拟对象可以提供特定的测试数据,以验证被测试对象在不同情况下                  的行为。

               4. 加速测试执行:与实际依赖项相比,使用模拟对象可以提高测试的执行速度

                        比如开发人员有些对应的接口还没有完成开发,就可以使用mock数据进行模拟,检查页面的逻辑

                Mock Server:              

                        Mock Server(模拟服务器)是一个用于模拟网络服务行为的工具或软件。它充当一个虚拟的服务器,能够响应客户端的请求并返回预定义的响应数据

                如下图所示:

                

        

框架对比及Flask基本应用

        Django: 是一个开源Web应用程序框架,包含了Web开发中常用的功能和特点的框架。如:强大的ORM(对象关系映射)、MVC(模型-视图-控制器)设计模式、自动化管理后台、URL路由和视图函数等。

Tornado:是一个高性能Web应用程序的Python Web框架。与传统的基于多线程模型的Web框架不同,它采用了异步非阻塞的事件驱动架构,可以处理高并发的请求。常见的特点和功能,如:异步非阻塞、高性能、支持WebSocket、内置协程支持等。

Flask:是一个轻量级Web应用程序框架。封装功能不及Django完善,性能不及Tornado,但是Flask可扩展性强,因为Flask的第三方开源组件丰富

这三者的结论

不论优劣,不同的工具而已;

小型web应用设计的功能点不多使用Flask;

大型web应用设计的功能点比较多使用的组件也会比较多,使用Django(自带功能多不用去找插件);

如果追求性能可以考虑Tornado;

例子:

        静态路由的写法:

        

@app.route('/upload')

        方法的选择:

@app.route('/login', methods=['GET', 'POST'])

        flask代码演示:
        

# -*- coding: utf-8 -*-from  flask import  Flask,request
# 给当前服务取个名字,__name__是内置的属性
app=Flask(__name__)all_urer = {"qsdd": "123456", "admin": "456789", "qsdd2": "123456"}
@app.route("/")
@app.route("/index.php")
# 2.一个接口就是一个方法
def index():return "欢迎来到主页"@app.route("/api/login",methods=["POST"])
def login():# 1. 以json格式进行拿取【推荐】data = request.get_json()# data = request.json()username=data["username"]password=data["password"]# 2. 以二进制数据进行数据获取# data = request.get_data()# data = request.dataprint("用户提交的数据是:", data)"""分支判断1.参数不能为空2.登录成功3.密码错误的情况或者用户名不正确的情况下4.参数不正确"""if username in all_urer:if username==""or password=="":return "账号密码不能为空"elif all_urer[username]==password:return  "登录成功"elif all_urer[username]!=password:return "密码错误"else:return "账号不存在"return "欢迎来到登录界面"# 3.启动服务
if __name__ == '__main__':app.run()

# -*- coding: utf-8 -*-
import  requestsdata={"username":"qsdd","password":"123456"}res=requests.post(url="http://127.0.0.1:5000/api/login",json=data)
print(res.text)

 

 flask的深度学习:https://flask.net.cn/testing.html()

                

Mock Server接口设计实战

        

模拟登录接口

        

# -*- coding: utf-8 -*-from  flask import  Flask,request,jsonify
# 给当前服务取个名字,__name__是内置的属性
app=Flask(__name__)
# 数据用户表
all_urer = {"qsdd": "123456", "admin": "456789", "qsdd2": "123456"}# MSG_模板:--响应数据应该是什么样子的格式--开发会提前定义
# {
#     "code": 202,
#     "msg":"对应的提示信息",
#     "data":[多个字典]
# }# 登录成功
MSG_LOGIN_SUCCESS = {"msg": "登录成功","code": "0","data": {"id": "75","username": "hami","nickname": "哈米老师","mobile": "","email": "","avatar": "http://shop-xo.hctestedu.com/static/upload/images/user_avatar/compr/2023/07/01/202307011819170015381852.jpg","alipay_openid": "","weixin_openid": "","weixin_unionid": "","weixin_web_openid": "","baidu_openid": "","toutiao_openid": "","qq_openid": "","qq_unionid": "","integral": "420","locking_integral": "0","referrer": "0","add_time": "1624022081","add_time_text": "2021-06-18 21:14:41","mobile_security": "","email_security": "","user_name_view": "hami","is_mandatory_bind_mobile": 0,"token": "bd80726708856645618cfb2a5a6926d2"}
}
# 数据错误
MSG_DATA_NULL = {"msg": "用户名和密码不能为空","code": -1,"data": ""
}
# 数据异常
MSG_DATA_ERROR = {"msg": "登录数据有误","code": -1,"data": ""
}
# 用户名错误
MSG_ERROR_USERNAME = {"msg": "登录帐号不存在","code": -3,"data": ""
}
# 密码错误
MSG_ERROR_PASSWORD = {"msg": "密码错误","code": -4,"data": ""
}
# 登录失效
MSG_LOGIN_ERROR = {"msg": "登录失效,请检查当前登录用户。","code": -5,"data": ""
}@app.route("/")
@app.route("/index.php")
# 2.一个接口就是一个方法
def index():return "欢迎来到主页"@app.route("/api/login",methods=["POST"])
def login():# 1. 以json格式进行拿取【推荐】data = request.get_json()# data = request.json()# 获得用户名和密码res_json={"username","password"}if set(data.keys())==res_json:username=data["username"]password=data["password"]else:return "填写的参数不正确"# 2. 以二进制数据进行数据获取# data = request.get_data()# data = request.dataprint("用户提交的数据是:", data)"""分支判断1.参数不能为空2.登录成功3.密码错误的情况或者用户名不正确的情况下4.参数不正确"""if username in all_urer:if username==""or password=="":return jsonify(MSG_DATA_NULL)elif all_urer[username]==password:return  jsonify(MSG_LOGIN_SUCCESS)elif all_urer[username]!=password:return jsonify(MSG_ERROR_PASSWORD)else:return jsonify(MSG_ERROR_USERNAME )else:return jsonify(MSG_ERROR_USERNAME )return "欢迎来到登录界面"# 获取用户信息
@app.route("/api/info",methods=["GET"])
def getinfo():try:token=request.headers.get("Authorization")if token==MSG_LOGIN_SUCCESS["data"]["token"]:return  jsonify(MSG_LOGIN_SUCCESS)else:return  jsonify(MSG_LOGIN_ERROR)except Exception:return jsonify(MSG_LOGIN_ERROR)# 3.启动服务
if __name__ == '__main__':app.run()

模拟调用接口

        

# -*- coding: utf-8 -*-
import requests# 登录接口
data = {"username": "qsdd", "password": "123456"}
res = requests.post(url="http://127.0.0.1:5000/api/login", json=data)
# print(res.text)
print(res.json())
# 400 :响应数据是开发写,所以不对,有可能你接口请求数据不对,也有可能是开发本身就不小心写错
print(res.status_code)
# 200 :只能说明服务器是能够正确响应,但是不代表对应响应数据正确# 查看用户信息
headers = {"Authorization": "bd80726708856645618cfb2a5a6926d2"}
# headers = {"token": "5345435435435435435"}
res = requests.get(url="http://127.0.0.1:5000/api/info", headers=headers)
# res = requests.get(url="http://127.0.0.1:5000/api/info")
print(res.json())
# 400 :响应数据是开发写,所以不对,有可能你接口请求数据不对,也有可能是开发本身就不小心写错
print(res.status_code)
# 200 :只能说明服务器是能够正确响应,但是不代表对应响应数据正确

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/362674.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app与原生插件混合开发调试1-环境准备

uni-app与原生插件混合开发调试系列文章分为3篇,分别详细讲了《环境准备》、《搭建uni-app本地开发调试环境》和《安卓原生插件开发调试和打包》,3篇文章完整详细地介绍了“从环境安装配置到本地开发调试到原生插件打包”整个流程。 相关名词和概念解释…

WPS-Word文档表格分页

一、问题描述 这种情况不好描述 就是像这种表格内容,但是会有离奇的分页的情况。这种情况以前的错误解决办法就是不断地调整表格的内容以及间隔显得很乱,于是今天去查了解决办法,现在学会了记录一下避免以后忘记了。 二、解决办法 首先记…

14、电科院FTU检测标准学习笔记-录波功能2

作者简介: 本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验 在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验 ———————————————————…

ONLYOFFICE 桌面编辑器 8.1 版发布:全面提升文档处理效率的新体验

文章目录 什么是ONLYOFFICE ?ONLYOFFICE 桌面编辑器 8.1 发布:新功能和改进功能强大的 PDF 编辑器幻灯片版式功能从右至左语言支持多媒体功能增强无缝切换工作模式其他改进和优化总结 什么是ONLYOFFICE ? https://www.onlyoffice.com/zh/off…

【Web APIs】JavaScript 事件基础 ② ( “ 事件 “ 开发步骤 | 常见鼠标 “ 事件 “ )

文章目录 一、" 事件 " 开发步骤1、" 事件 " 开发步骤2、完整代码示例 二、常见鼠标 " 事件 "1、常见鼠标 " 事件 "2、鼠标 " 事件 " 代码示例 Web APIs 博客相关参考文档 : WebAPIs 参考文档 : https://developer.mozilla…

代码随想录-Day42

1049. 最后一块石头的重量 II 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果…

【软件测试】白盒测试与接口测试详解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是白盒测试 白盒测试是一种测试策略&#xff0c;这种策略允许我们检查程序的内部结构&a…

5.9k!一款清新好用的后台管理系统!【送源码】

今天给大家分享的开源项目是一个优雅清新后台管理系统——Soybean Admin。 简介 官方是这样介绍这个项目的&#xff1a; Soybean Admin 使用的是Vue3作为前端框架&#xff0c;TypeScript作为开发语言&#xff0c;同时还整合了NaiveUI组件库&#xff0c;使得系统具有高可用性和…

Vue3.3 的 defineOptions 的使用,方便在 setup 语法糖中为组件命名和控制父子属性透传,包含在线运行实例欧

defineOptions 是 Vue3.3 的新的宏&#xff0c;可以通过 defineOptions 宏在 <script setup> 中使用选项式 API&#xff0c;也就是说可以在一个宏函数中设置 name, props, emits, render, 控制是否允许父子非 props 的属性透传等功能。 defineOptions 可以直接在 setup …

[数据集][目标检测]花生米计数霉变检测数据集VOC+YOLO格式387张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;387 标注数量(xml文件个数)&#xff1a;387 标注数量(txt文件个数)&#xff1a;387 标注类别…

pycharm terminal终端不能激活 conda 虚拟环境,解决方法

# 1. 确保执行策略已更改 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser# 2. 初始化Conda conda init powershell# 3. 重启PowerShell# 4. 验证Conda初始化 conda --version# 5. 激活Conda环境 conda activate shi_labelme关闭所有的终端&#xff0c;然后重新打开新的终…

【图像分类】Yolov8 完整教程 |分类 |计算机视觉

目标&#xff1a;用YOLOV8进行图像分类。 图像分类器。 学习资源&#xff1a;https://www.youtube.com/watch?vZ-65nqxUdl4 努力的小巴掌 记录计算机视觉学习道路上的所思所得。 1、文件结构化 划分数据集&#xff1a;train,val,test 知道怎么划分数据集很重要。 文件夹…

Linux系统相关函数总结

在应用程序当中&#xff0c;有时往往需要去获取到一些系统相关的信息&#xff0c;譬如时间、日期、以及其它一些系统相关信息&#xff0c;本章将向大家介绍如何通过 Linux 系统调用或 C 库函数获取这些系统信息。除此之外&#xff0c;还会向大家介绍 Linux 系统下的/proc 虚拟文…

Day.js

Day.js 是什么&#xff1f; Day.js是一个极简的JavaScript库&#xff0c;可以为现代浏览器解析、验证、操作和显示日期和时间。 Day.js中文网 为什么要使用Day.js &#xff1f; 因为Day.js文件只有2KB左右&#xff0c;下载、解析和执行的JavaScript更少&#xff0c;为代码留下更…

高考志愿不知道怎么填?教你1招,用这款AI工具,立省4位数

高中的岁月&#xff0c;就像一本厚厚的书&#xff0c;我们一页页翻过&#xff0c;现在&#xff0c;终于翻到了最后一页。但这不是结束&#xff0c;这是新的开始&#xff0c;是人生的新篇章。 高考落幕&#xff0c;学子们在短暂的放松后&#xff0c;又迎来了紧张的志愿填报。 “…

【机器学习300问】134、什么是主成分分析(PCA)?

假设你的房间堆满了各种各样的物品&#xff0c;书籍、衣服、玩具等等&#xff0c;它们杂乱无章地散落各处。现在&#xff0c;你想要清理房间&#xff0c;但又不想扔掉任何东西&#xff0c;只是希望让房间看起来更整洁&#xff0c;更容易管理。 你开始思考&#xff0c;能否将物品…

苹果笔记本双系统怎么安装

想要在mac电脑上装双系统&#xff0c;首先需要确认您的电脑是否支持。苹果电脑自带的boot camp工具可以帮助您在mac上安装windows系统&#xff0c;只需按照步骤进行操作即可。另外&#xff0c;您也可以使用虚拟机软件&#xff0c;如parallels desktop或vmware fusion&#xff0…

地铁中的CAN通信--地铁高效安全运转原理

目前地铁采用了自动化的技术来实现控制,有ATC(列车自动控制)系统可以实现列车自动驾驶、自动跟踪、自动调度;SCADA(供电系统管理自动化)系统可以实现主变电所、牵引变电所、降压变电所设备系统的遥控、遥信、遥测;BAS(环境监控系统)和FAS(火灾报警系统)可以实现车站…

mmdetection2.28修改backbone不使用预训练参数、从头训练

背景 最近需要测试一下在backbone部分如果不使用预训练参数的话&#xff0c;模型需要多少轮才能收敛所使用的backbone是mmcls.ConvNeXtmmdetection版本为2.28.2&#xff0c;mmcls版本为0.25.0 修改流程 最简单的方法&#xff0c;直接去mmcls的model zoo里找到对应backbone的…

NAND闪存巨头铠侠(Kioxia)计划最迟于10月下旬通过首次公开募股IPO

据路透社于6月26日引用消息来源的报道&#xff0c;在半导体市场条件反弹及财务业绩迅速改善的背景下&#xff0c;NAND闪存巨头铠侠&#xff08;Kioxia&#xff09;正准备尽快提交初步申请&#xff0c;并计划最迟于10月下旬通过首次公开募股&#xff08;IPO&#xff09;在东京证…