Make mockserver instances per-class.

This commit is contained in:
Andrey Rakhmatullin 2025-02-02 14:10:09 +05:00
parent 1a0dfbd32e
commit 783b98deda
14 changed files with 119 additions and 72 deletions

View File

@ -13,12 +13,14 @@ from tests.spiders import (
class TestCloseSpider(TestCase):
def setUp(self):
self.mockserver = MockServer()
self.mockserver.__enter__()
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
def tearDown(self):
self.mockserver.__exit__(None, None, None)
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
@defer.inlineCallbacks
def test_closespider_itemcount(self):

View File

@ -56,12 +56,14 @@ from tests.spiders import (
class CrawlTestCase(TestCase):
def setUp(self):
self.mockserver = MockServer()
self.mockserver.__enter__()
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
def tearDown(self):
self.mockserver.__exit__(None, None, None)
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
@defer.inlineCallbacks
def test_follow_all(self):
@ -448,12 +450,14 @@ with multiples lines
class CrawlSpiderTestCase(TestCase):
def setUp(self):
self.mockserver = MockServer()
self.mockserver.__enter__()
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
def tearDown(self):
self.mockserver.__exit__(None, None, None)
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
@defer.inlineCallbacks
def _run_spider(self, spider_cls):

View File

@ -693,12 +693,14 @@ class Http11MockServerTestCase(unittest.TestCase):
settings_dict: dict | None = None
def setUp(self):
self.mockserver = MockServer()
self.mockserver.__enter__()
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
def tearDown(self):
self.mockserver.__exit__(None, None, None)
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
@defer.inlineCallbacks
def test_download_with_content_length(self):

View File

@ -50,13 +50,17 @@ class DownloaderSlotsSettingsTestSpider(MetaSpider):
class CrawlTestCase(TestCase):
def setUp(self):
self.mockserver = MockServer()
self.mockserver.__enter__()
self.runner = CrawlerRunner()
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
def tearDown(self):
self.mockserver.__exit__(None, None, None)
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
def setUp(self):
self.runner = CrawlerRunner()
@defer.inlineCallbacks
def test_delay(self):

View File

@ -636,13 +636,19 @@ class FeedExportTestBase(ABC, unittest.TestCase):
filename = "".join(chars)
return Path(self.temp_dir, inter_dir, filename)
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
def setUp(self):
self.temp_dir = tempfile.mkdtemp()
self.mockserver = MockServer()
self.mockserver.__enter__()
def tearDown(self):
self.mockserver.__exit__(None, None, None)
shutil.rmtree(self.temp_dir, ignore_errors=True)
@defer.inlineCallbacks

View File

@ -262,9 +262,16 @@ class DropSomeItemsPipeline:
class ShowOrSkipMessagesTestCase(TwistedTestCase):
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
def setUp(self):
self.mockserver = MockServer()
self.mockserver.__enter__()
self.base_settings = {
"LOG_LEVEL": "DEBUG",
"ITEM_PIPELINES": {
@ -272,9 +279,6 @@ class ShowOrSkipMessagesTestCase(TwistedTestCase):
},
}
def tearDown(self):
self.mockserver.__exit__(None, None, None)
@defer.inlineCallbacks
def test_show_messages(self):
crawler = get_crawler(ItemSpider, self.base_settings)

View File

@ -64,10 +64,16 @@ class FileDownloadCrawlTestCase(TestCase):
"ed3f6538dc15d4d9179dae57319edc5f",
}
def setUp(self):
self.mockserver = MockServer()
self.mockserver.__enter__()
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
def setUp(self):
# prepare a directory for storing files
self.tmpmediastore = Path(mkdtemp())
self.settings = {
@ -80,7 +86,6 @@ class FileDownloadCrawlTestCase(TestCase):
def tearDown(self):
shutil.rmtree(self.tmpmediastore)
self.items = []
self.mockserver.__exit__(None, None, None)
def _on_item_scraped(self, item):
self.items.append(item)

View File

@ -77,12 +77,14 @@ class ItemSpider(Spider):
class PipelineTestCase(unittest.TestCase):
def setUp(self):
self.mockserver = MockServer()
self.mockserver.__enter__()
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
def tearDown(self):
self.mockserver.__exit__(None, None, None)
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
def _on_item_scraped(self, item):
self.assertIsInstance(item, dict)

View File

@ -62,14 +62,21 @@ def _wrong_credentials(proxy_url):
class ProxyConnectTestCase(TestCase):
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
def setUp(self):
try:
import mitmproxy # noqa: F401
except ImportError:
self.skipTest("mitmproxy is not installed")
self.mockserver = MockServer()
self.mockserver.__enter__()
self._oldenv = os.environ.copy()
self._proxy = MitmProxy()
@ -78,7 +85,6 @@ class ProxyConnectTestCase(TestCase):
os.environ["http_proxy"] = proxy_url
def tearDown(self):
self.mockserver.__exit__(None, None, None)
self._proxy.stop()
os.environ = self._oldenv

View File

@ -57,12 +57,14 @@ class AlternativeCallbacksMiddleware:
class CrawlTestCase(TestCase):
def setUp(self):
self.mockserver = MockServer()
self.mockserver.__enter__()
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
def tearDown(self):
self.mockserver.__exit__(None, None, None)
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
@defer.inlineCallbacks
def test_response_200(self):

View File

@ -154,12 +154,14 @@ class KeywordArgumentsSpider(MockServerSpider):
class CallbackKeywordArgumentsTestCase(TestCase):
maxDiff = None
def setUp(self):
self.mockserver = MockServer()
self.mockserver.__enter__()
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
def tearDown(self):
self.mockserver.__exit__(None, None, None)
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
@defer.inlineCallbacks
def test_callback_kwargs(self):

View File

@ -25,12 +25,14 @@ class SignalCatcherSpider(Spider):
class TestCatching(TestCase):
def setUp(self):
self.mockserver = MockServer()
self.mockserver.__enter__()
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
def tearDown(self):
self.mockserver.__exit__(None, None, None)
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
@defer.inlineCallbacks
def test_success(self):

View File

@ -21,13 +21,17 @@ class ItemSpider(Spider):
class AsyncSignalTestCase(unittest.TestCase):
def setUp(self):
self.mockserver = MockServer()
self.mockserver.__enter__()
self.items = []
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
def tearDown(self):
self.mockserver.__exit__(None, None, None)
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
def setUp(self):
self.items = []
async def _on_item_scraped(self, item):
item = await get_from_asyncio_queue(item)

View File

@ -172,12 +172,14 @@ class TestHttpErrorMiddlewareHandleAll(TestCase):
class TestHttpErrorMiddlewareIntegrational(TrialTestCase):
def setUp(self):
self.mockserver = MockServer()
self.mockserver.__enter__()
@classmethod
def setUpClass(cls):
cls.mockserver = MockServer()
cls.mockserver.__enter__()
def tearDown(self):
self.mockserver.__exit__(None, None, None)
@classmethod
def tearDownClass(cls):
cls.mockserver.__exit__(None, None, None)
@defer.inlineCallbacks
def test_middleware_works(self):