mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-08 16:53:23 +00:00
Use pytest-httpbin
This will help the test flakiness and speed up test runs.
This commit is contained in:
@@ -6,15 +6,21 @@ from six.moves.urllib.request import urlopen
|
||||
DEFAULT_URI = 'http://httpbin.org/get?p1=q1&p2=q2' # base uri for testing
|
||||
|
||||
|
||||
def _replace_httpbin(uri, httpbin, httpbin_secure):
|
||||
return uri.replace('http://httpbin.org', httpbin.url).replace('https://httpbin.org', httpbin_secure.url)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def cassette(tmpdir):
|
||||
def cassette(tmpdir, httpbin, httpbin_secure):
|
||||
"""
|
||||
Helper fixture used to prepare the cassete
|
||||
returns path to the recorded cassette
|
||||
"""
|
||||
default_uri = _replace_httpbin(DEFAULT_URI, httpbin, httpbin_secure)
|
||||
|
||||
cassette_path = str(tmpdir.join('test.yml'))
|
||||
with vcr.use_cassette(cassette_path, record_mode='all'):
|
||||
urlopen(DEFAULT_URI)
|
||||
urlopen(default_uri)
|
||||
return cassette_path
|
||||
|
||||
|
||||
@@ -28,9 +34,6 @@ def cassette(tmpdir):
|
||||
('host',
|
||||
'https://httpbin.org/post?a=b',
|
||||
'http://google.com/get?p1=q1&p2=q2'),
|
||||
('port',
|
||||
'https://google.com:80/post?a=b',
|
||||
'http://httpbin.org:5000/get?p1=q1&p2=q2'),
|
||||
('path',
|
||||
'https://google.com/get?a=b',
|
||||
'http://httpbin.org/post?p1=q1&p2=q2'),
|
||||
@@ -38,10 +41,15 @@ def cassette(tmpdir):
|
||||
'https://google.com/get?p2=q2&p1=q1',
|
||||
'http://httpbin.org/get?p1=q1&a=b')
|
||||
])
|
||||
def test_matchers(cassette, matcher, matching_uri, not_matching_uri):
|
||||
def test_matchers(httpbin, httpbin_secure, cassette, matcher, matching_uri, not_matching_uri):
|
||||
|
||||
matching_uri = _replace_httpbin(matching_uri, httpbin, httpbin_secure)
|
||||
not_matching_uri = _replace_httpbin(not_matching_uri, httpbin, httpbin_secure)
|
||||
default_uri = _replace_httpbin(DEFAULT_URI, httpbin, httpbin_secure)
|
||||
|
||||
# play cassette with default uri
|
||||
with vcr.use_cassette(cassette, match_on=[matcher]) as cass:
|
||||
urlopen(DEFAULT_URI)
|
||||
urlopen(default_uri)
|
||||
assert cass.play_count == 1
|
||||
|
||||
# play cassette with matching on uri
|
||||
@@ -55,7 +63,9 @@ def test_matchers(cassette, matcher, matching_uri, not_matching_uri):
|
||||
urlopen(not_matching_uri)
|
||||
|
||||
|
||||
def test_method_matcher(cassette):
|
||||
def test_method_matcher(cassette, httpbin, httpbin_secure):
|
||||
default_uri = _replace_httpbin(DEFAULT_URI, httpbin, httpbin_secure)
|
||||
|
||||
# play cassette with matching on method
|
||||
with vcr.use_cassette(cassette, match_on=['method']) as cass:
|
||||
urlopen('https://google.com/get?a=b')
|
||||
@@ -65,7 +75,7 @@ def test_method_matcher(cassette):
|
||||
with pytest.raises(vcr.errors.CannotOverwriteExistingCassetteException):
|
||||
with vcr.use_cassette(cassette, match_on=['method']) as cass:
|
||||
# is a POST request
|
||||
urlopen(DEFAULT_URI, data=b'')
|
||||
urlopen(default_uri, data=b'')
|
||||
|
||||
|
||||
@pytest.mark.parametrize("uri", [
|
||||
@@ -73,7 +83,10 @@ def test_method_matcher(cassette):
|
||||
'http://httpbin.org/get?p2=q2&p1=q1',
|
||||
'http://httpbin.org/get?p2=q2&p1=q1',
|
||||
])
|
||||
def test_default_matcher_matches(cassette, uri):
|
||||
def test_default_matcher_matches(cassette, uri, httpbin, httpbin_secure):
|
||||
|
||||
uri = _replace_httpbin(uri, httpbin, httpbin_secure)
|
||||
|
||||
with vcr.use_cassette(cassette) as cass:
|
||||
urlopen(uri)
|
||||
assert cass.play_count == 1
|
||||
@@ -82,18 +95,19 @@ def test_default_matcher_matches(cassette, uri):
|
||||
@pytest.mark.parametrize("uri", [
|
||||
'https://httpbin.org/get?p1=q1&p2=q2',
|
||||
'http://google.com/get?p1=q1&p2=q2',
|
||||
'http://httpbin.org:5000/get?p1=q1&p2=q2',
|
||||
'http://httpbin.org/post?p1=q1&p2=q2',
|
||||
'http://httpbin.org/get?p1=q1&a=b'
|
||||
])
|
||||
def test_default_matcher_does_not_match(cassette, uri):
|
||||
def test_default_matcher_does_not_match(cassette, uri, httpbin, httpbin_secure):
|
||||
uri = _replace_httpbin(uri, httpbin, httpbin_secure)
|
||||
with pytest.raises(vcr.errors.CannotOverwriteExistingCassetteException):
|
||||
with vcr.use_cassette(cassette):
|
||||
urlopen(uri)
|
||||
|
||||
|
||||
def test_default_matcher_does_not_match_on_method(cassette):
|
||||
def test_default_matcher_does_not_match_on_method(cassette, httpbin, httpbin_secure):
|
||||
default_uri = _replace_httpbin(DEFAULT_URI, httpbin, httpbin_secure)
|
||||
with pytest.raises(vcr.errors.CannotOverwriteExistingCassetteException):
|
||||
with vcr.use_cassette(cassette):
|
||||
# is a POST request
|
||||
urlopen(DEFAULT_URI, data=b'')
|
||||
urlopen(default_uri, data=b'')
|
||||
|
||||
Reference in New Issue
Block a user