首页 > 其他分享 >pytest + yaml 框架 -42.支持 mock 功能

pytest + yaml 框架 -42.支持 mock 功能

时间:2023-07-01 10:31:42浏览次数:41  
标签:返回 http 自定义 flow 42 yaml pytest 拦截 response

前言

前面已经通过代理实现了抓包自动生成 yaml 用例的功能,通过代理也可以实现 mock 功能。
mock 有2种场景:
1.直接拦截发出去的请求,还未到达服务端,模拟自定义返回结果
2.发出去的请求,服务端有反回,拦截返回的结果,篡改返回内容,模拟自己需要的数据

拦截发出去的请求

先看第一种场景:直接拦截发出去的请求,还未到达服务端,模拟自定义返回结果

pytest + yaml 框架 -42.支持 mock 功能_pytest+yaml

mt_mock.py 内容如下

from mitmproxy import http


class MockAPI:

    def request(self, flow: http.HTTPFlow):
        print("------------拦截请求----------------")
        if flow.request.pretty_url == "
            # 构造自定义 response
            flow.response = http.Response.make(
                200,   # 返回状态码
                "自定义返回内容: 上海-悠悠",  # 返回content str or bytes
                {"Content-Type": "text/html"}  # 返回 headers
            )

addons = [
    MockAPI()
]

启动服务

>mitmweb -s ./mt_mock.py -p 8099

基本环境准备参考前面这篇 本机开启代理,设置8099端口。

浏览器访问 地址,就会看到模拟的返回结果

pytest + yaml 框架 -42.支持 mock 功能_返回结果_02

拦截返回的结果,篡改返回内容

第二种场景:发出去的请求,服务端有反回,拦截返回的结果,篡改返回内容,模拟自己需要的数据

pytest + yaml 框架 -42.支持 mock 功能_pytest_03

使用示例:访问http://www.example.com/ 本来返回的是html格式,我改下返回json格式

from mitmproxy import http


class MockAPI:

    def request(self, flow: http.HTTPFlow):
        print("------------拦截请求----------------")
        if flow.request.pretty_url == ":
            # 构造自定义 response
            flow.response = http.Response.make(
                200,   # 返回状态码
                "自定义返回内容: 上海-悠悠",  # 返回content str or bytes
                {"Content-Type": "text/html"}  # 返回 headers
            )

    def response(self, flow: http.HTTPFlow):
        if flow.request.pretty_url == "http://www.example.com/":
            # 修改返回结果
            print(f'状态码: {flow.response.status_code}')
            flow.response.headers["Content-Type"] = "application/json"
            flow.response.set_text('{"code": 0, "message": "success"}')


addons = [
    MockAPI()
]

访问后返回结果

pytest + yaml 框架 -42.支持 mock 功能_自定义_04




标签:返回,http,自定义,flow,42,yaml,pytest,拦截,response
From: https://blog.51cto.com/u_15249893/6598318

相关文章

  • 【雕爷学编程】Arduino动手做(142)---GY-25串口倾斜度模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • pytest接口自动化测试框架搭建的全过程
    pytest是Python的一种单元测试框架,可用来组织用例执行,用例断言,下面这篇文章主要给大家介绍了关于pytest接口自动化测试框架搭建的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下一.背景Pytest目前已经成为Python系自动化测试必学必备的一个框架,网上也有很多......
  • 【CF1842F】Tenzing and Tree
    题目题目链接:https://codeforces.com/contest/1842/problem/F给定一棵\(n\)个点的树,你可以选择其中\(k\)个点染黑,定义一条边的价值为割去这条边之后,剩下两颗树的黑点数量差;一棵树的价值为所有边的价值之和。对于\(k\in[0,n]\),求出树的价值的最大值。\(n\leq5000\)。思......
  • Python全栈工程师(42:Web框架Django步骤)
    1.创建Django工程django-adminstartproject工程名2.创建appcd工程名pythonmanage.pystartappcmdb3.静态文件project.settings.pySTATICFILES_DIRS = (  'static'),      ) 4.模板路径TEMPLATE_DIRS = (  'templates'),      ) 5.settings中middlerwa......
  • RT-Thread 正点原子阿波罗STM32F429IGT6-软件IIC控制I/O扩展模块PCF8574T(踩坑)
    第一步:在RT-ThreadSettings中打开I2C设备驱动,Ctrl+S保存 第二步:在drivers->board.h中进行配置,取消BSP_USING_I2C2的注释,并根据说明定义好引脚; 第三步:对引脚进行初始化,这里可使用CubeMX进行生成; 第四步:根据设备名查找设备 第五步:调用 rt_i2c_transfer 发......
  • pytest + yaml 框架 -43.支持自定义函数提取返回结果
    前言在yaml用例中提取返回结果,可以支持以下三种表达式jmespath取值语法:body.keyname.keynamejsonpath语法:$..keynamere正则语法以上三种表达式可以满足99%的测试场景需求了,但是有些特殊的需求通过表达式无法取到,为了满足另外1%的需求,可以自定义函数取值。此功......
  • ORA-29278: SMTP transient error: 421 Service not available
    ORA-29278:SMTPtransienterror:421Servicenotavailable一般来说,很可能是邮件服务器连接不上p_conn:=utl_smtp.open_connection('xx.xx.xxx.xxx',xxx);解决方法也很简单,将ip改为正确的邮件服务器ip即可......
  • AWScli container yaml file
    AWSclicontaineryamlfileapiVersion:v1kind:Podmetadata:name:awsclilabels:app:awsclispec:#serviceAccountName:YOUR_SERVICE_ACCOUNTcontainers:-image:amazon/aws-clicommand:-"sleep"-"604800&q......
  • busybox yaml file
    简单的busybox的yaml文件kind:DeploymentapiVersion:apps/v1metadata:name:clearlognamespace:defaultlabels:app:busyboxspec:replicas:3selector:matchLabels:app:clearlogtemplate:metadata:labels:app......
  • CodeForces 1842E Tenzing and Triangle
    洛谷传送门CF传送门一个很显然的观察:选择的三角形两两重叠面积为\(0\),否则合并更优。考虑dp,设\(f_i\)为删完\(x_j\gei\)的所有点的最小花费。转移就枚举选择的三角形直角边长\(l\),那么\(f_i=\min(f_{i+1}+\sum\limits_{x_p=i}c_p,\min\limits_lf_{i+l}......