尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

如何在本地 mock Nasdaq Data Link API 调用:data-link-python httpretty + Factory 测试实践

如何在本地 mock Nasdaq Data Link API 调用:data-link-python httpretty + Factory 测试实践 如何在本地 mock Nasdaq Data Link API 调用data-link-python httpretty Factory 测试实践【免费下载链接】data-link-pythonA Python library for Nasdaq Data Links RESTful API项目地址: https://gitcode.com/gh_mirrors/da/data-link-pythondata-link-python是 Nasdaq Data Link RESTful API 的官方 Python 客户端库。本文将手把手教你如何在本地mock Nasdaq Data Link API 调用用 httpretty 拦截网络请求、用 Factory 批量生成逼真的响应数据让>git clone https://gitcode.com/gh_mirrors/da/data-link-python pip install -r requirements.txt pip install httpretty factory-boy mock运行单个测试用例验证环境项目 README.md 中有完整说明python -m unittest -v test.test_dataset.GetDatasetTest.test_dataset_returns_dataset_object 关键技巧一用 MyHTTPretty 搞定 HTTPS 拦截很多新手直接用 httpretty 拦截https://请求会发现失败——这是因为 pyopenssl 对requests库做了猴子补丁覆盖了 httpretty 的 socket 拦截逻辑。项目提供了一个子类 MyHTTPretty 来解决这个坑class MyHTTPretty(OriginalHTTPretty): classmethod def enable(cls): OriginalHTTPretty.enable() if pyopenssl_override: extract_from_urllib3() # 撤掉 pyopenssl 补丁 classmethod def disable(cls): OriginalHTTPretty.disable() if pyopenssl_override: inject_into_urllib3() # 恢复 pyopenssl 补丁然后通过 httpretty_extension.py 把全局的httpretty替换成这个增强版测试里导入一次即可复用。 关键技巧二用 Factory 批量生成 API 响应数据手写一大段 JSON 既枯燥又容易出错。项目用 factory-boy 定义了几个数据工厂DatasetFactory生成 dataset 响应含dataset_code、column_names、frequency等字段factory.Sequence保证 id 自增不重复DatatableFactory生成非时序数据表datatable响应MetaFactory生成分页信息current_page、total_pages等# 一条造出一个 dataset dataset {dataset: DatasetFactory.build( database_codeNSE, dataset_codeOIL)} # 一条造出 3 个 dataset列表接口场景 datasets {datasets: DatasetFactory.build_batch(3)}需要特殊字段时直接在build()里传参覆盖默认值即可非常灵活。 一个完整的 mock 测试用例长什么样参考 test_dataset.py 中的标准写法三步走classmethod def setUpClass(cls): httpretty.enable() dataset {dataset: DatasetFactory.build( database_codeNSE, dataset_codeOIL)} httpretty.register_uri(httpretty.GET, re.compile(https://data.nasdaq.com/api/v3/datasets/*), bodyjson.dumps(dataset)) classmethod def tearDownClass(cls): httpretty.disable() httpretty.reset() def test_dataset_returns_dataset_object(self): dataset Dataset(NSE/OIL) self.assertEqual(dataset.dataset_code, OIL)要点说明setUpClass中注册整个测试类只 mock 一次所有用例共享速度更快URL 用正则匹配re.compile(...)可以覆盖带参数的各种请求路径tearDownClass中清理disable()reset()防止 mock 污染其他测试被测代码零改动Dataset(NSE/OIL)的写法和生产环境完全一致列表接口测试同理见 ListDatasetsTestDatasetFactory.build_batch(3)生成 3 条数据并合并MetaFactory的分页信息即可验证分页逻辑。⚠️ 常见问题排查HTTPS 请求未被拦截→ 确认导入的是test.helpers.httpretty_extension.httpretty而不是原生 httpretty不同测试之间互相影响→ 检查tearDownClass是否执行了httpretty.reset()响应字段缺失报错→ 对照 DatasetFactory 的字段与 nasdaqdatalink/model/dataset.py 的解析逻辑补齐缺失字段 小结工具解决的问题httprettyMyHTTPretty本地拦截 HTTP/HTTPS 请求伪造 API 响应factory-boy快速生成结构完整、字段可控的模拟数据unittest mock验证请求参数与业务逻辑掌握mock Nasdaq Data Link API的这套 httpretty Factory 实践后你不仅可以维护 contenteditable="false">【免费下载链接】data-link-pythonA Python library for Nasdaq Data Links RESTful API项目地址: https://gitcode.com/gh_mirrors/da/data-link-python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表