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):
答案 0 :(得分:1)
vcrpy的新版本现在通过完全省略卡带名称来支持此功能。从文档中:
VCR.py现在允许省略use_cassette函数的path参数。以下两项现在都合法/应该可以使用
@my_vcr.use_cassette
def my_test_function():
...
在两种情况下,VCR.py都将使用从提供的测试功能名称生成的路径。如果不 设置了cassette_library_dir,卡带将位于目录中具有测试功能名称的文件中 声明测试功能的文件的名称。如果已经设置了cassette_library_dir,则卡带 将会显示在该目录的带有修饰功能名称的文件中。
可以通过自定义 path_transformer和func_path_generator vcr变量
答案 1 :(得分:0)
当前内置于录像机的功能尚无法完成此功能,但您可以制作自己的功能。 Check out the decorator that Venmo created.
答案 2 :(得分:0)
使用vcrpy-unittest
可以轻松实现这一点,正如您可能猜到的那样,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.yaml
和cassettes/TestCloudAPI.test_container_lifecycle.yaml
。
可以通过覆盖几个方法来自定义目录和命名:_get_cassette_library_dir
和_get_cassette_name
,但可能没有必要。
vcrpy-unittest
位于https://github.com/agriffis/vcrpy-unittest的github和https://pypi.python.org/pypi/vcrpy-unittest处的PyPI