码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 自动化测试Mock神器:轻松模拟HTTP请求..


    一、背景

    在日常测试过程中或者研发开发过程中,目前接口暂时没有开发完成,测试人员又要提前介入接口测试中,测试人员不仅仅只是简单的编写测试用例,也可以通过一些mock的方法进行来提前根据接口测试的情况进行模拟返回接口的信息,进行模拟接口各种场景的异常。

    mock是指模拟,也就是模拟接口返回的信息,用已有的信息替换它需要返回的信息,从实现对所依赖的模块的测试。

    如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386   

    15天学会性能测试,通俗易懂详细教学,Jmeter性能测试实战(集群压测,全链路压测,性能调优,瓶颈分析)极速掌握,干就完事!_哔哩哔哩_bilibili15天学会性能测试,通俗易懂详细教学,Jmeter性能测试实战(集群压测,全链路压测,性能调优,瓶颈分析)极速掌握,干就完事!共计27条视频,包括:1.【性能测试】什么是性能测试以及性能测试的价值和目的、2.【性能测试】真实企业性能测试指标详解以及指标测算、3.【性能测试】真实企业中性能测试流程以及细节剖析等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV1B14y1D7X9/?spm_id_from=333.337.search-card.all.click

    一般有两种场景:

    • 前端对后端接口的 mock,

    • 后端服务之间的测试中涉及的mock,常常发生在单元测试的时候。

    前端mock可以通过一些工具来完成:

    • 使用抓包工具Fiddler,Charles 来实现,通过修改代理返回的数据,实现多种场景的测试。

    • 使用一些API管理工具来模拟,比如yapi,Easy Mock 等

    • 当然有编码能力的,也可以使用node.js,python的fastAPI来模拟

    后端的 Mock 则是从接口的角度,如果一个接口A返回的数据需要依赖于另一个接口B,当敏捷开发中B接口还未开发完全时候这里会需要用到 Mock。

    对于测试人员,对接口测试的时候,部分接口尚未开发完成,在约定了接口定义之后,也可以使用 Mock 来模拟。

    今天给大家介绍一款Python Mock工具:requests-mock

    二、工具介绍

    requests-mock是一个用于模拟HTTP请求的Python库,它可以帮助开发人员在测试和开发过程中模拟各种HTTP请求和响应。使用requests-mock,可以用来模拟接口的各种场景,就像真正的服务器一样。

    特点:

    1. 灵活性:requests-mock允许开发人员根据需要灵活地定义虚拟的HTTP响应,包括状态码、头部信息、响应体等。

    2. 易用性:requests-mock的API设计简单易用,开发人员可以很容易地集成到他们的测试和开发工作流程中。

    3. 可扩展性:requests-mock支持自定义的响应生成器和请求匹配器,可以满足各种复杂的测试需求。

    适用场景:

    • 单元测试:

      开发人员可以使用requests-mock模拟HTTP请求和响应,以便在单元测试中测试他们的代码。

    • 集成测试:

      在进行集成测试时,requests-mock可以帮助开发人员模拟外部服务的行为,以验证系统的整体功能。

    • 开发过程中的快速原型验证:

      在开发过程中,开发人员可以使用requests-mock快速验证他们的代码对于不同的HTTP响应的处理情况。

    通过Mock能够帮助我们模拟系统各种行为,包括网络请求、文件读写、数据库操作、系统时间等等。这能够在测试代码时降低对外部依赖的需求,从而提高代码的可测试性。

    三、安装

    安装必要的模块:requests, requests_mock。

    1. pip install requests
    2. pip install requests_mock

    四 、使用示例

    示例一:使用Mock模拟GET、Post请求

    以下是一个使用requests-mock模拟GET请求和POST请求的示例:

    1. import requests
    2. import requests_mock
    3. # 模拟GET请求
    4. with requests_mock.Mocker() as m:
    5. # 模拟post请求内容,返回的json格式,返回码为200
    6. m.get('http://example.com/api/data', json={"name":"测试开发技术"}, status_code=200)
    7. response = requests.get('http://example.com/api/data')
    8. print(response.json())
    9. # 模拟POST请求
    10. with requests_mock.Mocker() as m:
    11. # 模拟post请求内容,返回的json格式,返回码为200
    12. m.post('http://example.com/api/submit',json={"name":"测试开发技术"}, status_code=201)
    13. response = requests.post('http://example.com/api/submit', data={'key': 'value'})
    14. print(response.json())

    在上面的示例中,我们使用requests-mock模拟了一个GET请求和一个POST请求。在每个模拟的上下文中,我们使用requests_mock.Mocker()创建了一个模拟器,并使用m.get()和m.post()分别定义了GET请求和POST请求的模拟响应。然后,我们使用requests库发送了实际的GET和POST请求,并打印了模拟的响应内容。

    示例二:requests-mock在测试脚本中的用法

    1. import requests
    2. import requests_mock
    3. def get_data():
    4. response = requests.get('http://example.com/api')
    5. return response.json()
    6. def test_get_data():
    7. adapter = requests_mock.Adapter()
    8. mock_response = {"status": "ok", "datas": [{"name": "狂师", "description": "公众号:测试开发技术"}]}
    9. adapter.register_uri('GET', 'http://example.com/api', json=mock_response)
    10. with requests.Session() as session:
    11. session.mount('http://', adapter)
    12. data = get_data()
    13. assert data["status"] == "ok"
    14. assert len(news_data["datas"]) == 1
    15. assert news_data["datas"][0]["name"] == "狂师"

    示例三:requests-mock模拟请求错误异常

    正常请求接口的时候,都会出现接口异常情况,比如超时哈,或者请求服务器异常等操作,接下来小编通过requests-mock进行模拟服务器异常的情况。

    1. import requests
    2. import requests_mock
    3. from requests.exceptions import ConnectionError, Timeout
    4. def test_exception():
    5. with requests_mock.Mocker() as m:
    6. # 模拟请求超时处理
    7. m.get('http://example.com/api',exc=Timeout)
    8. # 通过pytest.raises进行捕捉异常,如果存在异常,则判断为pass
    9. with pytest.raises(Timeout):
    10. requests.get('http://example.com/api',timeout=3)
    11. # 模拟服务器错误
    12. m.get('http://example.com/api', exc=ConnectionError)
    13. # 发送请求并断言是否抛出了预期的异常
    14. with pytest.raises(ConnectionError):
    15. requests.get('http://example.com/api')

  • 相关阅读:
    VIAVI唯亚威FFL-050/-100 可视故障定位仪
    C. Mortal Kombat Tower(DP)
    2023-10-21:用go语言,一共有三个服务A、B、C,网络延时分别为a、b、c 并且一定有:1 <= a <= b <= c <= 10^9 但是具体的延时数字丢失了,只有单次调用的时间 一次调
    如何成为优秀的咖啡师?
    【智能家居-大模型】构建未来,聆思大模型智能家居交互解决方案正式发布
    云计算中的过度授权:安全隐患与应对策略
    Find My背包|苹果Find My技术与背包相结合,智能防丢,全球定位
    day60:ARMday7,串口实现数据收发字符串
    Deep Learning for Anomaly Detection: A Review
    Springboot美得商城的设计与实现860t0计算机毕业设计-课程设计-期末作业-毕设程序代做
  • 原文地址:https://blog.csdn.net/m0_73409141/article/details/134421959
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号