python中的第三方库 cdk_Python中好用的第三方mock库-httmock

在做一些项目的时候,因为用到了第三方的接口,而第三方的接口可能没有做好或者第三方的接口不方便访问的时候,一般都会用到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的方式来返回接口的值。

httmock.png

使用pip命令来安装:

pip install httmock

用法:

1 您可以使用它来模拟第三方API和在内部使用 requests 的测试库,有条件地使用urlmatch装饰器:

from httmock import urlmatch, HTTMock

import requests

@urlmatch(netloc=r'(.*\.)?google\.com$')

def google_mock(url, request):

return ('Feeling lucky, punk?')

with HTTMock(google_mock):

r = requests.get('http://google.com/')

print(r.content)

控制台显示:

b'Feeling lucky, punk?'

2 all_requests装饰器没有条件地阻止实际的请求。 如果您返回一个字典,它将映射到返回的“request.Response”对象:

from httmock import all_requests, HTTMock

import requests

@all_requests

def response_content(url, request):

return {'status_code': 200,

'content': 'Oh hai'}

with HTTMock(response_content):

r = requests.get('https://foo_bar')

print (r.status_code)

print (r.content)

控制台显示:

200

b'Oh hai'

3 如果你传递Set-Cookie头,request.Response.cookies将包含这些值。 您也可以直接使用response方法,而不是返回一个dict:

from httmock import all_requests, response, HTTMock

import requests

@all_requests

def response_content(url, request):

headers = {'content-type': 'application/json',

'Set-Cookie': 'foo=bar;'}

content = {'message': 'API rate limit exceeded'}

return response(403, content, headers, None, 5, request)

with HTTMock(response_content):

r = requests.get('https://api.github.com/users/whatever')

print (r.json().get('message'))

print (r.cookies['foo'])

控制台显示:

API rate limit exceeded

bar

CC先生说:

要明白上面的例子,预备知识至少需要有:

-Python 中requests库的用法

-Python中装饰器的用法

or 你直接套用上面的用法就可以返回第三方接口或者依赖的模块的值了。

以上

装.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值