首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有可以替代Ruby的VCR库的python?

有没有可以替代Ruby的VCR库的python?
EN

Stack Overflow用户
提问于 2012-06-04 03:41:07
回答 3查看 2.9K关注 0票数 21

我想使用Ruby's VCR libraryBetamax for the JVM的强大的“录制/回放”机制。有没有这样工作的Python库呢?如果没有,你如何测试你的REST客户端调用而不担心测试缓慢和不稳定?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-04 08:39:29

最近几年开发了一个名为VCR.py的录像机Python端口。

如果你已经知道如何使用VCR并且对它很熟悉,你也可以考虑运行一个本地的ruby代理服务器(使用类似rack的东西),并将VCR加载到其中。然后,您可以在任何language...just中测试代码,确保通过本地服务器代理这些HTTP请求。这是VCR's rack middleware的主要用途之一。我以前用它测试过非ruby代码,它工作得很好。

票数 20
EN

Stack Overflow用户

发布于 2018-08-01 14:11:39

在其他答案中都提出了betamaxVCR.py。我想指出一个差异,它可能决定您可以使用哪一个。

Betamax期望您在设置测试时传递一个预先创建的requests.Session对象。这意味着会话对象必须来自测试内部,而不是在测试代码中。从文档中:

代码语言:javascript
复制
with Betamax(self.session) as vcr:
    vcr.use_cassette('user')
    resp = self.session.get('https://api.github.com/user',
                            auth=('user', 'pass'))
    assert resp.json()['login'] is not None

在我的例子中,会话对象是在我需要测试的代码中创建的。在这种情况下,betamax就不成问题了。

另一方面,VCR.py在较低的级别上修补了Python栈,因此它可以完美地工作:

代码语言:javascript
复制
import requests
import vcr

def my_func():
    session = requests.Session()
    response = session.get('https://stackoverflow.com/')
    print(response.text[:200])

def test_my_func():
    with vcr.use_cassette('/tmp/cassette.yaml'):
        my_func()
票数 4
EN

Stack Overflow用户

发布于 2016-09-27 16:51:54

还有一个python的betamax,我会全心全意地推荐它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10873368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档