vcr.py的python unittest集成
vcrpy-unittest的Python项目详细描述
此包提供VCRTestCase用于 VCR.py和Python的可敬的unittest。
用法
继承自VCRTestCase,用于自动录制和回放http 互动。
fromvcr_unittestimportVCRTestCaseimportrequestsclassMyTestCase(VCRTestCase):deftest_something(self):response=requests.get('http://example.com')
类似于vcr.py从上下文管理器返回磁带的方式, VCRTestCase使磁带可用作self.cassette:
self.assertEqual(len(self.cassette),1)self.assertEqual(self.cassette.requests[0].uri,'http://example.com')
默认情况下,磁带将放在 测试,根据测试类和方法命名。例如,上面的测试 会读写cassettes/MyTestCase.test_something.yaml
可以通过重写子类上的方法来修改配置: _get_vcr_kwargs、_get_cassette_library_dir和_get_cassette_name。 要在实例化后修改VCR对象,例如添加匹配器, 您可以挂接_get_vcr,例如:
classMyTestCase(VCRTestCase):def_get_vcr(self,**kwargs):myvcr=super(MyTestCase,self)._get_vcr(**kwargs)myvcr.register_matcher('mymatcher',mymatcher)myvcr.match_on=['mymatcher']returnmyvcr
见 the source 对于这些方法的默认实现,以及VCR.py对于更多 信息。
VCRMIXIN < EH3>
如果继承的原因很难,因为存在
包含基类中的测试的类层次结构,继承自VCRMixin
相反。fromvcr_unittestimportVCRMixinimportrequestsimportunittestclassMyTestMixin(VCRMixin):deftest_something(self):response=requests.get(self.url)classMyTestCase(MyTestMixin,unittest.TestCase):url='http://example.com'
兼容性
VCRTestCase支持vcr.py支持的python版本的子集。 特别是python 2.6被排除在外,因为它缺少TestCase.addCleanup。 使用tearDown添加对Python2.6的支持非常简单,但是 实现是脆弱的,因为它依赖于 继承链。而不是承担这个额外的复杂性,Python 2.6是 只是暂时排除在外。
许可证
这个库使用mit许可证,它与vcr.py相同。有关详细信息,请参见LICENSE.txt 细节。
致谢
感谢@kevin1024为VCR.py和@IvanMalison为他的 对这个方案的建设性评论。也要感谢@nedbat对他的post regarding unittest and context managers, 为了httreplay的@davepeck 这对我很有帮助。