Python中好用的第三方mock库-httmock
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中好用的第三方mock库-httmock相关的知识,希望对你有一定的参考价值。
参考技术A 在做一些项目的时候,因为用到了第三方的接口,而第三方的接口可能没有做好或者第三方的接口不方便访问的时候,一般都会用到Mock的技术。Mock这个词在英语中有模拟的这个意思。Python3.x中本身就自带了Mock库,(Python2.x中还是单独的)Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为。
简单的说,mock库用于如下的场景:
假设你开发的项目叫a,里面包含了一个模块b,模块b中的一个函数c(也就是a.b.c)在工作的时候需要调用发送请求给特定的服务器来得到一个JSON返回值,然后根据这个返回值来做处理。如果要为a.b.c函数写一个单元测试,该如何做?
一个简单的办法是搭建一个测试的服务器,在单元测试的时候,让a.b.c函数和这个测试服务器交互。但是这种做法有两个问题:
1 . 测试服务器可能很不好搭建,或者搭建效率很低。
2 . 你搭建的测试服务器可能无法返回所有可能的值,或者需要大量的工作才能达到这个目的。
httmock库是基于Mock库的,它更方便于用requests的方式来返回接口的值。
使用pip命令来安装:
用法:
1 您可以使用它来模拟第三方API和在内部使用 requests 的测试库,有条件地使用 urlmatch 装饰器:
控制台显示:
2 all_requests 装饰器没有条件地阻止实际的请求。 如果您返回一个字典,它将映射到返回的“request.Response”对象:
控制台显示:
3 如果你传递 Set-Cookie 头, request.Response.cookies 将包含这些值。 您也可以直接使用 response 方法,而不是返回一个dict:
控制台显示:
CC先生说:
要明白上面的例子,预备知识至少需要有:
-Python 中requests库的用法
-Python中装饰器的用法
or 你直接套用上面的用法就可以返回第三方接口或者依赖的模块的值了。
以上
Mock实现模拟python的对象
Mock库的应用
Mock在Python3.3之前是第三方库,需要安装 pip install Mock ;导入 import mock
Mock在Python3.3之后是Python标准库,导入方式为 from unittest import mock
Mock能够让我们模拟单元测试中不可用或繁重的资源;还可以模拟Python对象的行为
Mock 使用的原因:
一、环境由于客观原因由于无法搭建
二、搭建服务器的值需要大量工作才行
实现代码如下:
import requests
import shutil
def send_Mock(url):
r = requests.get(url)
return r.status_code
def visit_Mock():
return send_Mock("http://www.Teacherketang.com/")
class Remove(object):
def rmdir(self,path="E:/"):
re = shutil.rmtree(path)
if re == None:
return "seccess"
else:
return "fail"
def exists_get_rmdir(self):
return self.rmdir()
调用模块
from Mock_Test import Client_Mock
import unittest
from unittest import mock
class Mock_Test(unittest.TestCase):
def setUp(self):
self.r = Client_Mock.Remove()
def test_success_mock(self):
success_mock = mock.Mock(return_value="200")
Client_Mock.send_Mock = success_mock
self.assertEqual(Client_Mock.visit_Mock(),"200")
def test_fail_mock(self):
fail_mock = mock.Mock(return_value="404")
Client_Mock.send_Mock = fail_mock
self.assertEqual(Client_Mock.visit_Mock(), "404")
def test_remove_success(self):
remove_success = mock.Mock(return_value="success")
self.r.rmdir = remove_success
self.assertEqual(self.r.exists_get_rmdir(),remove_success())
def test_remove_fail(self):
remove_fail = mock.Mock(return_value="fail")
self.r.rmdir = remove_fail
self.assertEqual(self.r.exists_get_rmdir(),remove_fail())
if __name__ == ‘__main__‘:
unittest.main(verbosity=2)
以上是关于Python中好用的第三方mock库-httmock的主要内容,如果未能解决你的问题,请参考以下文章
使用Mock进行第三方API的Django / Python测试
Python遇上SQL,于是一个好用的Python第三方库出现了