大家好,我是木木。今天给大家分享一个超酷的Python库,vcrpy。
vcrpy是一个在自动化测试中极为有用的库,它能够记录和重放HTTP交互,极大地简化了测试过程中对外部服务依赖的管理。
这个库通过模拟真实的HTTP响应,为开发者提供了一种高效且简便的方法来测试应用程序,特别是在涉及外部API调用时。

核心特点
-
记录/重放: -
vcrpy能记录HTTP请求和响应,之后可重放,避免了对实际服务的重复请求。 -
简化测试: -
通过使用录制的响应,它简化了测试环境的搭建,特别是涉及到外部服务调用时。 -
灵活配置: -
支持多种序列化格式(如JSON, YAML),并允许细粒度的配置,如请求匹配、过滤敏感信息等。
最佳实践
安装vcrpy非常简单,只需要运行以下pip命令:
pip install vcrpy
接下来,让我们看看如何使用vcrpy的两个基本功能:
1. 录制HTTP请求
当你第一次执行涉及HTTP请求的测试时,vcrpy会自动记录这些请求及其响应到一个”cassette”文件中。
import vcr
import urllib.request
with vcr.use_cassette('fixtures/vcr_cassettes/synopsis.yaml'):
response = urllib.request.urlopen('http://www.iana.org/domains/reserved').read()
assert b'Example domains' in response
这段代码在执行HTTP请求时会创建一个名为synopsis.yaml
的文件,记录请求和响应的详细信息。

2. 重放HTTP请求
一旦请求被记录下来,后续的测试运行会使用这个记录的响应,而不是真实的HTTP请求。
@vcr.use_cassette('fixtures/vcr_cassettes/synopsis.yaml')
def test_iana():
response = urllib.request.urlopen('http://www.iana.org/domains/reserved').read()
assert b'Example domains' in response

高级功能示例
vcrpy还允许你对cassette进行细粒度的配置,比如过滤掉敏感信息,或者自定义请求的匹配逻辑。以下是一个示例,展示了如何过滤掉敏感信息:
import vcr
my_vcr = vcr.VCR(
filter_headers=['authorization'],
)
with my_vcr.use_cassette('fixtures/vcr_cassettes/synopsis.yaml'):
response = requests.get('https://httpbin.org/ip')
# 这里的请求将记录,但是请求头中的`authorization`会被过滤掉
这个功能对于保护测试记录中的敏感信息非常有用,尤其是在分享cassette文件时。
def before_record_cb(request):
if request.path == '/login':
return None
return request
my_vcr = vcr.VCR(
before_record_request=before_record_cb,
)
with my_vcr.use_cassette('test.yml'):
# 下面是个人代码
同时,你也可以注册一个回调,以便HTTP请求添加到vcr的忽略列表里,上面代码展示了会忽略记录login的请求
小总结
vcrpy是测试中处理HTTP请求的神器。它不仅能够帮助开发者录制和重放HTTP请求,从而简化测试流程,还支持灵活的配置和敏感信息过滤,是提高测试效率和保障测试安全性的重要工具。
—— End ——
原文始发于微信公众号(木木夕咦):Vcrpy,一个超酷的python库
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/259134.html