21

我想使用Ruby 的 VCR 库JVM 的 Betamax的令人敬畏的“记录/播放”机制。是否有以相同方式工作的 Python 库?如果不是,您如何测试您的 REST 客户端调用,而不用担心测试缓慢且不稳定?

4

3 回答 3

20

过去几年开发了一个名为VCR.py的 VCR 的 Python 端口。

如果您已经知道如何使用 VCR 并且对它感到满意,您还可以考虑运行本地 ruby​​ 代理服务器(使用类似 rack 之类的东西)并将 VCR 加载到其中。然后你可以测试任何语言的代码......只要确保 HTTP 请求是通过你的本地服务器代理的。这是VCR 的机架中间件的主要用途之一。我以前用它来测试非 ruby​​ 代码,效果很好。

于 2012-06-04T00:39:29.453 回答
4

betamax和VCR.py都已在其他答案中提出。我想指出一个差异,它可能决定你可以使用哪一个。

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

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 的 HTTP 堆栈,因此可以完美运行:

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()
于 2018-08-01T06:11:39.357 回答
2

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

于 2016-09-27T08:51:53.707 回答