接口自动化测试新玩法!Python构建mock服务让你的测试更加高效!

news2024/11/17 23:38:25

目录

引言

Flask mock接口开发示例


引言

      Mock 即模拟,就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法,其最大的优势就是降级前后端耦合度,
使前端工程师可以不依赖后端返回数据,先开发前端样式以及逻辑处理 简单来说: Mock是用了解决依赖问题的,将复杂的/不稳定的/还未建立的依赖对象用一个简单
的假对象来代替。
Mock Server 即Mock接口服务器,可以通过配置快速Mock出新的接口
Mock Server的使用范围:
前后端分离项目
所测接口依赖第三方系统(还未具备)
所测接口依赖复杂或依赖的接口不稳定,并不作为主要验证对象
同时在接口还未开发好时,提供Mock接口(假接口)会比只有接口文档更直观,并能有效减少沟通成本和一些文档理解

     在进行接口测试时,往往被测系统需要对接第三方系统,然而没有现成的第三方系统环境,此时我们就需要使用mock来解决这种依赖关系,而python就提供了一个可以方便构建mock api接口服务的模块:flask。Flask 是一个简单且十分强大的Python web 框架。它被称为微框架,“微”并不是意味着把整个Web应用放入到一个Python文件,微框架中的“微”是指Flask旨在保持代码简洁且易于扩展,Flask框架的主要特征是核心构成比较简单,但具有很强的扩展性和兼容性,程序员可以使用Python语言快速实现一个网站或 Web服务。因此flask能很方便构建一个web服务,给外部也可以叫做客户端提供web服务,针对flask框架这种特点我们可以很容易构建API接口,供客户端访问。

Flask mock接口开发示例

首先安装需要的Flask模块,如果你的环境已经安装了pip则键入:pip install flask即可安装完成

或者直接在pycharm中检索安装:

1.1 构建GET请求方法的接口

在Pycharm中新建py文件,编辑如下代码

# -*- coding: utf-8 -*-

import flask,json

import time



server = flask.Flask(__name__)   # 创建一个服务,把当前这个python文件当做一个服务



@server.route('/VIID/System/Time', methods=['get'])  # @server.route()可以将普通函数转变为服务、接口的路径、请求方式,如果不写methods则默认get方法

def Time():

    '''查询字符串:无,消息体:无,返回结果:SystemTime'''

    response_data = {

                "SystemTimeObject": {

                    "VIIDServerID": "123",

                    "TimeMode": "1",          

                    "LocalTime": time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())),

                }

            }

    return json.dumps(response_data, ensure_ascii=False)



if __name__ == '__main__':

    server.run(debug=True, port=5000, host='10.82.25.11')  #  指定访问端口、host

 然后运行该py文件,则该文件运行在本地就是一个web服务,用浏览器或者postman尝试访问该服务的URL即可

浏览器访问:

postman发请求访问:

浏览器或者postman请求完成后,在Pycharm的输出栏会输出如下:

其它的请求如POST、PUT、DELETE等方法,在methods参数中指明即可,不过POST、PUT、DELETE等方法不能由浏览器直接访问,因为浏览器默认访问时是get方法,可以用postman按指定的方法发请求

1.2 获取带json格式请求体的接口

有时客户端发送的请求是带json格式的,这时需要获取请求的json,编辑代码如下:

@server.route('/data',methods=['post'])

def post_json():

    if flask.request.is_json:

        print(flask.request.json)

        name = flask.request.json.get('name')            # 获取json请求体的第一个参数的值

        age = flask.request.json.get('age')             # 获取json请求体的第二个参数的值

        data = {'name':name,'age':age}

        return json.dumps(data,ensure_ascii=False)

    else:

        return json.dumps({'msg':'请传json格式参数'},ensure_ascii=False)

 使用postman作为客户端发送带json请求体的请求,如下图:

1.3 获取get请求中发送的参数

flask提供的方法是:

1	value = flask.request.args.get('name')           # 获取get请求参数name的值

1.4 构建动态URL以及响应体的重定向

很多时候,客户端请求的url是变化的,也就是带有动态参数的,flask也是可以轻松的构建提供动态参数的url资源服务并重定向响应体,代码如下:

# -*- coding: utf-8 -*-

import flask,json

from flask import url_for,redirect



server = flask.Flask(__name__)   # 创建一个服务,把当前这个python文件当做一个服务



@server.route('/data')

def data():                       #  返回data

    data = {

                'VideoSliceInfoObject': {

                    'VideoID': 'esse elit',

                    'AudioCodeFormat': 'commodo'

                }

    }

    return json.dumps(data, ensure_ascii=False)



@server.route('/data/<ID>/Info', methods=['post'])

def data_redirect(ID):

    return redirect(url_for('data', guest=ID))



