1

vcrpy是 python 录制/播放包,下面是指南中的常用方法

class TestCloudAPI(unittest.TestCase):
    def test_get_api_token(self):
        with vcr.use_cassette('fixtures/vcr_cassettes/test_get_api_token.yaml'): 
            # real request and testing

    def test_container_lifecycle(self):
        with vcr.use_cassette('fixtures/vcr_cassettes/test_container_lifecycle.yaml'):

我想要不同的记录文件,所以我必须在每种方法中重复这个。

是否可以在某处有一条线来简化这一点,例如:

TEST_CASE_VCR(USE_METHOD_AS_FILENAME)
class TestCloudAPI(unittest.TestCase):
    def test_get_api_token(self):
        # real request and testing
    def test_container_lifecycle(self):
4

3 回答 3

1

现在,通过完全省略磁带名称,新版本的 vcrpy 支持这一点。从文档中:

VCR.py 现在允许省略 use_cassette 函数的路径参数。以下两项现在都是合法的/应该工作

@my_vcr.use_cassette
def my_test_function():
...

在这两种情况下,VCR.py 都将使用从提供的测试函数名称生成的路径。如果未设置cassette_library_dir,则cassette 将位于声明测试函数的文件目录中的一个名为测试函数的文件中。如果一个cassette_library_dir 已经被设置,那么该cassette 将出现在该目录中的一个文件中,该文件带有修饰函数的名称。

可以通过自定义 path_transformer 和 func_path_generator vcr 变量来控制自动命名机制生成的路径

于 2018-08-29T06:59:00.690 回答
0

目前 VCR 没有内置的功能,但您可以自己制作。 查看 Venmo 创建的装饰器。

于 2014-05-12T19:11:10.767 回答
0

这变得容易得多vcrpy-unittestis - 正如您可能猜到的那样 - 和 之间的vcrpy积分unittest

你的例子变成了这样:

from vcr_unittest import VCRTestCase

class TestCloudAPI(VCRTestCase):
    def test_get_api_token(self):
        # real request and testing

    def test_container_lifecycle(self):
        # real request and testing

并且磁带会根据测试自动命名并保存在cassettes测试文件旁边的目录中。例如,这将创建两个文件:cassettes/TestCloudAPI.test_get_api_token.yamlcassettes/TestCloudAPI.test_container_lifecycle.yaml.

_get_cassette_library_dir目录和命名可以通过重写几个方法来定制:_get_cassette_name但这可能不是必需的。

vcrpy-unittest在 github 上https://github.com/agriffis/vcrpy-unittest和 PyPI 在https://pypi.python.org/pypi/vcrpy-unittest

于 2015-12-09T14:38:50.713 回答