技术分享 | 如何模拟真实使用场景?mock 技术来帮你

本文介绍了如何利用Charles工具进行Mock,包括MapLocal功能实现本地文件请求替换,MapRemote用于重定向到其他网址,以及Rewrite功能的正则替换技巧。通过实例演示了如何在测试环境中替换百度搜索为霍格沃兹,提升自动化测试效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mock 是一种通过代理修改请求与响应,从而辅助构造更多应用场景的工具。比如在工作中,可能需要 mock 第三方的回调给到测试人员测试的环境,从而更顺利的开展测试工作,也使得测试环境更接近真实的使用场景。

Charles 修改请求与响应

MapLocal

将指定的网络请求重定向到本地文件。

  1. 先保存接口返回数据,右键单击某接口->点击 SaveResponse ->选择 html 格式

  2. 对本地的 html 进行修改,将“百度一下”改为“霍格沃兹”

  3. 设置 charles 进行 map local,右键点击 Map Local->进入 Edit Mapping ->点击 choose ->选择修改后的 html->点击 OK

  4. 此时再次请求百度,则可以看到“百度一下”变为了“霍格沃兹”

在 Charles 的菜单中,选择 Tools->Map Remote 或 Map Local 即可进入到相应功能的设置页面。

MapRemote

是将指定的网络请求重定向到另一个网址请求地址。

1. 设置参数Toos->Map Remote

2. 查看访问结果,则会发现,www.baidu.com 会被重定向到 www.sougou.com

Rewrite 功能

Rewrite 功能功能适合对某一类网络请求进行一些正则替换,以达到修改结果的目的。

1. 打开 Tools->Rewrite,对内容进行替换,下面把页面中“我的关注”替换为霍格沃兹

2. 再次申请百度,同样,“我的关注”变为了“霍格沃兹”

推荐学习

Python App自动化测试训练营全面升级,资深测试开发工程师带你从0到1快速上手APP自动化测试,扫码可领取课程资料哦~

Python测试中,`unittest.mock`库(也被称为`unittest.mock`)提供了一种方便的方式来模拟数据库查询,特别是当你要关注函数的实际逻辑而非依赖于数据库交互的时候。这里是一个简单的例子: 首先,假设你有这样一个数据库查询函数: ```python import sqlite3 from typing import List def fetch_data_from_db(database_name: str) -> List[dict]: conn = sqlite3.connect(database_name) cursor = conn.cursor() query_result = cursor.execute("SELECT * FROM table") return [row for row in query_result.fetchall()] ``` 然后,在测试中,我们可以使用`mock`库来模拟`sqlite3.connect`和`cursor.execute`: ```python from unittest.mock import MagicMock, patch import your_database_module # 将上面的函数导入到测试模块里 @patch('your_database_module.sqlite3.connect', return_value=MagicMock()) @patch('your_database_module.cursor') def test_fetch_data_with_mock(mock_cursor, mock_connect): # 创建一个预期结果列表 expected_result = [{'id': 1, 'name': 'Example'}, {'id': 2, 'name': 'Test'}] # 模拟cursor对象的execute方法返回预期数据 mock_cursor.return_value.fetchall.return_value = expected_result # 测试函数 result = your_database_module.fetch_data_from_db('test_database.db') # 验证结果是否符合预期 assert result == expected_result # 确保connect和cursor都被调用了 mock_connect.assert_called_once() mock_cursor.assert_called_once_with(mock_connect()) ``` 在这个测试中,`patch`装饰器会拦截对`sqlite3.connect`和`cursor`的调用,使得它们指向我们自定义的`MagicMock`对象。这样,当我们运行测试时,`fetch_data_from_db`函数就不会真的去查询数据库,而是使用预设好的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值