if __name__ == '__main__':

    server.run(debug=True, port=5000, host='10.82.25.11')  #  指定访问端口、host

 后面无论postman或者客户端发送的url中的ID参数是啥,都可以响应

1.5 重新构建响应头和响应状态码

有时在与第三方系统对接时,需要返回携带响应头消息和指定的响应状态码,在flask中也是可以构建自定义的响应消息的

# -*- coding: utf-8 -*-

import flask,json



server = flask.Flask(__name__)   # 创建一个服务,把当前这个python文件当做一个服务



@server.route('/data',methods=['post'])

def post_json():

    if flask.request.is_json:

        print(flask.request.json)

        name = flask.request.json.get('name')            # 获取json请求体的第一个参数的值

        age = flask.request.json.get('age')             # 获取json请求体的第二个参数的值

        data = {'name':name,'age':age}

        # 构建响应头域和状态码

        resp = flask.make_response(json.dumps(data, ensure_ascii=False))

        resp.status = "666"

        resp.headers[

            "python"] = "python flask"

        return resp

    else:

        return json.dumps({'msg':'请传json格式参数'},ensure_ascii=False)



if __name__ == '__main__':

    server.run(debug=True, port=5000, host='10.82.25.11')  #  指定访问端口、host

 运行该py文件,在postman中发送请求,查看响应信息,如下图,变成的我们自定义设置的响应头和状态码

这样我们就完全自定义了响应的头和状态码


最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

在我的QQ技术交流群里(技术交流和资源共享,广告勿扰)

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Alloy Tutorial(1)Alloy 基本使用

