news 2026/3/13 13:41:04

自动化测试Mock神器:轻松模拟HTTP请求..

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自动化测试Mock神器:轻松模拟HTTP请求..

1、背景

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

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

一般有两种场景:

  • 前端对后端接口的 mock,

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

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

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

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

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

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

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

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

2、工具介绍

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

3、安装

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

  1. pip install requests

  2. pip install requests_mock

4、使用示例

示例一:使用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')

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/10 12:50:49

C# 12主构造函数应用精要(仅限高级开发者掌握的核心技能)

第一章:C# 12主构造函数简化编程概述 C# 12 引入了主构造函数(Primary Constructors)这一重要语言特性,显著简化了类和结构体的初始化逻辑。通过在类型定义时直接声明构造参数,开发者能够以更简洁的语法实现依赖注入和…

作者头像 李华
网站建设 2026/3/13 15:24:07

吴恩达新课程:Agentic AI(笔记15)

作者:司沐 课程地址: learn.deeplearning.ai/courses/agentic-ai github地址: datawhalechina/agentic-ai 5.7、多智能体系统的协作模式 ( Communication patterns for multi-agent systems ) 当一个团队一起工作时,他们之间的沟通模式可能会非常复杂。类似地,设计…

作者头像 李华
网站建设 2026/3/11 14:53:06

为什么顶尖团队都在用静态优化加速C++内核?真相令人震惊

第一章:C内核静态优化的真相与行业趋势在现代高性能计算和系统级编程领域,C因其对底层资源的精细控制能力而持续占据核心地位。编译器驱动的静态优化技术已成为提升程序执行效率的关键手段,尤其在无GC、低延迟场景中,开发者愈发依…

作者头像 李华
网站建设 2026/3/11 0:33:50

企业增长核心竞争力构建 2025十大战略咨询的关键支撑

在当前竞争激烈的市场中,企业增长的核心竞争力至关重要。为了在不断变化的环境中取得成功,企业需要制定清晰的战略方向,以创新和数字化转型作为支撑。创新能力推动企业不断推出新产品和服务,从而满足客户多样化需求。此外&#xf…

作者头像 李华
网站建设 2026/3/14 0:54:56

基于角色权限管理的JupyterHub + TensorFlow镜像架构

基于角色权限管理的 JupyterHub TensorFlow 镜像架构 在人工智能研发日益团队化、工程化的今天,一个常见的困境摆在许多数据科学团队面前:如何让研究员快速上手环境,又不让实习生误删生产模型?如何保障 GPU 资源不被某个用户独占…

作者头像 李华
网站建设 2026/3/13 10:29:16

大语言模型智能体强化学习:全景综述

智能体强化学习(Agentic Reinforcement Learning,Agentic RL)的兴起标志着相较于传统应用于大语言模型的强化学习(LLM RL)的一次范式转变。该转变将大语言模型从被动的序列生成器,重新塑造成嵌入于复杂、动…

作者头像 李华