文章目录 构造一个 graph谓词undirected 无向图undirected2 无向图的第二种写法assertFact扩展 构造一个 graph In this workshop we are going to use Alloy to model graphs. Mathematically, recall that a graph is just a pair ⟨V, E⟩ where V is a set of vertices (a…

参数估计和假设检验的区别与联系

1.参数估计和假设检验的区别与联系 笔记来源&#xff1a; 参数估计与假设检验 参数估计和假设检验有什么区别&#xff1f; 1.1 联系 参数估计和假设检验是推断统计的两个组成部分&#xff0c;它们都是根据样本信息对总体的数量特征进行推断 下图来自《统计学图鉴》 参数估计…

详解WEB集群服务(LNMP+Nginx+Tomcat+Rewrite重写+七层反向代理+SNAT|DNAT策略)

实战项目演练 1.问题描述2.实验操作步骤2.1 CentOS 7-1客户端配置2.2 CentOS 7-2网关服务器配置2.3 CentOS 7-8 (Web1:Tomcat服务器)2.3.1 安装Tomcat服务器2.3.2 提供四层反向代理的动态页面 2.4 CentOS 7-9 (Nginx服务器)2.4.1 安装Nginx服务2.4.2 安装MySQL服务2.4.3 安装配…

基于Python的接口自动化-读写配置文件

目录 引言 configparser模块功能介绍 引言 在编写接口自动化测试脚本时&#xff0c;有时我们需要在代码中定义变量并给变量固定的赋值。为了统一管理和操作这些固定的变量&#xff0c;咱们一般会将这些固定的变量以一定规则配置到指定的配置文件中&#xff0c;后续需要用到这…

如何在电脑上使用wink一键高清短视频

如何在电脑上使用wink一键高清优化短视频画质 文章目录 如何在电脑上使用wink一键高清优化短视频画质1.软件简介1.1痛点1.2解决方案 2.实际操作2.1准备工作2.1.1下载雷电模拟器2.1.2下载wink 2.2.安装软件2.2.1安装雷电模拟器2.2.2安装wink2.2.2.1在雷电模拟器中安装wink2.2.2.…

LeetCode 双周赛 106(2023/06/10)两道思维题

本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 加入知识星球提问。 往期回顾&#xff1a;LeetCode 单周赛第 348 场 数位 DP 模版学会了吗&#xff1f; 双周赛 106 概览 T1. 判断一个数是否迷人&#xff08;Easy&#xff09; 标…

如何做企业发布会直播/企业发布会直播流程

1 .企业发布会直播流程图 2 .发布会解决方案 A .发布会直播前 B .发布会直播中 C .发布会直播后 如何做一场企业新品、产品发布会直播&#xff1f;流程图&#xff1a; 01 发布会直播前 专业全案策划 全面深入挖掘客户直播需求&#xff0c;拆解需求&#xff0c;制定全流程落地方…

Selenium 必了解—如何测试REST API

目录 前言&#xff1a; Web UI测试存在的问题&#xff1a; REST API测试&#xff1a; 依赖包 程序示例&#xff1a; 1-获取联系人 2-GET Request&#xff1a; 3-POST Request: 4- 编辑请求 5- 删除请求 前言&#xff1a; Selenium WebDriver 可以用于测试 Web 应用的…

深度学习框架(Pytorch)学习第1步:包管理系统Anaconda的安装

PyTorch是一种开源的深度学习框架&#xff0c;以出色的灵活性和易用性著称。 并且与机器学习开发者和数据科学家喜欢的Python高级编程语言兼容。 什么是PyTorch PyTorch是一种构建深度模型功能完备的框架。通常用于图像识别和语言处理等。 使用Python编写&#xff0c;学习和…

UI自动化测试之Airtest让你的测试工作如虎添翼!

本文我们讲解下Airtest的使用&#xff0c;主要学习目标有以下几点&#xff1a; &#xff08;1&#xff09;认识Airtest &#xff08;2&#xff09;了解Airtest能做什么 &#xff08;3&#xff09;Airtest安装及环境搭建 &#xff08;4&#xff09;掌握Airtest图形化api使用 &am…

【MySQL】记录的基本操作

文章目录 插入数据为表中所有字段插入数据为表中指定字段插入数据同时插入多条数据 更新数据删除数据TRUNCATE和DETELE的区别 查询数据 插入数据 为表中所有字段插入数据 基本语法 INSERT INTO 表名&#xff08;字段名1,字段名2,…) VALUES (值 1,值 2,…); 示例 # 准备一张表…

算法模板(4):动态规划(4) 做题积累(2)

动态规划 9. 单调队列优化DP 1. 1088. 旅行问题 John 打算驾驶一辆汽车周游一个环形公路。 公路上总共有 n 个车站&#xff0c;每站都有若干升汽油&#xff08;有的站可能油量为零&#xff09;&#xff0c;每升油可以让汽车行驶一千米。 John 必须从某个车站出发&#xff…

接口自动化-让你了解数据库相关知识

目录 python接口自动化实战 数据库 写一个对数据库操作的类 python接口自动化实战 目标 学习数据库相关&#xff0c;用例增加对数据库校验 利用数据库完成对数据查询 如何校验数据库数据&#xff0c;怎样添加校验让程序自己校验&#xff08;充值、提现、投资接口对金额的…

VMware ESXi 7.0 Update 3m - 领先的裸机 Hypervisor (All OEM Customized Installer CDs)

VMware ESXi 7.0 Update 3m - 领先的裸机 Hypervisor (All OEM Customized Installer CDs) ESXi 7.0 U3m Standard (标准版) ESXi 7.0 U3m Dell (戴尔) 定制版 OEM Custom Installer CD ESXi 7.0 U3m HPE (慧与) 定制版 OEM Custom Installer CD ESXi 7.0 U3m Lenovo (联想) 定…

分布式项目17 订单order,用dubbo来实现

说明&#xff1a;只要当一个订单生成时&#xff0c;处理订单的信息之外&#xff0c;还有订单中包含的订单商品数据以及订单物流信息&#xff0c;而订单的信息封装在“tb_order”表中&#xff0c;关于tb_order表结构如下图所示&#xff1a; 订单商品数据封装在“tb_order_item”…

STM32使用PWM实现led亮度变化

原理及代码讲解 1.序言2.频率3.占空比4.控制led亮度变化原理5.代码实例5.1 初始化引脚5.2 配置定时器15.3配置输出PWM 6.结语 1.序言 这里我以stm32F103c8te为例&#xff0c;讲解一下pwm如何输出&#xff0c; pwm又是如何控制led灯的亮度变化&#xff0c;以及具体代码又是 如何…

53、基于51单片机蓄电池充电器过充过放保护LCD液晶屏显示系统设计(程序+原理图+PCB源文件+参考论文+参考PPT+元器件清单等)

方案选择 单片机的选择 方案一&#xff1a;AT89C52是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&…

STL之Stack与queue的模拟实现与duque的底层结构(3千字长文详解)

STL之Stack与queue的模拟实现与duque的底层结构 文章目录 STL之Stack与queue的模拟实现与duque的底层结构设计模式的概念适配器模式 stack的实现queue的实现双端队列——dequedeque的底层结构 设计模式的概念 设计模式像是古代的兵法&#xff0c;是以前的人总结出来的一些在特定…

TClientDataSet 模拟 EXCEL表

日常处理数据时&#xff0c;经常需要&#xff0c;从EXCEL表格中&#xff0c;批量导入数据&#xff0c;通过 XLSReadWriteII编程&#xff0c;会很快导入。 但是&#xff0c;客户提供的EXCEL表的字段&#xff0c;数据格式&#xff0c;字段的排序&#xff0c;有很大的区别。因此&a…

PostmanScript脚本功能使用详解!

目录 前言&#xff1a; 一、Pre-requestScript 二、TestScript 三、随机参数&#xff1a; 前言&#xff1a; Postman 是一个强大的 API 工具&#xff0c;可以用于构建、测试和文档化 Web API。Postman 还提供了一个名为 PostmanScript 的功能&#xff0c;它可以用于自动化…